[Mesa-dev] [PATCH] llvmpipe: fix fp64 inputs to geom shader.

Roland Scheidegger sroland at vmware.com
Mon Oct 12 06:14:00 PDT 2015


Reviewed-by: Roland Scheidegger <sroland at vmware.com>


Am 12.10.2015 um 07:55 schrieb Dave Airlie:
> From: Dave Airlie <airlied at redhat.com>
> 
> This fixes the fetching of fp64 inputs to the geometry shader,
> 
> this fixes the recently posted piglit's
> arb_gpu_shader_fp64/execution/gs-fs-vs-double-array.shader_test
> arb_vertex_attrib_64bit/execution/gs-fs-vs-attrib-double-array.shader_test
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> index fae604e..e1184e8 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> @@ -1548,13 +1548,21 @@ emit_fetch_gs_input(
>                                      swizzle_index);
>  
>     assert(res);
> -
> -   if (stype == TGSI_TYPE_UNSIGNED) {
> +   if (stype == TGSI_TYPE_DOUBLE) {
> +      LLVMValueRef swizzle_index = lp_build_const_int32(gallivm, swizzle + 1);
> +      LLVMValueRef res2;
> +      res2 = bld->gs_iface->fetch_input(bld->gs_iface, bld_base,
> +                                        reg->Dimension.Indirect,
> +                                        vertex_index,
> +                                        reg->Register.Indirect,
> +                                        attrib_index,
> +                                        swizzle_index);
> +      assert(res2);
> +      res = emit_fetch_double(bld_base, stype, res, res2);
> +   } else if (stype == TGSI_TYPE_UNSIGNED) {
>        res = LLVMBuildBitCast(builder, res, bld_base->uint_bld.vec_type, "");
>     } else if (stype == TGSI_TYPE_SIGNED) {
>        res = LLVMBuildBitCast(builder, res, bld_base->int_bld.vec_type, "");
> -   } else if (stype == TGSI_TYPE_DOUBLE) {
> -      res = LLVMBuildBitCast(builder, res, bld_base->dbl_bld.vec_type, "");
>     }
>  
>     return res;
> 



More information about the mesa-dev mailing list