Mesa (master): i965: Fix the test for variable indexing of shader inputs.
Eric Anholt
anholt at kemper.freedesktop.org
Thu Aug 26 16:55:18 UTC 2010
Module: Mesa
Branch: master
Commit: b72c85df5567713293452db6b60c537cd913dcc1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b72c85df5567713293452db6b60c537cd913dcc1
Author: Eric Anholt <eric at anholt.net>
Date: Thu Aug 26 09:10:19 2010 -0700
i965: Fix the test for variable indexing of shader inputs.
Shader inputs appear in source registers, not dst registers. Catches
unsupported shaders in glsl-fs-varying-array and Humus
RaytracedShadows.
---
src/mesa/drivers/dri/i965/brw_program.c | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c
index 1cdc8c6..d5b7bee 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -168,6 +168,9 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
* See piglit glsl-{vs,fs}-functions-[23] tests.
*/
for (i = 0; i < prog->NumInstructions; i++) {
+ struct prog_instruction *inst = prog->Instructions + i;
+ int r;
+
if (prog->Instructions[i].Opcode == OPCODE_CAL) {
shader_error(ctx, prog,
"i965 driver doesn't yet support uninlined function "
@@ -183,12 +186,15 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
return GL_FALSE;
}
- if (prog->Instructions[i].DstReg.RelAddr &&
- prog->Instructions[i].DstReg.File == PROGRAM_INPUT) {
- shader_error(ctx, prog,
- "Variable indexing of shader inputs unsupported\n");
- return GL_FALSE;
+ for (r = 0; r < _mesa_num_inst_src_regs(inst->Opcode); r++) {
+ if (prog->Instructions[i].SrcReg[r].RelAddr &&
+ prog->Instructions[i].SrcReg[r].File == PROGRAM_INPUT) {
+ shader_error(ctx, prog,
+ "Variable indexing of shader inputs unsupported\n");
+ return GL_FALSE;
+ }
}
+
if (prog->Instructions[i].DstReg.RelAddr &&
prog->Instructions[i].DstReg.File == PROGRAM_OUTPUT) {
shader_error(ctx, prog,
More information about the mesa-commit
mailing list