Skip to content
Snippets Groups Projects
Commit e53d2912 authored by Daniel Stone's avatar Daniel Stone
Browse files

drm/etnaviv: Add per-BO explicit sync support


etnaviv already includes a per-submission flag for whether or not to
respect implicit synchronization. Generic Linux environments use this,
whereas fully explicit environments like Android use explicit only.

However, hybrid environments can exist, e.g. legacy/EGL clients using
implicit synchronization, and Vulkan clients using explicit
synchronization. A compositor may therefore have a mixed scene where
some BOs should respect implicit sync and others should not, in a single
draw call.

Add a per-BO flag to enable or disable implicit sync.

Signed-off-by: Daniel Stone's avatarDaniel Stone <daniels@collabora.com>
parent 888ec536
No related branches found
No related tags found
No related merge requests found
......@@ -512,7 +512,7 @@ static struct drm_driver etnaviv_drm_driver = {
.desc = "etnaviv DRM",
.date = "20151214",
.major = 1,
.minor = 1,
.minor = 2,
};
/*
......
......@@ -26,7 +26,11 @@
* Cmdstream submission:
*/
#define BO_INVALID_FLAGS ~(ETNA_SUBMIT_BO_READ | ETNA_SUBMIT_BO_WRITE)
#define BO_INVALID_FLAGS ~( \
ETNA_SUBMIT_BO_READ | \
ETNA_SUBMIT_BO_WRITE | \
ETNA_SUBMIT_BO_NO_IMPLICIT | \
0)
/* make sure these don't conflict w/ ETNAVIV_SUBMIT_BO_x */
#define BO_LOCKED 0x4000
#define BO_PINNED 0x2000
......@@ -172,7 +176,8 @@ static int submit_fence_sync(const struct etnaviv_gem_submit *submit)
for (i = 0; i < submit->nr_bos; i++) {
struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj;
bool write = submit->bos[i].flags & ETNA_SUBMIT_BO_WRITE;
bool explicit = !!(submit->flags & ETNA_SUBMIT_NO_IMPLICIT);
bool explicit = !!(submit->flags & ETNA_SUBMIT_NO_IMPLICIT) ||
!!(submit->bos[i].flags & ETNA_SUBMIT_BO_NO_IMPLICIT);
ret = etnaviv_gpu_fence_sync_obj(etnaviv_obj, context, write,
explicit);
......
......@@ -144,6 +144,7 @@ struct drm_etnaviv_gem_submit_reloc {
*/
#define ETNA_SUBMIT_BO_READ 0x0001
#define ETNA_SUBMIT_BO_WRITE 0x0002
#define ETNA_SUBMIT_BO_NO_IMPLICIT 0x0004
struct drm_etnaviv_gem_submit_bo {
__u32 flags; /* in, mask of ETNA_SUBMIT_BO_x */
__u32 handle; /* in, GEM handle */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment