[Mesa-dev] [PATCH] llvmpipe: fix primitive input to geom shaders
Dave Airlie
airlied at gmail.com
Tue Jan 7 00:55:43 PST 2014
Not sure this is 100% the correct way to do this, since it may be a change
at the glsl->tgsi level that is required, either way open discussions!
fixes piglit tests/spec/glsl-1.50/execution/geometry/primitive-id-in.shader_test
with llvmpipe with fake MSAA
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 5 +++++
src/gallium/auxiliary/tgsi/tgsi_scan.c | 3 +++
2 files changed, 8 insertions(+)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 6d8dc8c..de2c64f 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -1173,6 +1173,10 @@ emit_fetch_gs_input(
LLVMValueRef swizzle_index = lp_build_const_int32(gallivm, swizzle);
LLVMValueRef res;
+ if (bld_base->info->input_semantic_name[reg->Register.Index] == TGSI_SEMANTIC_PRIMID) {
+ res = bld->system_values.prim_id;
+ goto out;
+ }
if (reg->Register.Indirect) {
attrib_index = get_indirect_index(bld,
reg->Register.File,
@@ -1200,6 +1204,7 @@ emit_fetch_gs_input(
assert(res);
+ out:
if (stype == TGSI_TYPE_UNSIGNED) {
res = LLVMBuildBitCast(builder, res, bld_base->uint_bld.vec_type, "");
} else if (stype == TGSI_TYPE_SIGNED) {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 0f10556..ce1f7b6 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -198,6 +198,9 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
info->uses_primid = TRUE;
else if (semName == TGSI_SEMANTIC_FACE)
info->uses_frontface = TRUE;
+ } else if (procType == TGSI_PROCESSOR_GEOMETRY) {
+ if (semName == TGSI_SEMANTIC_PRIMID)
+ info->uses_primid = TRUE;
}
}
else if (file == TGSI_FILE_SYSTEM_VALUE) {
--
1.8.4.2
More information about the mesa-dev
mailing list