diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c index 1b1d7002099..4944b0f944e 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c @@ -1340,6 +1340,8 @@ static void visit_intrinsic(struct lp_build_nir_context *bld_base, case nir_intrinsic_load_tess_level_outer: case nir_intrinsic_load_tess_level_inner: case nir_intrinsic_load_patch_vertices_in: + case nir_intrinsic_load_sample_id: + case nir_intrinsic_load_sample_pos: bld_base->sysval_intrin(bld_base, instr, result); break; case nir_intrinsic_load_helper_invocation: diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index e5bc1c75f2c..3ae332369ac 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -1375,6 +1375,17 @@ static void emit_sysval_intrin(struct lp_build_nir_context *bld_base, case nir_intrinsic_load_patch_vertices_in: result[0] = bld->system_values.vertices_in; break; + case nir_intrinsic_load_sample_id: + result[0] = lp_build_broadcast_scalar(&bld_base->uint_bld, bld->system_values.sample_id); + break; + case nir_intrinsic_load_sample_pos: + for (unsigned i = 0; i < 2; i++) { + LLVMValueRef idx = LLVMBuildMul(gallivm->builder, bld->system_values.sample_id, lp_build_const_int32(gallivm, 2), ""); + idx = LLVMBuildAdd(gallivm->builder, idx, lp_build_const_int32(gallivm, i), ""); + LLVMValueRef val = LLVMBuildGEP(gallivm->builder, bld->system_values.sample_pos, &idx, 1, ""); + result[i] = lp_build_broadcast_scalar(&bld_base->base, LLVMBuildLoad(gallivm->builder, val, "")); + } + break; } } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index 6af8b0bea55..a543e2e69cc 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -183,6 +183,8 @@ struct lp_bld_tgsi_system_values { LLVMValueRef tess_outer; LLVMValueRef tess_inner; LLVMValueRef vertices_in; + LLVMValueRef sample_id; + LLVMValueRef sample_pos; };