ac/nir/tess: Fix per-patch output VRAM mapping.

VARYING_SLOT_PATCH0 is greater than 64 so it is wrong to use it
with BITFIELD64_BIT. Check for VARYING_SLOT_TESS_LEVEL_* properly
when mapping output locations in VRAM.

Fixes: 2cf7f282df
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11253
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29696>
This commit is contained in:
Timur Kristóf 2024-06-15 09:37:26 +02:00 committed by Marge Bot
parent 0f0ebd8512
commit 0355364743
2 changed files with 5 additions and 13 deletions

View file

@ -42,15 +42,3 @@ dEQP-GLES31.functional.texture.specification.texstorage3d.format.depth32f_stenci
multisample-dEQP-GLES31.functional.blend_equation_advanced.basic.multiply,Fail
multisample-dEQP-GLES31.functional.blend_equation_advanced.basic.overlay,Fail
multisample-dEQP-GLES31.functional.blend_equation_advanced.basic.screen,Fail
# Regression from https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29436
# https://gitlab.freedesktop.org/mesa/mesa/-/issues/11253
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_implicit.isolines,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_implicit.quads,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_implicit.triangles,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_query.isolines,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_query.quads,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_query.triangles,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_shader_builtin.isolines,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_shader_builtin.quads,Fail
dEQP-GLES31.functional.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_shader_builtin.triangles,Fail

View file

@ -456,14 +456,18 @@ hs_output_vram_map_io_location(nir_shader *shader,
*/
if (!per_vertex) {
const uint64_t tf_mask = tcs_vram_tf_out_mask(shader, st);
if (BITFIELD64_BIT(loc) & TESS_LVL_MASK)
if (loc == VARYING_SLOT_TESS_LEVEL_INNER || loc == VARYING_SLOT_TESS_LEVEL_OUTER) {
assert(tf_mask & BITFIELD64_BIT(loc));
return util_bitcount64(tf_mask & BITFIELD64_MASK(loc));
}
const uint32_t patch_out_mask = tcs_vram_per_patch_out_mask(shader, st);
assert(patch_out_mask & BITFIELD_BIT(loc - VARYING_SLOT_PATCH0));
return util_bitcount64(tf_mask) +
util_bitcount(patch_out_mask & BITFIELD_MASK(loc - VARYING_SLOT_PATCH0));
} else {
const uint64_t per_vertex_mask = tcs_vram_per_vtx_out_mask(shader, st);
assert(per_vertex_mask & BITFIELD64_BIT(loc));
return util_bitcount64(per_vertex_mask & BITFIELD64_MASK(loc));
}
}