diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2021-03-12 12:45:58 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2021-04-05 17:39:18 -0700 |
commit | f51ca793cfe29ab580aba779c954477676460eef (patch) | |
tree | 4aa1725b90d7113e542658cd28c91bdaa538d811 | |
parent | 64b16cf9f0d831400247a47570798cf057adcf61 (diff) |
gallium/dri: Add Y21x formats
-rw-r--r-- | src/gallium/frontends/dri/dri_helpers.c | 18 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_atom_sampler.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_atom_texture.c | 11 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_eglimage.c | 16 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_program.h | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_sampler_view.c | 5 |
6 files changed, 55 insertions, 1 deletions
diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c index 85cf1887d5b..dd963800a9e 100644 --- a/src/gallium/frontends/dri/dri_helpers.c +++ b/src/gallium/frontends/dri/dri_helpers.c @@ -579,7 +579,23 @@ static const struct dri2_format_mapping dri2_format_table[] = { { DRM_FORMAT_UYVY, __DRI_IMAGE_FORMAT_NONE, __DRI_IMAGE_COMPONENTS_Y_UXVX, PIPE_FORMAT_UYVY, 2, { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88 }, - { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR8888 } } } + { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR8888 } } }, + + /* The Y21x formats work in a similar fashion to the YUYV and UYVY + * formats. + */ + { DRM_FORMAT_Y210, __DRI_IMAGE_FORMAT_NONE, + __DRI_IMAGE_COMPONENTS_Y_XUXV, PIPE_FORMAT_Y210, 2, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR1616 }, + { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR16161616 } } }, + { DRM_FORMAT_Y212, __DRI_IMAGE_FORMAT_NONE, + __DRI_IMAGE_COMPONENTS_Y_XUXV, PIPE_FORMAT_Y212, 2, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR1616 }, + { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR16161616 } } }, + { DRM_FORMAT_Y216, __DRI_IMAGE_FORMAT_NONE, + __DRI_IMAGE_COMPONENTS_Y_XUXV, PIPE_FORMAT_Y216, 2, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR1616 }, + { 0, 1, 0, __DRI_IMAGE_FORMAT_ABGR16161616 } } }, }; const struct dri2_format_mapping * diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index fa68acccfcf..6810a98fc1c 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -358,6 +358,9 @@ update_shader_samplers(struct st_context *st, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: case PIPE_FORMAT_YUYV: case PIPE_FORMAT_UYVY: /* we need one additional sampler: */ diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index f42cac58856..eafccfe87ca 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -238,6 +238,17 @@ update_textures(struct st_context *st, sampler_views[extra] = pipe->create_sampler_view(pipe, stObj->pt->next, &tmpl); break; + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: + /* we need one additional R16G16B16A16 view: */ + tmpl.format = PIPE_FORMAT_R16G16B16A16_UNORM; + tmpl.swizzle_b = PIPE_SWIZZLE_Z; + tmpl.swizzle_a = PIPE_SWIZZLE_W; + extra = u_bit_scan(&free_slots); + sampler_views[extra] = + pipe->create_sampler_view(pipe, stObj->pt->next, &tmpl); + break; default: break; } diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c index 79bd7f6b0a0..c613ad333bc 100644 --- a/src/mesa/state_tracker/st_cb_eglimage.c +++ b/src/mesa/state_tracker/st_cb_eglimage.c @@ -79,6 +79,16 @@ is_format_supported(struct pipe_screen *screen, enum pipe_format format, PIPE_TEXTURE_2D, nr_samples, nr_storage_samples, usage); break; + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: + supported = screen->is_format_supported(screen, PIPE_FORMAT_R16G16_UNORM, + PIPE_TEXTURE_2D, nr_samples, + nr_storage_samples, usage) && + screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_UNORM, + PIPE_TEXTURE_2D, nr_samples, + nr_storage_samples, usage); + break; case PIPE_FORMAT_Y410: supported = screen->is_format_supported(screen, PIPE_FORMAT_R10G10B10A2_UNORM, PIPE_TEXTURE_2D, nr_samples, @@ -294,6 +304,12 @@ st_bind_egl_image(struct gl_context *ctx, texFormat = MESA_FORMAT_R_UNORM16; texObj->RequiredTextureImageUnits = 2; break; + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: + texFormat = MESA_FORMAT_RG_UNORM16; + texObj->RequiredTextureImageUnits = 2; + break; case PIPE_FORMAT_Y410: texFormat = MESA_FORMAT_B10G10R10A2_UNORM; internalFormat = GL_RGBA; diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h index dcd51dcae8b..7cff5cc64ae 100644 --- a/src/mesa/state_tracker/st_program.h +++ b/src/mesa/state_tracker/st_program.h @@ -95,6 +95,9 @@ st_get_external_sampler_key(struct st_context *st, struct gl_program *prog) key.lower_iyuv |= (1 << unit); break; case PIPE_FORMAT_YUYV: + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: key.lower_yx_xuxv |= (1 << unit); break; case PIPE_FORMAT_UYVY: diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c index 353b2bb9417..3e5bf387718 100644 --- a/src/mesa/state_tracker/st_sampler_view.c +++ b/src/mesa/state_tracker/st_sampler_view.c @@ -511,6 +511,11 @@ get_sampler_view_format(struct st_context *st, case PIPE_FORMAT_P016: format = PIPE_FORMAT_R16_UNORM; break; + case PIPE_FORMAT_Y210: + case PIPE_FORMAT_Y212: + case PIPE_FORMAT_Y216: + format = PIPE_FORMAT_R16G16_UNORM; + break; case PIPE_FORMAT_Y410: format = PIPE_FORMAT_R10G10B10A2_UNORM; break; |