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

Reply via email to