Module: Mesa Branch: master Commit: b8ca39a80d37b765907f24ee473a6987c08303f7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8ca39a80d37b765907f24ee473a6987c08303f7
Author: Danylo Piliaiev <[email protected]> Date: Wed Mar 10 14:29:31 2021 +0200 turnip: implement intrinsic_vulkan_resource_reindex Descriptor arrays are continuous, so it's just an addition of offset. Fixes test: dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.dynamic_offset.select_descriptor_array Signed-off-by: Danylo Piliaiev <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9495> --- src/freedreno/vulkan/tu_shader.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c index bceba478ce7..0feb07fea0b 100644 --- a/src/freedreno/vulkan/tu_shader.c +++ b/src/freedreno/vulkan/tu_shader.c @@ -240,6 +240,21 @@ lower_vulkan_resource_index(nir_builder *b, nir_intrinsic_instr *instr, nir_instr_remove(&instr->instr); } +static void +lower_vulkan_resource_reindex(nir_builder *b, nir_intrinsic_instr *instr) +{ + nir_ssa_def *old_index = instr->src[0].ssa; + nir_ssa_def *delta = instr->src[1].ssa; + + nir_ssa_def *new_index = + nir_vec3(b, nir_channel(b, old_index, 0), + nir_iadd(b, nir_channel(b, old_index, 1), delta), + nir_channel(b, old_index, 2)); + + nir_ssa_def_rewrite_uses(&instr->dest.ssa, new_index); + nir_instr_remove(&instr->instr); +} + static void lower_load_vulkan_descriptor(nir_intrinsic_instr *intrin) { @@ -410,6 +425,9 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *instr, case nir_intrinsic_vulkan_resource_index: lower_vulkan_resource_index(b, instr, shader, layout); return true; + case nir_intrinsic_vulkan_resource_reindex: + lower_vulkan_resource_reindex(b, instr); + return true; case nir_intrinsic_load_ubo: case nir_intrinsic_load_ssbo: _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
