pvr: ignore DS attachment's D or S when it's unused in dynamic rendering

Dynamic rendering codepath allows binding an attachment with a
depth+stencil format, but only depth or stencil active. The
corresponding test should be disable in such case.

Ignore the attachment's depth or stencil according to the rendering
attachment info's is_depth and is_stencil variables.

Fixes the following CTS testcases:
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d24_unorm_s8_uint
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d32_sfloat_s8_uint
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.dynamic_enable.d24_unorm_s8_uint
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.dynamic_enable.d32_sfloat_s8_uint

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
Reviewed-by: Luigi Santivetti <luigi.santivetti@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41054>
This commit is contained in:
Icenowy Zheng 2026-04-20 19:30:21 +08:00 committed by Marge Bot
parent 645de2b433
commit 38cf44a733
2 changed files with 9 additions and 6 deletions

View file

@ -14,11 +14,6 @@ dEQP-VK.binding_model.unused_invalid_descriptor.write.unused.uniform_buffer,Cras
dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment,Fail
dEQP-VK.graphicsfuzz.stable-binarysearch-tree-false-if-discard-loop,Fail
dEQP-VK.memory.concurrent_access.shader_and_host,Crash
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.dynamic_enable.d24_unorm_s8_uint,Fail
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.dynamic_enable.d32_sfloat_s8_uint,Fail
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d24_unorm_s8_uint,Fail
dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d32_sfloat_s8_uint,Fail
dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.basic.partial_binding_depth_stencil,Fail
dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed0_multiview,Fail
dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed10_multiview,Fail
dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed11,Fail

View file

@ -6611,12 +6611,20 @@ pvr_setup_isp_faces_and_control(struct pvr_cmd_buffer *const cmd_buffer,
const enum ROGUE_TA_OBJTYPE obj_type =
pvr_ta_objtype(dynamic_state->ia.primitive_topology);
const VkImageAspectFlags ds_aspects =
VkImageAspectFlags ds_aspects =
(!rasterizer_discard && attachment)
? vk_format_aspects(attachment->vk_format) &
(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)
: VK_IMAGE_ASPECT_NONE;
/* Dynamic rendering attachments could be bound with a D+S format but only
* D or S active.
*/
if (!pass_info->pass && attachment && !attachment->is_depth)
ds_aspects &= ~VK_IMAGE_ASPECT_DEPTH_BIT;
if (!pass_info->pass && attachment && !attachment->is_stencil)
ds_aspects &= ~VK_IMAGE_ASPECT_STENCIL_BIT;
/* This is deliberately a full copy rather than a pointer because
* vk_optimize_depth_stencil_state() can only be run once against any given
* instance of vk_depth_stencil_state.