radeonsi/gfx9: don't read LS out vertex stride from an SGPR in monolithic HS

-44 bytes in a monolithic LS-HS binary.

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák 2017-09-05 19:02:13 +02:00
parent f974bb768b
commit 89bf8668c2
2 changed files with 11 additions and 1 deletions

View file

@ -408,6 +408,11 @@ static LLVMValueRef get_tcs_in_vertex_dw_stride(struct si_shader_context *ctx)
return LLVMConstInt(ctx->i32, stride * 4, 0);
case PIPE_SHADER_TESS_CTRL:
if (ctx->screen->b.chip_class >= GFX9 &&
ctx->shader->is_monolithic) {
stride = util_last_bit64(ctx->shader->key.part.tcs.ls->outputs_written);
return LLVMConstInt(ctx->i32, stride * 4, 0);
}
return unpack_param(ctx, ctx->param_vs_state_bits, 24, 8);
default:

View file

@ -1291,7 +1291,12 @@ static inline void si_shader_selector_key(struct pipe_context *ctx,
* - remove the fixup for unused input VGPRs
*/
key->part.tcs.ls_prolog.ls_vgpr_fix = sctx->ls_vgpr_fix;
key->opt.prefer_mono = sctx->ls_vgpr_fix;
/* The LS output / HS input layout can be communicated
* directly instead of via user SGPRs for merged LS-HS.
* The LS VGPR fix prefers this too.
*/
key->opt.prefer_mono = 1;
}
key->part.tcs.epilog.prim_mode =