Mesa (master): freedreno/ir3: Move handle_bindless_cat6 to compiler_nir and reuse.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue May 26 18:34:08 UTC 2020
Module: Mesa
Branch: master
Commit: 2ec4c53ef94901bd7d1623047c52dcdb98a9764f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ec4c53ef94901bd7d1623047c52dcdb98a9764f
Author: Eric Anholt <eric at anholt.net>
Date: Wed May 20 14:00:33 2020 -0700
freedreno/ir3: Move handle_bindless_cat6 to compiler_nir and reuse.
There was an open coded version for ldc, and now we can drop that. I
needed to do it for resinfo as well.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3501>
---
src/freedreno/ir3/ir3_a6xx.c | 23 ++++++-----------------
src/freedreno/ir3/ir3_compiler_nir.c | 17 ++++++++++++-----
src/freedreno/ir3/ir3_context.h | 1 +
3 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/src/freedreno/ir3/ir3_a6xx.c b/src/freedreno/ir3/ir3_a6xx.c
index cef7a78dad5..9b8f154bb64 100644
--- a/src/freedreno/ir3/ir3_a6xx.c
+++ b/src/freedreno/ir3/ir3_a6xx.c
@@ -37,17 +37,6 @@
* encoding compared to a4xx/a5xx.
*/
-static void
-handle_bindless_cat6(struct ir3_instruction *instr, nir_src rsrc)
-{
- nir_intrinsic_instr *intrin = ir3_bindless_resource(rsrc);
- if (!intrin)
- return;
-
- instr->flags |= IR3_INSTR_B;
- instr->cat6.base = nir_intrinsic_desc_set(intrin);
-}
-
/* src[] = { buffer_index, offset }. No const_index */
static void
emit_intrinsic_load_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr,
@@ -66,7 +55,7 @@ emit_intrinsic_load_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr,
ldib->cat6.type = intr->dest.ssa.bit_size == 16 ? TYPE_U16 : TYPE_U32;
ldib->barrier_class = IR3_BARRIER_BUFFER_R;
ldib->barrier_conflict = IR3_BARRIER_BUFFER_W;
- handle_bindless_cat6(ldib, intr->src[0]);
+ ir3_handle_bindless_cat6(ldib, intr->src[0]);
ir3_split_dest(b, dst, ldib, 0, intr->num_components);
}
@@ -93,7 +82,7 @@ emit_intrinsic_store_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
stib->cat6.type = intr->src[0].ssa->bit_size == 16 ? TYPE_U16 : TYPE_U32;
stib->barrier_class = IR3_BARRIER_BUFFER_W;
stib->barrier_conflict = IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
- handle_bindless_cat6(stib, intr->src[1]);
+ ir3_handle_bindless_cat6(stib, intr->src[1]);
array_insert(b, b->keeps, stib);
}
@@ -197,7 +186,7 @@ emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
atomic->cat6.type = type;
atomic->barrier_class = IR3_BARRIER_BUFFER_W;
atomic->barrier_conflict = IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
- handle_bindless_cat6(atomic, intr->src[0]);
+ ir3_handle_bindless_cat6(atomic, intr->src[0]);
/* even if nothing consume the result, we can't DCE the instruction: */
array_insert(b, b->keeps, atomic);
@@ -224,7 +213,7 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr,
ldib->cat6.typed = true;
ldib->barrier_class = IR3_BARRIER_IMAGE_R;
ldib->barrier_conflict = IR3_BARRIER_IMAGE_W;
- handle_bindless_cat6(ldib, intr->src[0]);
+ ir3_handle_bindless_cat6(ldib, intr->src[0]);
ir3_split_dest(b, dst, ldib, 0, intr->num_components);
}
@@ -252,7 +241,7 @@ emit_intrinsic_store_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
stib->cat6.typed = true;
stib->barrier_class = IR3_BARRIER_IMAGE_W;
stib->barrier_conflict = IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W;
- handle_bindless_cat6(stib, intr->src[0]);
+ ir3_handle_bindless_cat6(stib, intr->src[0]);
array_insert(b, b->keeps, stib);
}
@@ -343,7 +332,7 @@ emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
atomic->cat6.typed = true;
atomic->barrier_class = IR3_BARRIER_IMAGE_W;
atomic->barrier_conflict = IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W;
- handle_bindless_cat6(atomic, intr->src[0]);
+ ir3_handle_bindless_cat6(atomic, intr->src[0]);
/* even if nothing consume the result, we can't DCE the instruction: */
array_insert(b, b->keeps, atomic);
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 617fe1a7706..e12a814abd8 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -39,6 +39,16 @@
#include "ir3.h"
#include "ir3_context.h"
+void
+ir3_handle_bindless_cat6(struct ir3_instruction *instr, nir_src rsrc)
+{
+ nir_intrinsic_instr *intrin = ir3_bindless_resource(rsrc);
+ if (!intrin)
+ return;
+
+ instr->flags |= IR3_INSTR_B;
+ instr->cat6.base = nir_intrinsic_desc_set(intrin);
+}
static struct ir3_instruction *
create_indirect_load(struct ir3_context *ctx, unsigned arrsz, int n,
@@ -747,12 +757,9 @@ emit_intrinsic_load_ubo_ldc(struct ir3_context *ctx, nir_intrinsic_instr *intr,
ldc->cat6.d = nir_intrinsic_base(intr);
ldc->cat6.type = TYPE_U32;
- nir_intrinsic_instr *bindless = ir3_bindless_resource(intr->src[0]);
- if (bindless) {
- ldc->flags |= IR3_INSTR_B;
- ldc->cat6.base = nir_intrinsic_desc_set(bindless);
+ ir3_handle_bindless_cat6(ldc, intr->src[0]);
+ if (ldc->flags & IR3_INSTR_B)
ctx->so->bindless_ubo = true;
- }
ir3_split_dest(b, dst, ldc, 0, ncomp);
}
diff --git a/src/freedreno/ir3/ir3_context.h b/src/freedreno/ir3/ir3_context.h
index 659303de9e1..c977dc15285 100644
--- a/src/freedreno/ir3/ir3_context.h
+++ b/src/freedreno/ir3/ir3_context.h
@@ -180,6 +180,7 @@ struct ir3_instruction * ir3_create_collect(struct ir3_context *ctx,
struct ir3_instruction *const *arr, unsigned arrsz);
void ir3_split_dest(struct ir3_block *block, struct ir3_instruction **dst,
struct ir3_instruction *src, unsigned base, unsigned n);
+void ir3_handle_bindless_cat6(struct ir3_instruction *instr, nir_src rsrc);
NORETURN void ir3_context_error(struct ir3_context *ctx, const char *format, ...);
More information about the mesa-commit
mailing list