diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 0157665afcc..560a8374f6c 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2775,6 +2775,7 @@ dri2_num_fourcc_format_planes(EGLint format) case DRM_FORMAT_P010: case DRM_FORMAT_P012: case DRM_FORMAT_P016: + case DRM_FORMAT_P030: return 2; case DRM_FORMAT_YUV410: diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c index a656176c1d3..9405c4cb3ed 100644 --- a/src/gallium/frontends/dri/dri_helpers.c +++ b/src/gallium/frontends/dri/dri_helpers.c @@ -593,6 +593,10 @@ static const struct dri2_format_mapping dri2_format_table[] = { __DRI_IMAGE_COMPONENTS_Y_UV, PIPE_FORMAT_P016, 2, { { 0, 0, 0, __DRI_IMAGE_FORMAT_R16 }, { 1, 1, 1, __DRI_IMAGE_FORMAT_GR1616 } } }, + { DRM_FORMAT_P030, __DRI_IMAGE_FORMAT_NONE, + __DRI_IMAGE_COMPONENTS_Y_UV, PIPE_FORMAT_P030, 2, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_R16 }, + { 1, 1, 1, __DRI_IMAGE_FORMAT_GR1616 } } }, { DRM_FORMAT_NV16, __DRI_IMAGE_FORMAT_NONE, __DRI_IMAGE_COMPONENTS_Y_UV, PIPE_FORMAT_NV12, 2, diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index 0e3cb600269..1383e1d8c13 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -258,6 +258,7 @@ update_shader_samplers(struct st_context *st, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: case PIPE_FORMAT_Y210: case PIPE_FORMAT_Y212: case PIPE_FORMAT_Y216: diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index 58fbfa03dc3..0ebc5b88bda 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -190,6 +190,7 @@ st_get_sampler_views(struct st_context *st, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: /* we need one additional R16G16 view: */ tmpl.format = PIPE_FORMAT_RG1616_UNORM; tmpl.swizzle_g = PIPE_SWIZZLE_Y; /* tmpl from Y plane is R16 */ diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c index 1c143091166..97cd1870ee7 100644 --- a/src/mesa/state_tracker/st_cb_eglimage.c +++ b/src/mesa/state_tracker/st_cb_eglimage.c @@ -73,6 +73,7 @@ is_format_supported(struct pipe_screen *screen, enum pipe_format format, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: supported = screen->is_format_supported(screen, PIPE_FORMAT_R16_UNORM, PIPE_TEXTURE_2D, nr_samples, nr_storage_samples, usage) && @@ -312,6 +313,7 @@ st_bind_egl_image(struct gl_context *ctx, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: texFormat = MESA_FORMAT_R_UNORM16; texObj->RequiredTextureImageUnits = 2; break; diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h index 3265e02e019..2e02c032801 100644 --- a/src/mesa/state_tracker/st_program.h +++ b/src/mesa/state_tracker/st_program.h @@ -89,6 +89,7 @@ st_get_external_sampler_key(struct st_context *st, struct gl_program *prog) case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: key.lower_nv12 |= (1 << unit); break; case PIPE_FORMAT_IYUV: diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c index f4133a154b7..6bf7962ee2b 100644 --- a/src/mesa/state_tracker/st_sampler_view.c +++ b/src/mesa/state_tracker/st_sampler_view.c @@ -392,6 +392,7 @@ st_get_sampler_view_format(const struct st_context *st, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: format = PIPE_FORMAT_R16_UNORM; break; case PIPE_FORMAT_Y210: diff --git a/src/util/format/u_format.csv b/src/util/format/u_format.csv index 689399ebaa1..5d6b0c744d5 100644 --- a/src/util/format/u_format.csv +++ b/src/util/format/u_format.csv @@ -421,6 +421,7 @@ PIPE_FORMAT_Y16_U16_V16_444_UNORM , planar3, 1, 1, 1, , , , , xy PIPE_FORMAT_P010 , planar2, 1, 1, 1, , , , , xyzw, yuv PIPE_FORMAT_P012 , planar2, 1, 1, 1, , , , , xyzw, yuv PIPE_FORMAT_P016 , planar2, 1, 1, 1, , , , , xyzw, yuv +PIPE_FORMAT_P030 , planar2, 1, 1, 1, , , , , xyzw, yuv PIPE_FORMAT_Y210 , subsampled, 2, 1, 1, x64 , , , , xyz1, yuv PIPE_FORMAT_Y212 , subsampled, 2, 1, 1, x64 , , , , xyz1, yuv diff --git a/src/util/format/u_format.h b/src/util/format/u_format.h index cf9b0cef4d2..035a7e0bba8 100644 --- a/src/util/format/u_format.h +++ b/src/util/format/u_format.h @@ -1391,6 +1391,7 @@ util_format_get_plane_format(enum pipe_format format, unsigned plane) case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: case PIPE_FORMAT_Y16_U16V16_422_UNORM: return !plane ? PIPE_FORMAT_R16_UNORM : PIPE_FORMAT_R16G16_UNORM; default: @@ -1411,6 +1412,7 @@ util_format_get_plane_width(enum pipe_format format, unsigned plane, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: case PIPE_FORMAT_Y8_U8_V8_422_UNORM: case PIPE_FORMAT_Y8_U8V8_422_UNORM: case PIPE_FORMAT_Y16_U16_V16_420_UNORM: @@ -1434,6 +1436,7 @@ util_format_get_plane_height(enum pipe_format format, unsigned plane, case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: case PIPE_FORMAT_Y16_U16_V16_420_UNORM: return !plane ? height : (height + 1) / 2; case PIPE_FORMAT_YV16: diff --git a/src/util/format/u_format_table.py b/src/util/format/u_format_table.py index dd887a18de2..9b7c3157e59 100644 --- a/src/util/format/u_format_table.py +++ b/src/util/format/u_format_table.py @@ -90,6 +90,7 @@ def has_access(format): 'p010', 'p012', 'p016', + 'p030', 'y210', 'y212', 'y216', diff --git a/src/util/format/u_formats.h b/src/util/format/u_formats.h index 3532a059c93..37a5892fc09 100644 --- a/src/util/format/u_formats.h +++ b/src/util/format/u_formats.h @@ -475,6 +475,7 @@ enum pipe_format { PIPE_FORMAT_P010, PIPE_FORMAT_P012, PIPE_FORMAT_P016, + PIPE_FORMAT_P030, PIPE_FORMAT_Y210, PIPE_FORMAT_Y212, @@ -623,6 +624,7 @@ pipe_format_to_chroma_format(enum pipe_format format) case PIPE_FORMAT_P010: case PIPE_FORMAT_P012: case PIPE_FORMAT_P016: + case PIPE_FORMAT_P030: case PIPE_FORMAT_Y16_U16_V16_420_UNORM: return PIPE_VIDEO_CHROMA_FORMAT_420; case PIPE_FORMAT_UYVY: