Signed-off-by: Qiang Yu <yuq...@gmail.com> --- src/mesa/program/prog_statevars.c | 35 +++++++++++++++++++++++++++++++ src/mesa/program/prog_statevars.h | 2 ++ 2 files changed, 37 insertions(+)
diff --git a/src/mesa/program/prog_statevars.c b/src/mesa/program/prog_statevars.c index 3bbe451399f..ce74dbe317d 100644 --- a/src/mesa/program/prog_statevars.c +++ b/src/mesa/program/prog_statevars.c @@ -41,6 +41,7 @@ #include "prog_parameter.h" #include "main/samplerobj.h" #include "main/framebuffer.h" +#include "main/viewport.h" #define ONE_DIV_SQRT_LN2 (1.201122408786449815) @@ -602,6 +603,30 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index16 state[], ctx->Color.BlendEnabled, ctx->Color._AdvancedBlendMode); return; + case STATE_VIEWPORT_SCALE: + { + float scale[3]; + _mesa_get_viewport_xform(ctx, 0, scale, NULL); + if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) + scale[1] = -scale[1]; + value[0] = scale[0]; + value[1] = scale[1]; + value[2] = scale[2]; + return; + } + + case STATE_VIEWPORT_TRANSLATE: + { + float translate[3]; + _mesa_get_viewport_xform(ctx, 0, NULL, translate); + if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) + translate[1] = (GLfloat)ctx->DrawBuffer->Height - translate[1]; + value[0] = translate[0]; + value[1] = translate[1]; + value[2] = translate[2]; + return; + } + /* XXX: make sure new tokens added here are also handled in the * _mesa_program_state_flags() switch, below. */ @@ -713,6 +738,10 @@ _mesa_program_state_flags(const gl_state_index16 state[STATE_LENGTH]) case STATE_ADVANCED_BLENDING_MODE: return _NEW_COLOR; + case STATE_VIEWPORT_SCALE: + case STATE_VIEWPORT_TRANSLATE: + return _NEW_BUFFERS | _NEW_VIEWPORT | _NEW_TRANSFORM; + default: /* unknown state indexes are silently ignored and * no flag set, since it is handled by the driver. @@ -919,6 +948,12 @@ append_token(char *dst, gl_state_index k) case STATE_ADVANCED_BLENDING_MODE: append(dst, "AdvancedBlendingMode"); break; + case STATE_VIEWPORT_SCALE: + append(dst, "viewportScale"); + break; + case STATE_VIEWPORT_TRANSLATE: + append(dst, "viewportTranslate"); + break; default: /* probably STATE_INTERNAL_DRIVER+i (driver private state) */ append(dst, "driverState"); diff --git a/src/mesa/program/prog_statevars.h b/src/mesa/program/prog_statevars.h index f28d2bb4a37..0d7a255b8ee 100644 --- a/src/mesa/program/prog_statevars.h +++ b/src/mesa/program/prog_statevars.h @@ -129,6 +129,8 @@ typedef enum gl_state_index_ { * currently active advanced blending equation, or zero if disabled. */ STATE_ADVANCED_BLENDING_MODE, + STATE_VIEWPORT_SCALE, + STATE_VIEWPORT_TRANSLATE, STATE_INTERNAL_DRIVER /* first available state index for drivers (must be last) */ } gl_state_index; -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev