mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
intel/vec4: Reswizzle VF immediates too
Previously, an instruction like mul(8) vgrf29.xy:F, vgrf25.yxxx:F, [-1F, 1F, 0F, 0F] would get rewritten as mul(8) vgrf0.yz:F, vgrf25.yyxx:F, [-1F, 1F, 0F, 0F] The latter does not produce the correct result. The VF immediate in the second should be either [-1F, -1F, 1F, 1F] or [0F, -1F, 1F, 0F]. This commit produces the former. Fixes:1ee1d8ab46("i965/vec4: Reswizzle sources when necessary.") Reviewed-by: Matt Turner <mattst88@gmail.com> (cherry picked from commit47c2aa5b48)
This commit is contained in:
parent
e9e63bfba8
commit
f6c032c615
1 changed files with 23 additions and 1 deletions
|
|
@ -1204,9 +1204,31 @@ vec4_instruction::reswizzle(int dst_writemask, int swizzle)
|
|||
opcode != BRW_OPCODE_DP3 && opcode != BRW_OPCODE_DP2 &&
|
||||
opcode != VEC4_OPCODE_PACK_BYTES) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (src[i].file == BAD_FILE || src[i].file == IMM)
|
||||
if (src[i].file == BAD_FILE)
|
||||
continue;
|
||||
|
||||
if (src[i].file == IMM) {
|
||||
assert(src[i].type != BRW_REGISTER_TYPE_V &&
|
||||
src[i].type != BRW_REGISTER_TYPE_UV);
|
||||
|
||||
/* Vector immediate types need to be reswizzled. */
|
||||
if (src[i].type == BRW_REGISTER_TYPE_VF) {
|
||||
const unsigned imm[] = {
|
||||
(src[i].ud >> 0) & 0x0ff,
|
||||
(src[i].ud >> 8) & 0x0ff,
|
||||
(src[i].ud >> 16) & 0x0ff,
|
||||
(src[i].ud >> 24) & 0x0ff,
|
||||
};
|
||||
|
||||
src[i] = brw_imm_vf4(imm[BRW_GET_SWZ(swizzle, 0)],
|
||||
imm[BRW_GET_SWZ(swizzle, 1)],
|
||||
imm[BRW_GET_SWZ(swizzle, 2)],
|
||||
imm[BRW_GET_SWZ(swizzle, 3)]);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
src[i].swizzle = brw_compose_swizzle(swizzle, src[i].swizzle);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue