summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <[email protected]>2018-01-19 01:20:12 +0100
committerBas Nieuwenhuizen <[email protected]>2018-01-19 01:54:59 +0100
commit4a9fd90e1e7ebbb8015d964474d476093ed9c3a4 (patch)
tree62704ad129ffcad991139aa4d4af7f000c728024
parentbd5c942cefc9f58aa6e8f6a9452f65e9d0d9d93a (diff)
ac/nir: Fix TCS output LDS offsets.
When a channel was not set we also did not increase the LDS address, while that obviously should happen. The output loading code was inadvertently fixed which resulted in a mismatch causing the SaschaWillems tessellation demo to result in corrupt rendering. Fixes: 7898eb9a60 "ac: rework load_tcs_{inputs,outputs}" Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r--src/amd/common/ac_nir_to_llvm.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index cd400376a0e..0bebfea9721 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2968,16 +2968,17 @@ store_tcs_output(struct ac_shader_abi *abi,
continue;
LLVMValueRef value = ac_llvm_extract_elem(&ctx->ac, src, chan - component);
- if (store_lds || is_tess_factor)
- ac_lds_store(&ctx->ac, dw_addr, value);
+ if (store_lds || is_tess_factor) {
+ LLVMValueRef dw_addr_chan =
+ LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMConstInt(ctx->ac.i32, chan, false), "");
+ ac_lds_store(&ctx->ac, dw_addr_chan, value);
+ }
if (!is_tess_factor && writemask != 0xF)
ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, value, 1,
buf_addr, ctx->oc_lds,
4 * (base + chan), 1, 0, true, false);
-
- dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
- ctx->ac.i32_1, "");
}
if (writemask == 0xF) {