Mesa (master): anv: Handle nir_intrinsic_vulkan_resource_reindex
Jason Ekstrand
jekstrand at kemper.freedesktop.org
Wed Dec 6 06:02:44 UTC 2017
Module: Mesa
Branch: master
Commit: 32c859125b916c24ab76bd52db6e37a1a22f4858
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=32c859125b916c24ab76bd52db6e37a1a22f4858
Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date: Thu Nov 30 17:13:56 2017 -0800
anv: Handle nir_intrinsic_vulkan_resource_reindex
Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>
---
src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 28 +++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
index f8d81648a9..612b3f7eff 100644
--- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
+++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
@@ -129,6 +129,25 @@ lower_res_index_intrinsic(nir_intrinsic_instr *intrin,
}
static void
+lower_res_reindex_intrinsic(nir_intrinsic_instr *intrin,
+ struct apply_pipeline_layout_state *state)
+{
+ nir_builder *b = &state->builder;
+
+ /* For us, the resource indices are just indices into the binding table and
+ * array elements are sequential. A resource_reindex just turns into an
+ * add of the two indices.
+ */
+ assert(intrin->src[0].is_ssa && intrin->src[0].is_ssa);
+ nir_ssa_def *new_index = nir_iadd(b, intrin->src[0].ssa,
+ intrin->src[1].ssa);
+
+ assert(intrin->dest.is_ssa);
+ nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_src_for_ssa(new_index));
+ nir_instr_remove(&intrin->instr);
+}
+
+static void
lower_tex_deref(nir_tex_instr *tex, nir_deref_var *deref,
unsigned *const_index, unsigned array_size,
nir_tex_src_type src_type, bool allow_indirect,
@@ -265,8 +284,15 @@ apply_pipeline_layout_block(nir_block *block,
switch (instr->type) {
case nir_instr_type_intrinsic: {
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
- if (intrin->intrinsic == nir_intrinsic_vulkan_resource_index) {
+ switch (intrin->intrinsic) {
+ case nir_intrinsic_vulkan_resource_index:
lower_res_index_intrinsic(intrin, state);
+ break;
+ case nir_intrinsic_vulkan_resource_reindex:
+ lower_res_reindex_intrinsic(intrin, state);
+ break;
+ default:
+ break;
}
break;
}
More information about the mesa-commit
mailing list