diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index 6d6a01589f8..dd9f7e56db1 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -722,6 +722,12 @@ static bool si_resource_get_param(struct pipe_screen *screen, struct pipe_contex return true; case PIPE_RESOURCE_PARAM_LAYER_STRIDE: break; + case PIPE_RESOURCE_PARAM_DISJOINT_PLANES: + if (resource->target == PIPE_BUFFER) + *value = false; + else + *value = tex->num_planes > 1; + return true; } return false; } diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index e10a1005cd5..ae76e572ebd 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1927,6 +1927,12 @@ zink_resource_get_param(struct pipe_screen *pscreen, struct pipe_context *pctx, return false; #endif } + case PIPE_RESOURCE_PARAM_DISJOINT_PLANES: + if (pres->target == PIPE_BUFFER) + *value = false; + else + *value = util_format_get_num_planes(pres->format) > 1; + break; } return true; } diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index 082d38b6c21..7881407f569 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -1148,6 +1148,9 @@ dri2_query_image_by_resource_param(struct dri_image *image, int attrib, int *val case __DRI_IMAGE_ATTRIB_FD: param = PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD; break; + case __DRI_IMAGE_ATTRIB_DISJOINT_PLANES: + param = PIPE_RESOURCE_PARAM_DISJOINT_PLANES; + break; default: return false; } @@ -1161,6 +1164,7 @@ dri2_query_image_by_resource_param(struct dri_image *image, int attrib, int *val case __DRI_IMAGE_ATTRIB_STRIDE: case __DRI_IMAGE_ATTRIB_OFFSET: case __DRI_IMAGE_ATTRIB_NUM_PLANES: + case __DRI_IMAGE_ATTRIB_DISJOINT_PLANES: if (res_param > INT_MAX) return false; *value = (int)res_param; diff --git a/src/gallium/include/mesa_interface.h b/src/gallium/include/mesa_interface.h index 562e5437a61..4529e4abbcd 100644 --- a/src/gallium/include/mesa_interface.h +++ b/src/gallium/include/mesa_interface.h @@ -588,6 +588,8 @@ enum dri_loader_cap { #define __DRI_IMAGE_ATTRIB_MODIFIER_LOWER 0x200B /* available in versions 14 */ #define __DRI_IMAGE_ATTRIB_MODIFIER_UPPER 0x200C /* available in versions 14 */ #define __DRI_IMAGE_ATTRIB_COMPRESSION_RATE 0x200D /* available in versions 22 */ +/* If DRI IMAGE has separate plane buffers. */ +#define __DRI_IMAGE_ATTRIB_DISJOINT_PLANES 0x200E enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 3a89bde9dc3..6acd4b3e0a8 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -1168,6 +1168,8 @@ enum pipe_resource_param PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS, PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD, PIPE_RESOURCE_PARAM_LAYER_STRIDE, + /* If texture/image has separate plane buffers. */ + PIPE_RESOURCE_PARAM_DISJOINT_PLANES, }; /**