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 <airlied@redhat.com>
This commit is contained in:
parent
bd5c942cef
commit
4a9fd90e1e
|
@ -2968,16 +2968,17 @@ store_tcs_output(struct ac_shader_abi *abi,
|
||||||
continue;
|
continue;
|
||||||
LLVMValueRef value = ac_llvm_extract_elem(&ctx->ac, src, chan - component);
|
LLVMValueRef value = ac_llvm_extract_elem(&ctx->ac, src, chan - component);
|
||||||
|
|
||||||
if (store_lds || is_tess_factor)
|
if (store_lds || is_tess_factor) {
|
||||||
ac_lds_store(&ctx->ac, dw_addr, value);
|
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)
|
if (!is_tess_factor && writemask != 0xF)
|
||||||
ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, value, 1,
|
ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, value, 1,
|
||||||
buf_addr, ctx->oc_lds,
|
buf_addr, ctx->oc_lds,
|
||||||
4 * (base + chan), 1, 0, true, false);
|
4 * (base + chan), 1, 0, true, false);
|
||||||
|
|
||||||
dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
|
|
||||||
ctx->ac.i32_1, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writemask == 0xF) {
|
if (writemask == 0xF) {
|
||||||
|
|
Loading…
Reference in New Issue