diff options
author | Bas Nieuwenhuizen <[email protected]> | 2017-10-16 17:45:06 +0200 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2017-10-19 22:25:04 +0200 |
commit | 25efef40d20b48aad002667bee89d636a41e4c0a (patch) | |
tree | 54d6acdd9228c0f8459f174c21ecc4ee4f418666 /src | |
parent | d8bd693d03b801d3f9952482ffa31f5ae376be78 (diff) |
ac/nir: Don't write to the dynamic HS word on GFX9.
Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/common/ac_nir_to_llvm.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index c6c56f30b81..67945a353e8 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -6047,26 +6047,31 @@ write_tess_factors(struct nir_to_llvm_context *ctx) tf_base = ctx->tess_factor_offset; byteoffset = LLVMBuildMul(ctx->builder, rel_patch_id, LLVMConstInt(ctx->i32, 4 * stride, false), ""); + unsigned tf_offset = 0; - ac_nir_build_if(&inner_if_ctx, ctx, - LLVMBuildICmp(ctx->builder, LLVMIntEQ, - rel_patch_id, ctx->i32zero, "")); + if (ctx->options->chip_class <= VI) { + ac_nir_build_if(&inner_if_ctx, ctx, + LLVMBuildICmp(ctx->builder, LLVMIntEQ, + rel_patch_id, ctx->i32zero, "")); - /* Store the dynamic HS control word. */ - ac_build_buffer_store_dword(&ctx->ac, buffer, - LLVMConstInt(ctx->i32, 0x80000000, false), - 1, ctx->i32zero, tf_base, - 0, 1, 0, true, false); - ac_nir_build_endif(&inner_if_ctx); + /* Store the dynamic HS control word. */ + ac_build_buffer_store_dword(&ctx->ac, buffer, + LLVMConstInt(ctx->i32, 0x80000000, false), + 1, ctx->i32zero, tf_base, + 0, 1, 0, true, false); + tf_offset += 4; + + ac_nir_build_endif(&inner_if_ctx); + } /* Store the tessellation factors. */ ac_build_buffer_store_dword(&ctx->ac, buffer, vec0, MIN2(stride, 4), byteoffset, tf_base, - 4, 1, 0, true, false); + tf_offset, 1, 0, true, false); if (vec1) ac_build_buffer_store_dword(&ctx->ac, buffer, vec1, stride - 4, byteoffset, tf_base, - 20, 1, 0, true, false); + 16 + tf_offset, 1, 0, true, false); //TODO store to offchip for TES to read - only if TES reads them if (1) { |