diff options
author | Ben Widawsky <[email protected]> | 2016-11-03 16:14:44 -0700 |
---|---|---|
committer | Ben Widawsky <[email protected]> | 2017-03-15 10:36:05 -0700 |
commit | 63bd2ae7452d48f25962ae9985a34bbdba9c52cf (patch) | |
tree | d681018c1f51398472c8adf56aac3d800fffe67a /src/gbm/main/gbmint.h | |
parent | 5e7d8d396196af61ce0b1663534d97bef7895993 (diff) |
gbm: Introduce modifiers into surface/bo creation
The idea behind modifiers like this is that the user of GBM will have
some mechanism to query what properties the hardware supports for its BO
or surface. This information is directly passed in (and stored) so that
the DRI implementation can create an image with the appropriate
attributes.
A getter() will be added later so that the user GBM will be able to
query what modifier should be used.
Only in surface creation, the modifiers are stored until the BO is
actually allocated. In regular buffer allocation, the correct modifier
can (will be, in future patches be chosen at creation time.
v2: Make sure to check if count is non-zero in addition to testing if
calloc fails. (Daniel)
v3: Remove "usage" and "flags" from modifier creation. Requested by
Kristian.
v4: Take advantage of the "INVALID" modifier added by the GET_PLANE2
series.
v5: Don't bother with storing modifiers for gbm_bo_create because that's
a synchronous operation and we can actually select the correct modifier
at create time (done in a later patch) (Jason)
v6: Make modifier condition outside the check so that dri_use will work
properly (Jason)
Cc: Kristian Høgsberg <[email protected]>
References (v4): https://lists.freedesktop.org/archives/intel-gfx/2017-January/116636.html
Signed-off-by: Ben Widawsky <[email protected]>
Reviewed-by: Eric Engestrom <[email protected]> (v1)
Reviewed-by: Jason Ekstrand <[email protected]>
Acked-by: Daniel Stone <[email protected]>
Diffstat (limited to 'src/gbm/main/gbmint.h')
-rw-r--r-- | src/gbm/main/gbmint.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gbm/main/gbmint.h b/src/gbm/main/gbmint.h index a6541d91c55..d8c9f6e5d7e 100644 --- a/src/gbm/main/gbmint.h +++ b/src/gbm/main/gbmint.h @@ -65,7 +65,9 @@ struct gbm_device { struct gbm_bo *(*bo_create)(struct gbm_device *gbm, uint32_t width, uint32_t height, uint32_t format, - uint32_t usage); + uint32_t usage, + const uint64_t *modifiers, + const unsigned int count); struct gbm_bo *(*bo_import)(struct gbm_device *gbm, uint32_t type, void *buffer, uint32_t usage); void *(*bo_map)(struct gbm_bo *bo, @@ -84,7 +86,9 @@ struct gbm_device { struct gbm_surface *(*surface_create)(struct gbm_device *gbm, uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); + uint32_t format, uint32_t flags, + const uint64_t *modifiers, + const unsigned count); struct gbm_bo *(*surface_lock_front_buffer)(struct gbm_surface *surface); void (*surface_release_buffer)(struct gbm_surface *surface, struct gbm_bo *bo); @@ -114,6 +118,10 @@ struct gbm_surface { uint32_t height; uint32_t format; uint32_t flags; + struct { + uint64_t *modifiers; + unsigned count; + }; }; struct gbm_backend { |