freedreno/ir3: Pre-color GS header and primitive ID
These sysvals have to be unclobbered by VS and in the same registers in both VS and GS, since the chsh from VS to GS doesn't reload the values. We use the pre-color argument to ir3_ra() to always place these values in r0.x and r0.y. Signed-off-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:
parent
ce08fddbbe
commit
c347708bea
|
@ -3172,6 +3172,15 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
}
|
||||
|
||||
ret = ir3_ra(so, ir->inputs, ir->ninputs);
|
||||
} else if (ctx->gs_header) {
|
||||
/* We need to have these values in the same registers between VS and GS
|
||||
* since the VS chains to GS and doesn't get the sysvals redelivered.
|
||||
*/
|
||||
|
||||
ctx->gs_header->regs[0]->num = 0;
|
||||
ctx->primitive_id->regs[0]->num = 1;
|
||||
struct ir3_instruction *precolor[] = { ctx->gs_header, ctx->primitive_id };
|
||||
ret = ir3_ra(so, precolor, ARRAY_SIZE(precolor));
|
||||
} else {
|
||||
ret = ir3_ra(so, NULL, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue