diff options
author | Marek Olšák <[email protected]> | 2019-06-21 21:06:16 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2019-07-03 15:51:13 -0400 |
commit | 6cf2fb1fc48974d72a37bbe3cc77a69244a2855a (patch) | |
tree | ff115b49c3874cedb7138a7bef13f0614e97551b /src/gallium | |
parent | 32694456f7d87df0d24a7d6a0746ae7d35c6f63a (diff) |
radeonsi/gfx10: unpack GS invocation ID
Acked-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 27a5aa3b5ee..1dec250e6d3 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2044,12 +2044,19 @@ void si_load_system_value(struct si_shader_context *ctx, break; case TGSI_SEMANTIC_INVOCATIONID: - if (ctx->type == PIPE_SHADER_TESS_CTRL) + if (ctx->type == PIPE_SHADER_TESS_CTRL) { value = unpack_llvm_param(ctx, ctx->abi.tcs_rel_ids, 8, 5); - else if (ctx->type == PIPE_SHADER_GEOMETRY) - value = ctx->abi.gs_invocation_id; - else + } else if (ctx->type == PIPE_SHADER_GEOMETRY) { + if (ctx->screen->info.chip_class >= GFX10) { + value = LLVMBuildAnd(ctx->ac.builder, + ctx->abi.gs_invocation_id, + LLVMConstInt(ctx->i32, 127, 0), ""); + } else { + value = ctx->abi.gs_invocation_id; + } + } else { assert(!"INVOCATIONID not implemented"); + } break; case TGSI_SEMANTIC_POSITION: |