diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index a18da4f13e2..f129c73abea 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -3635,6 +3635,7 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins case nir_intrinsic_load_pipeline_stat_query_enabled_amd: case nir_intrinsic_load_prim_gen_query_enabled_amd: case nir_intrinsic_load_prim_xfb_query_enabled_amd: + case nir_intrinsic_load_clamp_vertex_color_amd: result = ctx->abi->intrinsic_load(ctx->abi, instr->intrinsic); break; case nir_intrinsic_load_user_clip_plane: diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index df4f4e7ddd2..1a039d90aad 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -172,6 +172,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) case nir_intrinsic_load_prim_gen_query_enabled_amd: case nir_intrinsic_load_prim_xfb_query_enabled_amd: case nir_intrinsic_load_merged_wave_info_amd: + case nir_intrinsic_load_clamp_vertex_color_amd: case nir_intrinsic_load_cull_front_face_enabled_amd: case nir_intrinsic_load_cull_back_face_enabled_amd: case nir_intrinsic_load_cull_ccw_amd: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index be0e7ddf434..d62d8aa9b8d 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1399,6 +1399,8 @@ system_value("prim_xfb_query_enabled_amd", dest_comp=1, bit_sizes=[1]) # Merged wave info. Bits 0-7 are the ES thread count, 8-15 are the GS thread count, 16-24 is the # GS Wave ID, 24-27 is the wave index in the workgroup, and 28-31 is the workgroup size in waves. system_value("merged_wave_info_amd", dest_comp=1) +# Whether the shader should clamp vertex color outputs to [0, 1]. +system_value("clamp_vertex_color_amd", dest_comp=1, bit_sizes=[1]) # Whether the shader should cull front facing triangles. intrinsic("load_cull_front_face_enabled_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) # Whether the shader should cull back facing triangles. diff --git a/src/compiler/nir/nir_opt_preamble.c b/src/compiler/nir/nir_opt_preamble.c index b229bf9418f..b46426779ff 100644 --- a/src/compiler/nir/nir_opt_preamble.c +++ b/src/compiler/nir/nir_opt_preamble.c @@ -145,6 +145,7 @@ can_move_intrinsic(nir_intrinsic_instr *instr, opt_preamble_ctx *ctx) case nir_intrinsic_load_pipeline_stat_query_enabled_amd: case nir_intrinsic_load_prim_gen_query_enabled_amd: case nir_intrinsic_load_prim_xfb_query_enabled_amd: + case nir_intrinsic_load_clamp_vertex_color_amd: case nir_intrinsic_load_cull_front_face_enabled_amd: case nir_intrinsic_load_cull_back_face_enabled_amd: case nir_intrinsic_load_cull_ccw_amd: diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index f7817aff6bc..58b4f8fbd03 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -879,6 +879,11 @@ static LLVMValueRef si_llvm_load_intrinsic(struct ac_shader_abi *abi, nir_intrin return LLVMBuildTrunc(ctx->ac.builder, enabled, ctx->ac.i1, ""); } + case nir_intrinsic_load_clamp_vertex_color_amd: { + LLVMValueRef enabled = GET_FIELD(ctx, VS_STATE_CLAMP_VERTEX_COLOR); + return LLVMBuildTrunc(ctx->ac.builder, enabled, ctx->ac.i1, ""); + } + default: return NULL; }