diff options
author | Ian Romanick <[email protected]> | 2014-01-09 15:44:58 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2014-01-20 11:31:59 -0800 |
commit | 91ad85187682b16458c6bddbf98e79fa446bc947 (patch) | |
tree | b9f95940bf61a97911df55222be156676d945466 | |
parent | 6d3b1dc150e4bdd462b5320a072e509777ad386a (diff) |
meta: Restore all scissor state
Previously the restore code would enable all scissor rectangles if any
scissor rectangles were enabled on entry to meta. When there is only
one scissor rectangle, this is fine. As soon as a driver supports
multiple viewports, this will be a problem.
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/common/meta.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 9a8f7a5a2d5..3855536ad37 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -933,9 +933,17 @@ _mesa_meta_end(struct gl_context *ctx) } if (state & MESA_META_SCISSOR) { - _mesa_set_enable(ctx, GL_SCISSOR_TEST, save->Scissor.EnableFlags); - _mesa_Scissor(save->Scissor.ScissorArray[0].X, save->Scissor.ScissorArray[0].Y, - save->Scissor.ScissorArray[0].Width, save->Scissor.ScissorArray[0].Height); + unsigned i; + + for (i = 0; i < ctx->Const.MaxViewports; i++) { + _mesa_set_scissor(ctx, i, + save->Scissor.ScissorArray[i].X, + save->Scissor.ScissorArray[i].Y, + save->Scissor.ScissorArray[i].Width, + save->Scissor.ScissorArray[i].Height); + _mesa_set_enablei(ctx, GL_SCISSOR_TEST, i, + (save->Scissor.EnableFlags >> i) & 1); + } } if (state & MESA_META_SHADER) { |