On Tue, May 25, 2010 at 11:57:23AM +0200, Marek Olšák wrote: > The patch looks good but it's r5xx-only. I'll commit this when an r3xx > version is implemented too.
yes I realized that the opcode is R500 only. I've taken a different approach using transformations which works too, but I don't know if it's acceptable. I'm attaching the patch which also handles the SLE case. > > -Marek > > On Mon, May 24, 2010 at 6:00 PM, Gianluca Anzolin > <gianl...@sottospazio.it>wrote: > > > Hello, > > > > Yesterday I was trying to run an example taken from chapter 6 of the book > > OpenGl > > Shading Language with the new gallium driver (I have a RV570 graphic card), > > but > > I got this error when compiling the vertex shader: Unknown opcode 35. > > > > Digging in the source code I found that the opcode 35 is for the > operator > > between two vectors (RC_OPCODE_SGT). It's related to the following vertex > > shader code: > > > > if (diffuse > 0.0) > > { > > spec = max(dot(reflectVec, viewVec), 0.0); > > spec = pow(spec, 16.0); > > } > > > > > > > > When I changed the comparison to ">=" the problem disappeared. Infact there > > is > > no switch case for RC_OPCODE_SGT in the file r3xx_vertprog.c. I added that > > case > > to the switch statement (see the patch attached) and I got it working even > > with > > the ">" operator. > > > > I hope the patch is correct, if there is a better fix I'd really like to > > know. > > > > Thanks, > > > > Gianluca > > > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > >
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c index 5ba2c29..774657a 100644 --- a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c +++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c @@ -579,6 +579,20 @@ static void transform_r300_vertex_fix_LIT(struct radeon_compiler* c, inst->U.I.SrcReg[0] = srcreg(RC_FILE_TEMPORARY, tempreg); } +static void transform_r300_vertex_SGT(struct radeon_compiler* c, + struct rc_instruction* inst) +{ + transform_SGT(c, inst); + transform_r300_vertex_CMP(c, inst->Prev); +} + +static void transform_r300_vertex_SLE(struct radeon_compiler* c, + struct rc_instruction* inst) +{ + transform_SLE(c, inst); + transform_r300_vertex_CMP(c, inst->Prev); +} + /** * For use with radeonLocalTransform, this transforms non-native ALU * instructions of the r300 up to r500 vertex engine. @@ -600,6 +614,8 @@ int r300_transform_vertex_alu( case RC_OPCODE_SUB: transform_SUB(c, inst); return 1; case RC_OPCODE_SWZ: transform_SWZ(c, inst); return 1; case RC_OPCODE_XPD: transform_XPD(c, inst); return 1; + case RC_OPCODE_SGT: transform_r300_vertex_SGT(c, inst); return 1; + case RC_OPCODE_SLE: transform_r300_vertex_SLE(c, inst); return 1; default: return 0; }
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev