mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-28 18:10:34 +00:00
mesa: Fix fixed function spot lighting on newer hardware (again)
This was first fixed in commitb3f9c5c
and then broken again in commitfe2d2c7
, which removed the abs modifier from input registers. v2: Don't change the size of struct ureg. Cc: "12.0" <mesa-stable@lists.freedesktop.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91342 Reviewed-by: Matt Turner <mattst88@gmail.com> Signed-off-by: Daniel Scharrer <daniel@constexpr.org>
This commit is contained in:
parent
a9033d1dc1
commit
16ef7ab5c1
@ -297,10 +297,9 @@ struct ureg {
|
||||
GLuint file:4;
|
||||
GLint idx:9; /* relative addressing may be negative */
|
||||
/* sizeof(idx) should == sizeof(prog_src_reg::Index) */
|
||||
GLuint abs:1;
|
||||
GLuint negate:1;
|
||||
GLuint swz:12;
|
||||
GLuint pad:5;
|
||||
GLuint pad:6;
|
||||
};
|
||||
|
||||
|
||||
@ -329,7 +328,6 @@ static const struct ureg undef = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
@ -348,7 +346,6 @@ static struct ureg make_ureg(GLuint file, GLint idx)
|
||||
struct ureg reg;
|
||||
reg.file = file;
|
||||
reg.idx = idx;
|
||||
reg.abs = 0;
|
||||
reg.negate = 0;
|
||||
reg.swz = SWIZZLE_NOOP;
|
||||
reg.pad = 0;
|
||||
@ -356,15 +353,6 @@ static struct ureg make_ureg(GLuint file, GLint idx)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static struct ureg absolute( struct ureg reg )
|
||||
{
|
||||
reg.abs = 1;
|
||||
reg.negate = 0;
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
||||
static struct ureg negate( struct ureg reg )
|
||||
{
|
||||
reg.negate ^= 1;
|
||||
@ -965,7 +953,8 @@ static struct ureg calculate_light_attenuation( struct tnl_program *p,
|
||||
|
||||
emit_op2(p, OPCODE_DP3, spot, 0, negate(VPpli), spot_dir_norm);
|
||||
emit_op2(p, OPCODE_SLT, slt, 0, swizzle1(spot_dir_norm,W), spot);
|
||||
emit_op2(p, OPCODE_POW, spot, 0, absolute(spot), swizzle1(attenuation, W));
|
||||
emit_op1(p, OPCODE_ABS, spot, 0, spot);
|
||||
emit_op2(p, OPCODE_POW, spot, 0, spot, swizzle1(attenuation, W));
|
||||
emit_op2(p, OPCODE_MUL, att, 0, slt, spot);
|
||||
|
||||
release_temp(p, spot);
|
||||
|
Loading…
Reference in New Issue
Block a user