From: Dave Airlie <airl...@redhat.com>

This migrates to the code shared with radeonsi.

Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 src/amd/common/ac_nir_to_llvm.c | 128 +++++++++-------------------------------
 1 file changed, 28 insertions(+), 100 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 11a8490..6882674 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -407,78 +407,6 @@ static LLVMValueRef unpack_param(struct 
nir_to_llvm_context *ctx,
        return value;
 }
 
-static LLVMValueRef build_gep0(struct nir_to_llvm_context *ctx,
-                              LLVMValueRef base_ptr, LLVMValueRef index)
-{
-       LLVMValueRef indices[2] = {
-               ctx->i32zero,
-               index,
-       };
-       return LLVMBuildGEP(ctx->builder, base_ptr,
-                           indices, 2, "");
-}
-
-static LLVMValueRef build_indexed_load(struct nir_to_llvm_context *ctx,
-                                      LLVMValueRef base_ptr, LLVMValueRef 
index,
-                                      bool uniform)
-{
-       LLVMValueRef pointer;
-       pointer = build_gep0(ctx, base_ptr, index);
-       if (uniform)
-               LLVMSetMetadata(pointer, ctx->uniform_md_kind, ctx->empty_md);
-       return LLVMBuildLoad(ctx->builder, pointer, "");
-}
-
-static LLVMValueRef build_indexed_load_const(struct nir_to_llvm_context *ctx,
-                                            LLVMValueRef base_ptr, 
LLVMValueRef index)
-{
-       LLVMValueRef result = build_indexed_load(ctx, base_ptr, index, true);
-       LLVMSetMetadata(result, ctx->invariant_load_md_kind, ctx->empty_md);
-       return result;
-}
-
-static void build_tbuffer_store(struct nir_to_llvm_context *ctx,
-                               LLVMValueRef rsrc,
-                               LLVMValueRef vdata,
-                               unsigned num_channels,
-                               LLVMValueRef vaddr,
-                               LLVMValueRef soffset,
-                               unsigned inst_offset,
-                               unsigned dfmt,
-                               unsigned nfmt,
-                               unsigned offen,
-                               unsigned idxen,
-                               unsigned glc,
-                               unsigned slc,
-                               unsigned tfe)
-{
-       LLVMValueRef args[] = {
-               rsrc,
-               vdata,
-               LLVMConstInt(ctx->i32, num_channels, 0),
-               vaddr,
-               soffset,
-               LLVMConstInt(ctx->i32, inst_offset, 0),
-               LLVMConstInt(ctx->i32, dfmt, 0),
-               LLVMConstInt(ctx->i32, nfmt, 0),
-               LLVMConstInt(ctx->i32, offen, 0),
-               LLVMConstInt(ctx->i32, idxen, 0),
-               LLVMConstInt(ctx->i32, glc, 0),
-               LLVMConstInt(ctx->i32, slc, 0),
-               LLVMConstInt(ctx->i32, tfe, 0)
-       };
-
-       /* The intrinsic is overloaded, we need to add a type suffix for 
overloading to work. */
-       unsigned func = CLAMP(num_channels, 1, 3) - 1;
-       const char *types[] = {"i32", "v2i32", "v4i32"};
-       char name[256];
-       snprintf(name, sizeof(name), "llvm.SI.tbuffer.store.%s", types[func]);
-
-       ac_emit_llvm_intrinsic(&ctx->ac, name, ctx->voidt,
-                           args, ARRAY_SIZE(args), 0);
-
-}
-
 static void set_userdata_location(struct ac_userdata_info *ud_info, uint8_t 
sgpr_idx, uint8_t num_sgprs)
 {
        ud_info->sgpr_idx = sgpr_idx;
@@ -1368,9 +1296,9 @@ static LLVMValueRef emit_ddxy(struct nir_to_llvm_context 
*ctx,
        } else {
                LLVMValueRef store_ptr, load_ptr0, load_ptr1;
 
-               store_ptr = build_gep0(ctx, ctx->lds, thread_id);
-               load_ptr0 = build_gep0(ctx, ctx->lds, tl_tid);
-               load_ptr1 = build_gep0(ctx, ctx->lds, trbl_tid);
+               store_ptr = ac_build_gep0(&ctx->ac, ctx->lds, thread_id);
+               load_ptr0 = ac_build_gep0(&ctx->ac, ctx->lds, tl_tid);
+               load_ptr1 = ac_build_gep0(&ctx->ac, ctx->lds, trbl_tid);
 
                LLVMBuildStore(ctx->builder, src0, store_ptr);
                tl = LLVMBuildLoad(ctx->builder, load_ptr0, "");
@@ -1980,7 +1908,7 @@ static LLVMValueRef visit_vulkan_resource_index(struct 
nir_to_llvm_context *ctx,
        index = LLVMBuildMul(ctx->builder, index, stride, "");
        offset = LLVMBuildAdd(ctx->builder, offset, index, "");
        
-       desc_ptr = build_gep0(ctx, desc_ptr, offset);
+       desc_ptr = ac_build_gep0(&ctx->ac, desc_ptr, offset);
        desc_ptr = cast_ptr(ctx, desc_ptr, ctx->v4i32);
        LLVMSetMetadata(desc_ptr, ctx->uniform_md_kind, ctx->empty_md);
 
@@ -1995,7 +1923,7 @@ static LLVMValueRef visit_load_push_constant(struct 
nir_to_llvm_context *ctx,
        addr = LLVMConstInt(ctx->i32, nir_intrinsic_base(instr), 0);
        addr = LLVMBuildAdd(ctx->builder, addr, get_src(ctx, instr->src[0]), 
"");
 
-       ptr = build_gep0(ctx, ctx->push_constants, addr);
+       ptr = ac_build_gep0(&ctx->ac, ctx->push_constants, addr);
        ptr = cast_ptr(ctx, ptr, get_def_type(ctx, &instr->dest.ssa));
 
        return LLVMBuildLoad(ctx->builder, ptr, "");
@@ -3054,8 +2982,8 @@ static LLVMValueRef load_sample_position(struct 
nir_to_llvm_context *ctx,
        LLVMValueRef offset1 = LLVMBuildAdd(ctx->builder, offset0, 
LLVMConstInt(ctx->i32, 4, false), "");
        LLVMValueRef result[2];
 
-       result[0] = build_indexed_load_const(ctx, ctx->sample_positions, 
offset0);
-       result[1] = build_indexed_load_const(ctx, ctx->sample_positions, 
offset1);
+       result[0] = ac_build_indexed_load_const(&ctx->ac, 
ctx->sample_positions, offset0);
+       result[1] = ac_build_indexed_load_const(&ctx->ac, 
ctx->sample_positions, offset1);
 
        return ac_build_gather_values(&ctx->ac, result, 2);
 }
@@ -3210,12 +3138,12 @@ visit_emit_vertex(struct nir_to_llvm_context *ctx,
 
                        out_val = LLVMBuildBitCast(ctx->builder, out_val, 
ctx->i32, "");
 
-                       build_tbuffer_store(ctx, ctx->gsvs_ring,
-                                           out_val, 1,
-                                           voffset, ctx->gs2vs_offset, 0,
-                                           V_008F0C_BUF_DATA_FORMAT_32,
-                                           V_008F0C_BUF_NUM_FORMAT_UINT,
-                                           1, 0, 1, 1, 0);
+                       ac_build_tbuffer_store(&ctx->ac, ctx->gsvs_ring,
+                                              out_val, 1,
+                                              voffset, ctx->gs2vs_offset, 0,
+                                              V_008F0C_BUF_DATA_FORMAT_32,
+                                              V_008F0C_BUF_NUM_FORMAT_UINT,
+                                              1, 0, 1, 1, 0);
                }
                idx++;
        }
@@ -3469,10 +3397,10 @@ static LLVMValueRef get_sampler_desc(struct 
nir_to_llvm_context *ctx,
 
        index = LLVMBuildMul(builder, index, LLVMConstInt(ctx->i32, stride / 
type_size, 0), "");
 
-       list = build_gep0(ctx, list, LLVMConstInt(ctx->i32, offset, 0));
+       list = ac_build_gep0(&ctx->ac, list, LLVMConstInt(ctx->i32, offset, 0));
        list = LLVMBuildPointerCast(builder, list, const_array(type, 0), "");
 
-       return build_indexed_load_const(ctx, list, index);
+       return ac_build_indexed_load_const(&ctx->ac, list, index);
 }
 
 static void set_tex_fetch_args(struct nir_to_llvm_context *ctx,
@@ -4138,7 +4066,7 @@ handle_vs_input_decl(struct nir_to_llvm_context *ctx,
        for (unsigned i = 0; i < attrib_count; ++i, ++idx) {
                t_offset = LLVMConstInt(ctx->i32, index + i, false);
 
-               t_list = build_indexed_load_const(ctx, t_list_ptr, t_offset);
+               t_list = ac_build_indexed_load_const(&ctx->ac, t_list_ptr, 
t_offset);
                args[0] = t_list;
                args[1] = LLVMConstInt(ctx->i32, 0, false);
                args[2] = buffer_index;
@@ -4732,14 +4660,14 @@ handle_es_outputs_post(struct nir_to_llvm_context *ctx)
                        LLVMValueRef out_val = LLVMBuildLoad(ctx->builder, 
out_ptr[j], "");
                        out_val = LLVMBuildBitCast(ctx->builder, out_val, 
ctx->i32, "");
 
-                       build_tbuffer_store(ctx,
-                                           ctx->esgs_ring,
-                                           out_val, 1,
-                                           LLVMGetUndef(ctx->i32), 
ctx->es2gs_offset,
-                                           (4 * param_index + j) * 4,
-                                           V_008F0C_BUF_DATA_FORMAT_32,
-                                           V_008F0C_BUF_NUM_FORMAT_UINT,
-                                           0, 0, 1, 1, 0);
+                       ac_build_tbuffer_store(&ctx->ac,
+                                              ctx->esgs_ring,
+                                              out_val, 1,
+                                              LLVMGetUndef(ctx->i32), 
ctx->es2gs_offset,
+                                              (4 * param_index + j) * 4,
+                                              V_008F0C_BUF_DATA_FORMAT_32,
+                                              V_008F0C_BUF_NUM_FORMAT_UINT,
+                                              0, 0, 1, 1, 0);
                }
        }
        ctx->shader_info->vs.esgs_itemsize = (max_output_written + 1) * 16;
@@ -4921,16 +4849,16 @@ static void
 ac_setup_rings(struct nir_to_llvm_context *ctx)
 {
        if (ctx->stage == MESA_SHADER_VERTEX && ctx->options->key.vs.as_es) {
-               ctx->esgs_ring = build_indexed_load_const(ctx, 
ctx->ring_offsets, ctx->i32one);
+               ctx->esgs_ring = ac_build_indexed_load_const(&ctx->ac, 
ctx->ring_offsets, ctx->i32one);
        }
 
        if (ctx->is_gs_copy_shader) {
-               ctx->gsvs_ring = build_indexed_load_const(ctx, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 3, false));
+               ctx->gsvs_ring = ac_build_indexed_load_const(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 3, false));
        }
        if (ctx->stage == MESA_SHADER_GEOMETRY) {
                LLVMValueRef tmp;
-               ctx->esgs_ring = build_indexed_load_const(ctx, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 2, false));
-               ctx->gsvs_ring = build_indexed_load_const(ctx, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 4, false));
+               ctx->esgs_ring = ac_build_indexed_load_const(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 2, false));
+               ctx->gsvs_ring = ac_build_indexed_load_const(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->i32, 4, false));
 
                ctx->gsvs_ring = LLVMBuildBitCast(ctx->builder, ctx->gsvs_ring, 
ctx->v4i32, "");
 
-- 
2.9.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to