mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 08:50:24 +01:00
r300/compiler: fix shadow sampling with swizzled coords
Taking the W component from coords directly ignores swizzling. Instead,
take the component which is mapped to W in the TEX instruction parameter.
The same for Z.
NOTE: This is a candidate for the 7.9 branch.
(cherry picked from commit 7128e1625b)
Conflicts:
src/mesa/drivers/dri/r300/compiler/radeon_program_tex.c
This commit is contained in:
parent
5906b9ac51
commit
5c3be43cd2
1 changed files with 5 additions and 3 deletions
|
|
@ -174,16 +174,18 @@ int radeonTransformTEX(
|
|||
inst_rcp->U.I.DstReg.Index = tmp_recip_w;
|
||||
inst_rcp->U.I.DstReg.WriteMask = RC_MASK_W;
|
||||
inst_rcp->U.I.SrcReg[0] = inst->U.I.SrcReg[0];
|
||||
inst_rcp->U.I.SrcReg[0].Swizzle = RC_SWIZZLE_WWWW;
|
||||
inst_rcp->U.I.SrcReg[0].Swizzle =
|
||||
RC_MAKE_SWIZZLE_SMEAR(GET_SWZ(inst->U.I.SrcReg[0].Swizzle, 3));
|
||||
}
|
||||
|
||||
/* Perspective-divide r by W (if it's TXP) and add the texture sample (see below). */
|
||||
/* Perspective-divide Z by W (if it's TXP) and add the texture sample (see below). */
|
||||
tmp_sum = rc_find_free_temporary(c);
|
||||
inst_mad = rc_insert_new_instruction(c, inst_rcp ? inst_rcp : inst);
|
||||
inst_mad->U.I.DstReg.File = RC_FILE_TEMPORARY;
|
||||
inst_mad->U.I.DstReg.Index = tmp_sum;
|
||||
inst_mad->U.I.SrcReg[0] = inst->U.I.SrcReg[0];
|
||||
inst_mad->U.I.SrcReg[0].Swizzle = RC_SWIZZLE_ZZZZ;
|
||||
inst_mad->U.I.SrcReg[0].Swizzle =
|
||||
RC_MAKE_SWIZZLE_SMEAR(GET_SWZ(inst->U.I.SrcReg[0].Swizzle, 2));
|
||||
if (inst->U.I.Opcode == RC_OPCODE_TXP) {
|
||||
inst_mad->U.I.Opcode = RC_OPCODE_MAD;
|
||||
inst_mad->U.I.SrcReg[1].File = RC_FILE_TEMPORARY;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue