mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
mesa: fix prog_optimize.c assertions triggered by SWZ opcode
The SWZ instruction can have swizzle terms >4 (SWIZZLE_ZERO, SWIZZLE_ONE).
These swizzle terms caused a few assertions to fail.
This started happening after the commit "mesa: Actually use the Mesa IR
optimizer for ARB programs." when replaying some apitrace files.
A new piglit test (tests/asmparsertest/shaders/ARBfp1.0/swz-08.txt)
exercises this.
Cc: "10.3" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
(cherry picked from commit 7b2c703244)
This commit is contained in:
parent
27f70a9273
commit
9599cd6a2f
1 changed files with 4 additions and 5 deletions
|
|
@ -114,7 +114,6 @@ get_src_arg_mask(const struct prog_instruction *inst,
|
||||||
read_mask = 0x0;
|
read_mask = 0x0;
|
||||||
for (comp = 0; comp < 4; ++comp) {
|
for (comp = 0; comp < 4; ++comp) {
|
||||||
const GLuint coord = GET_SWZ(inst->SrcReg[arg].Swizzle, comp);
|
const GLuint coord = GET_SWZ(inst->SrcReg[arg].Swizzle, comp);
|
||||||
ASSERT(coord < 4);
|
|
||||||
if (channel_mask & (1 << comp) && coord <= SWIZZLE_W)
|
if (channel_mask & (1 << comp) && coord <= SWIZZLE_W)
|
||||||
read_mask |= 1 << coord;
|
read_mask |= 1 << coord;
|
||||||
}
|
}
|
||||||
|
|
@ -284,11 +283,11 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
|
||||||
|
|
||||||
for (comp = 0; comp < 4; comp++) {
|
for (comp = 0; comp < 4; comp++) {
|
||||||
const GLuint swz = GET_SWZ(inst->SrcReg[j].Swizzle, comp);
|
const GLuint swz = GET_SWZ(inst->SrcReg[j].Swizzle, comp);
|
||||||
ASSERT(swz < 4);
|
if (swz <= SWIZZLE_W) {
|
||||||
if ((read_mask & (1 << swz)) == 0)
|
if ((read_mask & (1 << swz)) == 0)
|
||||||
continue;
|
continue;
|
||||||
if (swz <= SWIZZLE_W)
|
|
||||||
tempRead[index][swz] = GL_TRUE;
|
tempRead[index][swz] = GL_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue