summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2021-03-12 12:45:58 -0800
committerIan Romanick <ian.d.romanick@intel.com>2021-04-05 17:39:18 -0700
commitf51ca793cfe29ab580aba779c954477676460eef (patch)
tree4aa1725b90d7113e542658cd28c91bdaa538d811
parent64b16cf9f0d831400247a47570798cf057adcf61 (diff)
gallium/dri: Add Y21x formats
-rw-r--r--src/gallium/frontends/dri/dri_helpers.c18
-rw-r--r--src/mesa/state_tracker/st_atom_sampler.c3
-rw-r--r--src/mesa/state_tracker/st_atom_texture.c11
-rw-r--r--src/mesa/state_tracker/st_cb_eglimage.c16
-rw-r--r--src/mesa/state_tracker/st_program.h3
-rw-r--r--src/mesa/state_tracker/st_sampler_view.c5
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;