mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 05:10:17 +01:00
freedreno/ir3: insert mov if same instruction in the outputs.
For example,
result0 = texture(sampler[indexBase + 5], coords);
result1 = texture(sampler[indexBase + 0], coords);
result2 = texture(sampler[indexBase + 0], coords);
out_result0 = result0;
out_result1 = result1;
out_result2 = result2;
In this kind of case we need to insert an extra mov to the outputs
so that the result could be assigned to each register respectively.
Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
b4da2f6667
commit
2454742a84
1 changed files with 14 additions and 0 deletions
|
|
@ -3679,6 +3679,20 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
|
||||
ir3_cp(ir, so);
|
||||
|
||||
/* Insert mov if there's same instruction for each output.
|
||||
* eg. dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.vertex.sampler2dshadow
|
||||
*/
|
||||
for (int i = ir->noutputs - 1; i >= 0; i--) {
|
||||
if (!ir->outputs[i])
|
||||
continue;
|
||||
for (unsigned j = 0; j < i; j++) {
|
||||
if (ir->outputs[i] == ir->outputs[j]) {
|
||||
ir->outputs[i] =
|
||||
ir3_MOV(ir->outputs[i]->block, ir->outputs[i], TYPE_F32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fd_mesa_debug & FD_DBG_OPTMSGS) {
|
||||
printf("BEFORE GROUPING:\n");
|
||||
ir3_print(ir);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue