[Mesa-dev] [PATCH] llvmpipe: fix primitive input to geom shaders

Roland Scheidegger sroland at vmware.com
Tue Jan 7 10:41:24 PST 2014


Well we were using a system value for prim id in gs, hence this was not
necessary. I'm always confused though about system value / normal
semantic usage though, Zack might know better.

Roland

Am 07.01.2014 09:55, schrieb Dave Airlie:
> 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) {
> 


More information about the mesa-dev mailing list