mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
mesa: Add support for NV61, NV24 and NV42 pixel formats
Which are essentially variants of NV12. All of them have been tested with the Weston client-buffer test with llvmpipe and radeonsi. Signed-off-by: Robert Mader <robert.mader@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36890>
This commit is contained in:
parent
61fd24c552
commit
6c83ae95a2
9 changed files with 69 additions and 0 deletions
|
|
@ -2201,6 +2201,8 @@ dri2_num_fourcc_format_planes(EGLint format)
|
|||
case DRM_FORMAT_NV21:
|
||||
case DRM_FORMAT_NV16:
|
||||
case DRM_FORMAT_NV61:
|
||||
case DRM_FORMAT_NV24:
|
||||
case DRM_FORMAT_NV42:
|
||||
case DRM_FORMAT_NV15:
|
||||
case DRM_FORMAT_NV20:
|
||||
case DRM_FORMAT_NV30:
|
||||
|
|
|
|||
|
|
@ -617,6 +617,18 @@ static const struct dri2_format_mapping dri2_format_table[] = {
|
|||
PIPE_FORMAT_NV16, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8 },
|
||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88 } } },
|
||||
{ DRM_FORMAT_NV61, __DRI_IMAGE_FORMAT_NONE,
|
||||
PIPE_FORMAT_NV61, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8 },
|
||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88 } } },
|
||||
{ DRM_FORMAT_NV24, __DRI_IMAGE_FORMAT_NONE,
|
||||
PIPE_FORMAT_NV24, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8 },
|
||||
{ 1, 0, 0, __DRI_IMAGE_FORMAT_GR88 } } },
|
||||
{ DRM_FORMAT_NV42, __DRI_IMAGE_FORMAT_NONE,
|
||||
PIPE_FORMAT_NV42, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8 },
|
||||
{ 1, 0, 0, __DRI_IMAGE_FORMAT_GR88 } } },
|
||||
|
||||
{ DRM_FORMAT_AYUV, __DRI_IMAGE_FORMAT_ABGR8888,
|
||||
PIPE_FORMAT_AYUV, 1,
|
||||
|
|
|
|||
|
|
@ -288,6 +288,9 @@ update_shader_samplers(struct st_context *st,
|
|||
/* no additional views needed */
|
||||
break;
|
||||
FALLTHROUGH;
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_NV42:
|
||||
case PIPE_FORMAT_P010:
|
||||
case PIPE_FORMAT_P012:
|
||||
case PIPE_FORMAT_P016:
|
||||
|
|
|
|||
|
|
@ -207,6 +207,17 @@ st_get_sampler_views(struct st_context *st,
|
|||
/* no additional views needed */
|
||||
break;
|
||||
|
||||
/* we need one additional R8G8 view: */
|
||||
tmpl.format = PIPE_FORMAT_RG88_UNORM;
|
||||
tmpl.swizzle_g = PIPE_SWIZZLE_Y; /* tmpl from Y plane is R8 */
|
||||
extra = u_bit_scan(&free_slots);
|
||||
sampler_views[extra] =
|
||||
pipe->create_sampler_view(pipe, stObj->pt->next, &tmpl);
|
||||
(*extra_sampler_views) |= 1 << extra;
|
||||
break;
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_NV42:
|
||||
/* we need one additional R8G8 view: */
|
||||
tmpl.format = PIPE_FORMAT_RG88_UNORM;
|
||||
tmpl.swizzle_g = PIPE_SWIZZLE_Y; /* tmpl from Y plane is R8 */
|
||||
|
|
|
|||
|
|
@ -72,6 +72,9 @@ is_format_supported(struct pipe_screen *screen, enum pipe_format format,
|
|||
case PIPE_FORMAT_NV12:
|
||||
case PIPE_FORMAT_NV21:
|
||||
case PIPE_FORMAT_NV16:
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_NV42:
|
||||
supported = screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM,
|
||||
PIPE_TEXTURE_2D, nr_samples,
|
||||
nr_storage_samples, usage) &&
|
||||
|
|
@ -493,6 +496,12 @@ st_bind_egl_image(struct gl_context *ctx,
|
|||
texObj->RequiredTextureImageUnits = 2;
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_NV42:
|
||||
texFormat = MESA_FORMAT_R_UNORM8;
|
||||
texObj->RequiredTextureImageUnits = 2;
|
||||
break;
|
||||
case PIPE_FORMAT_NV15:
|
||||
if (stimg->texture->format == PIPE_FORMAT_R10_G10B10_420_UNORM) {
|
||||
texFormat = MESA_FORMAT_R10G10B10X2_UNORM;
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ st_get_external_sampler_key(struct st_context *st, struct gl_program *prog)
|
|||
break;
|
||||
}
|
||||
FALLTHROUGH;
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_P010:
|
||||
case PIPE_FORMAT_P012:
|
||||
case PIPE_FORMAT_P016:
|
||||
|
|
@ -128,6 +129,9 @@ st_get_external_sampler_key(struct st_context *st, struct gl_program *prog)
|
|||
key.lower_yuv |= (1 << unit);
|
||||
break;
|
||||
}
|
||||
FALLTHROUGH;
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV42:
|
||||
key.lower_nv21 |= (1 << unit);
|
||||
break;
|
||||
case PIPE_FORMAT_NV20:
|
||||
|
|
|
|||
|
|
@ -389,6 +389,10 @@ st_get_sampler_view_format(const struct st_context *st,
|
|||
format = texObj->pt->format;
|
||||
break;
|
||||
}
|
||||
FALLTHROUGH;
|
||||
case PIPE_FORMAT_NV61:
|
||||
case PIPE_FORMAT_NV24:
|
||||
case PIPE_FORMAT_NV42:
|
||||
format = PIPE_FORMAT_R8_UNORM;
|
||||
break;
|
||||
case PIPE_FORMAT_NV15:
|
||||
|
|
|
|||
|
|
@ -2189,6 +2189,27 @@
|
|||
block: {width: 1, height: 1, depth: 1}
|
||||
channels: []
|
||||
swizzles: [X, Y, Z, W]
|
||||
- name: Y8_V8U8_422_UNORM
|
||||
alias: NV61
|
||||
layout: planar2
|
||||
colorspace: YUV
|
||||
block: {width: 1, height: 1, depth: 1}
|
||||
channels: []
|
||||
swizzles: [X, Y, Z, W]
|
||||
- name: Y8_U8V8_444_UNORM
|
||||
alias: NV24
|
||||
layout: planar2
|
||||
colorspace: YUV
|
||||
block: {width: 1, height: 1, depth: 1}
|
||||
channels: []
|
||||
swizzles: [X, Y, Z, W]
|
||||
- name: Y8_V8U8_444_UNORM
|
||||
alias: NV42
|
||||
layout: planar2
|
||||
colorspace: YUV
|
||||
block: {width: 1, height: 1, depth: 1}
|
||||
channels: []
|
||||
swizzles: [X, Y, Z, W]
|
||||
- name: Y8_U8_V8_444_UNORM
|
||||
layout: planar3
|
||||
colorspace: YUV
|
||||
|
|
|
|||
|
|
@ -85,7 +85,10 @@ def has_access(format):
|
|||
'y8_u8_v8_420_unorm',
|
||||
'y8_u8v8_420_unorm',
|
||||
'y8_u8v8_422_unorm',
|
||||
'y8_u8v8_444_unorm',
|
||||
'y8_v8u8_420_unorm',
|
||||
'y8_v8u8_422_unorm',
|
||||
'y8_v8u8_444_unorm',
|
||||
'y10_u10v10_420_unorm',
|
||||
'y10_u10v10_422_unorm',
|
||||
'x6y10_x6u10x6v10_420_unorm',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue