diff options
author | Mike Blumenkrantz <[email protected]> | 2019-06-06 19:47:23 -0400 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2019-07-31 15:11:15 -0700 |
commit | 8af1990ad7703dd6805af9beb3a32ca7170c10c2 (patch) | |
tree | 3ca3f8e792eab0316280aa9852397c633dc60863 /src/gallium/state_trackers | |
parent | 82bf5a8aac3425701cbf7e15063967d53f8b452f (diff) |
st/dri: simplify dri_get_egl_image by reusing dri2_format_table
this makes dri2_get_mapping_by_fourcc accessible from dri_helpers.h
and does a direct lookup on the fourcc id to match the pipe format
v2 (Ken): Allow map to be NULL, use img->texture->format.
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 17 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_helpers.h | 19 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_screen.c | 30 |
3 files changed, 24 insertions, 42 deletions
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 7b6fc37c0f6..1a7c6d0a0ae 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -65,21 +65,6 @@ dri2_buffer(__DRIbuffer * driBufferPriv) return (struct dri2_buffer *) driBufferPriv; } -struct dri2_format_mapping { - int dri_fourcc; - int dri_format; /* image format */ - int dri_components; - enum pipe_format pipe_format; - int nplanes; - struct { - int buffer_index; - int width_shift; - int height_shift; - uint32_t dri_format; /* plane format */ - int cpp; - } planes[3]; -}; - static const struct dri2_format_mapping dri2_format_table[] = { { __DRI_IMAGE_FOURCC_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010, __DRI_IMAGE_COMPONENTS_RGBA, PIPE_FORMAT_B10G10R10A2_UNORM, 1, @@ -227,7 +212,7 @@ static const struct dri2_format_mapping dri2_format_table[] = { { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR8888, 4 } } } }; -static const struct dri2_format_mapping * +const struct dri2_format_mapping * dri2_get_mapping_by_fourcc(int fourcc) { for (unsigned i = 0; i < ARRAY_SIZE(dri2_format_table); i++) { diff --git a/src/gallium/state_trackers/dri/dri_helpers.h b/src/gallium/state_trackers/dri/dri_helpers.h index 76f024fd67c..e8425bf5616 100644 --- a/src/gallium/state_trackers/dri/dri_helpers.h +++ b/src/gallium/state_trackers/dri/dri_helpers.h @@ -26,8 +26,27 @@ #include "dri_context.h" #include "dri_screen.h" + +struct dri2_format_mapping { + int dri_fourcc; + int dri_format; /* image format */ + int dri_components; + enum pipe_format pipe_format; + int nplanes; + struct { + int buffer_index; + int width_shift; + int height_shift; + uint32_t dri_format; /* plane format */ + int cpp; + } planes[3]; +}; + extern const __DRI2fenceExtension dri2FenceExtension; +const struct dri2_format_mapping * +dri2_get_mapping_by_fourcc(int fourcc); + __DRIimage * dri2_lookup_egl_image(struct dri_screen *screen, void *handle); diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 188d50dc6e3..5a555eacd09 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -33,6 +33,7 @@ #include "dri_screen.h" #include "dri_context.h" +#include "dri_helpers.h" #include "util/u_inlines.h" #include "pipe/p_screen.h" @@ -423,6 +424,7 @@ dri_get_egl_image(struct st_manager *smapi, { struct dri_screen *screen = (struct dri_screen *)smapi; __DRIimage *img = NULL; + const struct dri2_format_mapping *map; if (screen->lookup_egl_image) { img = screen->lookup_egl_image(screen, egl_image); @@ -433,32 +435,8 @@ dri_get_egl_image(struct st_manager *smapi, stimg->texture = NULL; pipe_resource_reference(&stimg->texture, img->texture); - switch (img->dri_components) { - case __DRI_IMAGE_COMPONENTS_Y_U_V: - stimg->format = PIPE_FORMAT_IYUV; - break; - case __DRI_IMAGE_COMPONENTS_Y_UV: - if (img->texture->format == PIPE_FORMAT_R8_UNORM) - stimg->format = PIPE_FORMAT_NV12; - else /* P0XX uses R16 for first texture */ - stimg->format = PIPE_FORMAT_P016; - break; - case __DRI_IMAGE_COMPONENTS_AYUV: - stimg->format = PIPE_FORMAT_RGBA8888_UNORM; - break; - case __DRI_IMAGE_COMPONENTS_XYUV: - stimg->format = PIPE_FORMAT_RGBX8888_UNORM; - break; - case __DRI_IMAGE_COMPONENTS_Y_XUXV: - stimg->format = PIPE_FORMAT_YUYV; - break; - case __DRI_IMAGE_COMPONENTS_Y_UXVX: - stimg->format = PIPE_FORMAT_UYVY; - break; - default: - stimg->format = img->texture->format; - break; - } + map = dri2_get_mapping_by_fourcc(img->dri_fourcc); + stimg->format = map ? map->pipe_format : img->texture->format; stimg->level = img->level; stimg->layer = img->layer; |