Mesa (main): ac: replace 5 ac_shader_abi::load_* callbacks with 1 intrinsic_load callback

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 13 12:22:27 UTC 2022


Module: Mesa
Branch: main
Commit: 29965f356b9cf464e152acf63dc67b85040dc385
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=29965f356b9cf464e152acf63dc67b85040dc385

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu May  5 22:16:27 2022 -0400

ac: replace 5 ac_shader_abi::load_* callbacks with 1 intrinsic_load callback

This merges them into si_llvm_load_intrinsic and reuses load_tess_varyings.

RADV only implemented 1 callback.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16467>

---

 src/amd/llvm/ac_nir_to_llvm.c                      | 29 ++------
 src/amd/llvm/ac_shader_abi.h                       | 13 +---
 src/amd/vulkan/radv_nir_to_llvm.c                  | 13 +++-
 src/gallium/drivers/radeonsi/si_shader_info.c      |  6 ++
 src/gallium/drivers/radeonsi/si_shader_internal.h  |  1 +
 src/gallium/drivers/radeonsi/si_shader_llvm.c      | 85 +++++++++++++++++-----
 src/gallium/drivers/radeonsi/si_shader_llvm_ps.c   |  7 --
 src/gallium/drivers/radeonsi/si_shader_llvm_tess.c | 81 +--------------------
 src/gallium/drivers/radeonsi/si_shader_llvm_vs.c   | 20 -----
 9 files changed, 99 insertions(+), 156 deletions(-)

diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c
index 3b638ceb5a7..379c88f2b2d 100644
--- a/src/amd/llvm/ac_nir_to_llvm.c
+++ b/src/amd/llvm/ac_nir_to_llvm.c
@@ -3616,11 +3616,14 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
    }
    case nir_intrinsic_load_base_vertex:
    case nir_intrinsic_load_first_vertex:
-      result = ctx->abi->load_base_vertex(ctx->abi,
-                                          instr->intrinsic == nir_intrinsic_load_base_vertex);
-      break;
    case nir_intrinsic_load_workgroup_size:
-      result = ctx->abi->load_local_group_size(ctx->abi);
+   case nir_intrinsic_load_tess_level_outer:
+   case nir_intrinsic_load_tess_level_inner:
+   case nir_intrinsic_load_tess_level_outer_default:
+   case nir_intrinsic_load_tess_level_inner_default:
+   case nir_intrinsic_load_patch_vertices_in:
+   case nir_intrinsic_load_sample_mask_in:
+      result = ctx->abi->intrinsic_load(ctx->abi, instr->intrinsic);
       break;
    case nir_intrinsic_load_vertex_id:
       result = LLVMBuildAdd(ctx->ac.builder,
@@ -3687,9 +3690,6 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
    case nir_intrinsic_load_sample_pos:
       result = load_sample_pos(ctx);
       break;
-   case nir_intrinsic_load_sample_mask_in:
-      result = ctx->abi->load_sample_mask_in(ctx->abi);
-      break;
    case nir_intrinsic_load_frag_coord:
       result = emit_load_frag_coord(ctx);
       break;
@@ -4031,21 +4031,6 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
       result = ac_build_gather_values(&ctx->ac, coord, 3);
       break;
    }
-   case nir_intrinsic_load_tess_level_outer:
-      result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_OUTER, false);
-      break;
-   case nir_intrinsic_load_tess_level_inner:
-      result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_INNER, false);
-      break;
-   case nir_intrinsic_load_tess_level_outer_default:
-      result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_OUTER, true);
-      break;
-   case nir_intrinsic_load_tess_level_inner_default:
-      result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_INNER, true);
-      break;
-   case nir_intrinsic_load_patch_vertices_in:
-      result = ctx->abi->load_patch_vertices_in(ctx->abi);
-      break;
    case nir_intrinsic_vote_all: {
       result = ac_build_vote_all(&ctx->ac, get_src(ctx, instr->src[0]));
       break;
diff --git a/src/amd/llvm/ac_shader_abi.h b/src/amd/llvm/ac_shader_abi.h
index b7406b92b70..0c370ffbc9b 100644
--- a/src/amd/llvm/ac_shader_abi.h
+++ b/src/amd/llvm/ac_shader_abi.h
@@ -27,6 +27,7 @@
 #include "ac_shader_args.h"
 #include "ac_shader_util.h"
 #include "compiler/shader_enums.h"
+#include "nir.h"
 #include <llvm-c/Core.h>
 
 #include <assert.h>
@@ -74,10 +75,6 @@ struct ac_shader_abi {
                              LLVMValueRef src, unsigned writemask,
                              unsigned component, unsigned location, unsigned driver_location);
 
-   LLVMValueRef (*load_patch_vertices_in)(struct ac_shader_abi *abi);
-
-   LLVMValueRef (*load_tess_level)(struct ac_shader_abi *abi, unsigned varying_id,
-                                   bool load_default_state);
 
    LLVMValueRef (*load_ubo)(struct ac_shader_abi *abi, LLVMValueRef index);
 
@@ -109,14 +106,10 @@ struct ac_shader_abi {
 
    LLVMValueRef (*load_sample_position)(struct ac_shader_abi *abi, LLVMValueRef sample_id);
 
-   LLVMValueRef (*load_local_group_size)(struct ac_shader_abi *abi);
-
-   LLVMValueRef (*load_sample_mask_in)(struct ac_shader_abi *abi);
-
-   LLVMValueRef (*load_base_vertex)(struct ac_shader_abi *abi, bool non_indexed_is_zero);
-
    LLVMValueRef (*emit_fbfetch)(struct ac_shader_abi *abi);
 
+   LLVMValueRef (*intrinsic_load)(struct ac_shader_abi *abi, nir_intrinsic_op op);
+
    /* Whether to clamp the shadow reference value to [0,1]on GFX8. Radeonsi currently
     * uses it due to promoting D16 to D32, but radv needs it off. */
    bool clamp_shadow_reference;
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index ecfd4f94f36..6069f573e40 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2012,6 +2012,17 @@ declare_esgs_ring(struct radv_shader_context *ctx)
    LLVMSetAlignment(ctx->esgs_ring, 64 * 1024);
 }
 
+static LLVMValueRef radv_intrinsic_load(struct ac_shader_abi *abi, nir_intrinsic_op op)
+{
+   switch (op) {
+   case nir_intrinsic_load_base_vertex:
+   case nir_intrinsic_load_first_vertex:
+      return radv_load_base_vertex(abi, op == nir_intrinsic_load_base_vertex);
+   default:
+      return NULL;
+   }
+}
+
 static LLVMModuleRef
 ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
                          const struct radv_nir_compiler_options *options,
@@ -2044,6 +2055,7 @@ ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
 
    create_function(&ctx, shaders[shader_count - 1]->info.stage, shader_count >= 2);
 
+   ctx.abi.intrinsic_load = radv_intrinsic_load;
    ctx.abi.emit_vertex_with_counter = visit_emit_vertex_with_counter;
    ctx.abi.load_ubo = radv_load_ubo;
    ctx.abi.load_ssbo = radv_load_ssbo;
@@ -2113,7 +2125,6 @@ ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
          ctx.abi.emit_primitive = visit_end_primitive;
       } else if (shaders[shader_idx]->info.stage == MESA_SHADER_TESS_EVAL) {
       } else if (shaders[shader_idx]->info.stage == MESA_SHADER_VERTEX) {
-         ctx.abi.load_base_vertex = radv_load_base_vertex;
          ctx.abi.load_inputs = radv_load_vs_inputs;
       } else if (shaders[shader_idx]->info.stage == MESA_SHADER_FRAGMENT) {
          ctx.abi.load_sample_position = load_sample_position;
diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c
index 8de6c8caacd..b6eb7574ef3 100644
--- a/src/gallium/drivers/radeonsi/si_shader_info.c
+++ b/src/gallium/drivers/radeonsi/si_shader_info.c
@@ -686,6 +686,12 @@ void si_nir_scan_shader(struct si_screen *sscreen, const struct nir_shader *nir,
       info->output_usagemask[info->num_outputs] = 0x1;
    }
 
+   if (nir->info.stage == MESA_SHADER_TESS_EVAL) {
+      /* This is a hack to simplify loading tess levels in TES. */
+      info->input[info->num_inputs].semantic = VARYING_SLOT_TESS_LEVEL_OUTER;
+      info->input[info->num_inputs + 1].semantic = VARYING_SLOT_TESS_LEVEL_INNER;
+   }
+
    if (nir->info.stage == MESA_SHADER_FRAGMENT) {
       info->allow_flat_shading = !(info->uses_persp_center || info->uses_persp_centroid ||
                                    info->uses_persp_sample || info->uses_linear_center ||
diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h
index 1e1f1b52f93..b52187fc491 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -244,6 +244,7 @@ void si_llvm_gs_build_end(struct si_shader_context *ctx);
 void si_llvm_init_gs_callbacks(struct si_shader_context *ctx);
 
 /* si_shader_llvm_tess.c */
+LLVMValueRef si_get_num_tcs_out_vertices(struct si_shader_context *ctx);
 void si_llvm_preload_tes_rings(struct si_shader_context *ctx);
 void si_llvm_ls_build_end(struct si_shader_context *ctx);
 void si_llvm_build_tcs_epilog(struct si_shader_context *ctx, union si_shader_part_key *key);
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c
index 64703706fd6..f9d6cb980a3 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c
@@ -396,21 +396,6 @@ LLVMValueRef si_get_primitive_id(struct si_shader_context *ctx, unsigned swizzle
    }
 }
 
-static LLVMValueRef si_llvm_get_block_size(struct ac_shader_abi *abi)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-
-   assert(ctx->shader->selector->info.base.workgroup_size_variable &&
-          ctx->shader->selector->info.uses_variable_block_size);
-
-   LLVMValueRef chan[3] = {
-      si_unpack_param(ctx, ctx->block_size, 0, 10),
-      si_unpack_param(ctx, ctx->block_size, 10, 10),
-      si_unpack_param(ctx, ctx->block_size, 20, 10),
-   };
-   return ac_build_gather_values(&ctx->ac, chan, 3);
-}
-
 static void si_llvm_declare_compute_memory(struct si_shader_context *ctx)
 {
    struct si_shader_selector *sel = ctx->shader->selector;
@@ -726,6 +711,72 @@ void si_build_wrapper_function(struct si_shader_context *ctx, LLVMValueRef *part
       LLVMBuildRet(builder, ret);
 }
 
+static LLVMValueRef si_llvm_load_intrinsic(struct ac_shader_abi *abi, nir_intrinsic_op op)
+{
+   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+   const struct si_shader_info *info = &ctx->shader->selector->info;
+
+   switch (op) {
+   case nir_intrinsic_load_first_vertex:
+      return ac_get_arg(&ctx->ac, ctx->args.base_vertex);
+
+   case nir_intrinsic_load_base_vertex: {
+      /* For non-indexed draws, the base vertex set by the driver
+       * (for direct draws) or the CP (for indirect draws) is the
+       * first vertex ID, but GLSL expects 0 to be returned.
+       */
+      LLVMValueRef indexed = si_unpack_param(ctx, ctx->vs_state_bits, 1, 1);
+      indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->ac.i1, "");
+      return LLVMBuildSelect(ctx->ac.builder, indexed, ac_get_arg(&ctx->ac, ctx->args.base_vertex),
+                             ctx->ac.i32_0, "");
+   }
+
+   case nir_intrinsic_load_workgroup_size: {
+      assert(ctx->shader->selector->info.base.workgroup_size_variable &&
+             ctx->shader->selector->info.uses_variable_block_size);
+      LLVMValueRef chan[3] = {
+         si_unpack_param(ctx, ctx->block_size, 0, 10),
+         si_unpack_param(ctx, ctx->block_size, 10, 10),
+         si_unpack_param(ctx, ctx->block_size, 20, 10),
+      };
+      return ac_build_gather_values(&ctx->ac, chan, 3);
+   }
+
+   case nir_intrinsic_load_tess_level_outer:
+      return abi->load_tess_varyings(abi, ctx->ac.f32, NULL, NULL, info->num_inputs, 0, 4, true, false);
+
+   case nir_intrinsic_load_tess_level_inner:
+      return abi->load_tess_varyings(abi, ctx->ac.f32, NULL, NULL, info->num_inputs + 1, 0, 4, true, false);
+
+   case nir_intrinsic_load_tess_level_outer_default:
+   case nir_intrinsic_load_tess_level_inner_default: {
+      LLVMValueRef slot = LLVMConstInt(ctx->ac.i32, SI_HS_CONST_DEFAULT_TESS_LEVELS, 0);
+      LLVMValueRef buf = ac_get_arg(&ctx->ac, ctx->internal_bindings);
+      buf = ac_build_load_to_sgpr(&ctx->ac, buf, slot);
+      int offset = op == nir_intrinsic_load_tess_level_inner_default ? 4 : 0;
+      LLVMValueRef val[4];
+
+      for (int i = 0; i < 4; i++)
+         val[i] = si_buffer_load_const(ctx, buf, LLVMConstInt(ctx->ac.i32, (offset + i) * 4, 0));
+      return ac_build_gather_values(&ctx->ac, val, 4);
+   }
+
+   case nir_intrinsic_load_patch_vertices_in:
+      if (ctx->stage == MESA_SHADER_TESS_CTRL)
+         return si_unpack_param(ctx, ctx->tcs_out_lds_layout, 13, 6);
+      else if (ctx->stage == MESA_SHADER_TESS_EVAL)
+         return si_get_num_tcs_out_vertices(ctx);
+      else
+         return NULL;
+
+   case nir_intrinsic_load_sample_mask_in:
+      return ac_to_integer(&ctx->ac, ac_get_arg(&ctx->ac, ctx->args.sample_coverage));
+
+   default:
+      return NULL;
+   }
+}
+
 bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shader,
                            struct nir_shader *nir, bool free_nir, bool ngg_cull_shader)
 {
@@ -741,6 +792,8 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad
    ctx->num_samplers = BITSET_LAST_BIT(info->base.textures_used);
    ctx->num_images = info->base.num_images;
 
+   ctx->abi.intrinsic_load = si_llvm_load_intrinsic;
+
    si_llvm_init_resource_callbacks(ctx);
    si_llvm_create_main_func(ctx, ngg_cull_shader);
 
@@ -839,8 +892,6 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad
    }
 
    case MESA_SHADER_COMPUTE:
-      ctx->abi.load_local_group_size = si_llvm_get_block_size;
-
       if (nir->info.cs.user_data_components_amd) {
          ctx->abi.user_data = ac_get_arg(&ctx->ac, ctx->cs_user_data);
          ctx->abi.user_data = ac_build_expand_to_vec4(&ctx->ac, ctx->abi.user_data,
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
index 7ab160c3bc4..79a32a2774f 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
@@ -31,12 +31,6 @@ LLVMValueRef si_get_sample_id(struct si_shader_context *ctx)
    return si_unpack_param(ctx, ctx->args.ancillary, 8, 4);
 }
 
-static LLVMValueRef load_sample_mask_in(struct ac_shader_abi *abi)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-   return ac_to_integer(&ctx->ac, ac_get_arg(&ctx->ac, ctx->args.sample_coverage));
-}
-
 static LLVMValueRef load_sample_position(struct ac_shader_abi *abi, LLVMValueRef sample_id)
 {
    struct si_shader_context *ctx = si_shader_context_from_abi(abi);
@@ -987,6 +981,5 @@ void si_llvm_build_monolithic_ps(struct si_shader_context *ctx, struct si_shader
 void si_llvm_init_ps_callbacks(struct si_shader_context *ctx)
 {
    ctx->abi.load_sample_position = load_sample_position;
-   ctx->abi.load_sample_mask_in = load_sample_mask_in;
    ctx->abi.emit_fbfetch = si_nir_emit_fbfetch;
 }
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c b/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
index 46e7ab62e42..925b9e156a0 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
@@ -135,7 +135,7 @@ static LLVMValueRef get_tcs_out_current_patch_data_offset(struct si_shader_conte
    return ac_build_imad(&ctx->ac, patch_stride, rel_patch_id, patch0_patch_data_offset);
 }
 
-static LLVMValueRef get_num_tcs_out_vertices(struct si_shader_context *ctx)
+LLVMValueRef si_get_num_tcs_out_vertices(struct si_shader_context *ctx)
 {
    unsigned tcs_out_vertices =
       ctx->shader->selector ? ctx->shader->selector->info.base.tess.tcs_vertices_out
@@ -219,7 +219,7 @@ static LLVMValueRef get_tcs_tes_buffer_address(struct si_shader_context *ctx,
    LLVMValueRef base_addr, vertices_per_patch, num_patches, total_vertices;
    LLVMValueRef param_stride, constant16;
 
-   vertices_per_patch = get_num_tcs_out_vertices(ctx);
+   vertices_per_patch = si_get_num_tcs_out_vertices(ctx);
    num_patches = si_unpack_param(ctx, ctx->tcs_offchip_layout, 0, 6);
    num_patches = LLVMBuildAdd(ctx->ac.builder, num_patches, ctx->ac.i32_1, "");
    total_vertices = LLVMBuildMul(ctx->ac.builder, vertices_per_patch, num_patches, "");
@@ -563,79 +563,6 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,
    }
 }
 
-static LLVMValueRef load_tess_level(struct si_shader_context *ctx, unsigned semantic)
-{
-   LLVMValueRef base, addr;
-
-   int param = si_shader_io_get_unique_index_patch(semantic);
-
-   base = ac_get_arg(&ctx->ac, ctx->args.tess_offchip_offset);
-   addr = get_tcs_tes_buffer_address(ctx, get_rel_patch_id(ctx), NULL,
-                                     LLVMConstInt(ctx->ac.i32, param, 0));
-
-   return buffer_load(ctx, ctx->ac.f32, ~0, ctx->tess_offchip_ring, base, addr, true);
-}
-
-static LLVMValueRef load_tess_level_default(struct si_shader_context *ctx, unsigned sysval)
-{
-   LLVMValueRef buf, slot, val[4];
-   int i, offset;
-
-   slot = LLVMConstInt(ctx->ac.i32, SI_HS_CONST_DEFAULT_TESS_LEVELS, 0);
-   buf = ac_get_arg(&ctx->ac, ctx->internal_bindings);
-   buf = ac_build_load_to_sgpr(&ctx->ac, buf, slot);
-   offset = sysval == SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT ? 4 : 0;
-
-   for (i = 0; i < 4; i++)
-      val[i] = si_buffer_load_const(ctx, buf, LLVMConstInt(ctx->ac.i32, (offset + i) * 4, 0));
-   return ac_build_gather_values(&ctx->ac, val, 4);
-}
-
-static LLVMValueRef si_load_tess_level(struct ac_shader_abi *abi, unsigned varying_id,
-                                       bool load_default_state)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-   unsigned semantic;
-
-   if (load_default_state) {
-      switch (varying_id) {
-      case VARYING_SLOT_TESS_LEVEL_INNER:
-         semantic = SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT;
-         break;
-      case VARYING_SLOT_TESS_LEVEL_OUTER:
-         semantic = SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT;
-         break;
-      default:
-         unreachable("unknown tess level");
-      }
-      return load_tess_level_default(ctx, semantic);
-   }
-
-   switch (varying_id) {
-   case VARYING_SLOT_TESS_LEVEL_INNER:
-      semantic = VARYING_SLOT_TESS_LEVEL_INNER;
-      break;
-   case VARYING_SLOT_TESS_LEVEL_OUTER:
-      semantic = VARYING_SLOT_TESS_LEVEL_OUTER;
-      break;
-   default:
-      unreachable("unknown tess level");
-   }
-
-   return load_tess_level(ctx, semantic);
-}
-
-static LLVMValueRef si_load_patch_vertices_in(struct ac_shader_abi *abi)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-   if (ctx->stage == MESA_SHADER_TESS_CTRL)
-      return si_unpack_param(ctx, ctx->tcs_out_lds_layout, 13, 6);
-   else if (ctx->stage == MESA_SHADER_TESS_EVAL)
-      return get_num_tcs_out_vertices(ctx);
-   else
-      unreachable("invalid shader stage for VERTICESIN");
-}
-
 /**
  * Forward all outputs from the vertex shader to the TES. This is only used
  * for the fixed function TCS.
@@ -1086,14 +1013,10 @@ void si_llvm_build_tcs_epilog(struct si_shader_context *ctx, union si_shader_par
 void si_llvm_init_tcs_callbacks(struct si_shader_context *ctx)
 {
    ctx->abi.load_tess_varyings = si_nir_load_tcs_varyings;
-   ctx->abi.load_tess_level = si_load_tess_level;
    ctx->abi.store_tcs_outputs = si_nir_store_output_tcs;
-   ctx->abi.load_patch_vertices_in = si_load_patch_vertices_in;
 }
 
 void si_llvm_init_tes_callbacks(struct si_shader_context *ctx, bool ngg_cull_shader)
 {
    ctx->abi.load_tess_varyings = si_nir_load_input_tes;
-   ctx->abi.load_tess_level = si_load_tess_level;
-   ctx->abi.load_patch_vertices_in = si_load_patch_vertices_in;
 }
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
index 1e5a10c20f8..103fb64356a 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
@@ -986,27 +986,7 @@ void si_llvm_build_vs_prolog(struct si_shader_context *ctx, union si_shader_part
    si_llvm_build_ret(ctx, ret);
 }
 
-static LLVMValueRef get_base_vertex(struct ac_shader_abi *abi, bool non_indexed_is_zero)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-
-   /* This doesn't happen with GL: */
-   if (!non_indexed_is_zero)
-      return ac_get_arg(&ctx->ac, ctx->args.base_vertex);
-
-   /* For non-indexed draws, the base vertex set by the driver
-    * (for direct draws) or the CP (for indirect draws) is the
-    * first vertex ID, but GLSL expects 0 to be returned.
-    */
-   LLVMValueRef indexed = si_unpack_param(ctx, ctx->vs_state_bits, 1, 1);
-   indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->ac.i1, "");
-
-   return LLVMBuildSelect(ctx->ac.builder, indexed, ac_get_arg(&ctx->ac, ctx->args.base_vertex),
-                          ctx->ac.i32_0, "");
-}
-
 void si_llvm_init_vs_callbacks(struct si_shader_context *ctx, bool ngg_cull_shader)
 {
-   ctx->abi.load_base_vertex = get_base_vertex;
    ctx->abi.load_inputs = si_load_vs_input;
 }



More information about the mesa-commit mailing list