diff options
author | Dave Airlie <[email protected]> | 2015-12-09 17:02:01 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2015-12-09 17:03:38 +1000 |
commit | 8c9e40ac22ce5a60753172a8f95a120d84a3ec4c (patch) | |
tree | 88aa84ef27e503f2478c5a1384480e2ee25b0fb0 /src/gallium | |
parent | cce3864046be104933fd4f1bb7a4b36092ff4925 (diff) |
radeonsi: handle doubles in lds load path.
This handles loading doubles from LDS properly.
Reviewed-by: Michel Dänzer <[email protected]>
Cc: "11.0 11.1" <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 14f12dfb821..e2cf27dcce9 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -594,6 +594,14 @@ static LLVMValueRef lds_load(struct lp_build_tgsi_context *bld_base, lp_build_const_int32(gallivm, swizzle)); value = build_indexed_load(si_shader_ctx, si_shader_ctx->lds, dw_addr); + if (type == TGSI_TYPE_DOUBLE) { + LLVMValueRef value2; + dw_addr = lp_build_add(&bld_base->uint_bld, dw_addr, + lp_build_const_int32(gallivm, swizzle + 1)); + value2 = build_indexed_load(si_shader_ctx, si_shader_ctx->lds, dw_addr); + return radeon_llvm_emit_fetch_double(bld_base, value, value2); + } + return LLVMBuildBitCast(gallivm->builder, value, tgsi2llvmtype(bld_base, type), ""); } |