diff options
-rw-r--r-- | src/mesa/shader/program.c | 11 | ||||
-rw-r--r-- | src/mesa/shader/program.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index 6fd69dd982f..f999e0695ba 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -917,6 +917,15 @@ _mesa_fetch_state(GLcontext *ctx, const enum state_index state[], case STATE_NORMAL_SCALE: ASSIGN_4V(value, ctx->_ModelViewInvScale, 0, 0, 1); break; + case STATE_TEXRECT_SCALE: { + const int unit = (int) state[2]; + const struct gl_texture_object *texObj = ctx->Texture.Unit[unit]._Current; + if (texObj) { + struct gl_texture_image *texImage = texObj->Image[0][0]; + ASSIGN_4V(value, 1.0 / texImage->Width, 1.0 / texImage->Height, 0, 1); + } + break; + } default: _mesa_problem(ctx, "Bad state switch in _mesa_fetch_state()"); return; @@ -988,6 +997,8 @@ static GLuint make_state_flags(const GLint state[]) switch (state[1]) { case STATE_NORMAL_SCALE: return _NEW_MODELVIEW; + case STATE_TEXRECT_SCALE: + return _NEW_TEXTURE; default: _mesa_problem(NULL, "unexpected int. state in make_state_flags()"); return 0; diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h index 5b73965dcaf..cf3b1cc0990 100644 --- a/src/mesa/shader/program.h +++ b/src/mesa/shader/program.h @@ -188,6 +188,7 @@ enum state_index { STATE_INTERNAL, /* Mesa additions */ STATE_NORMAL_SCALE, + STATE_TEXRECT_SCALE, STATE_POSITION_NORMALIZED /* normalized light position */ }; |