diff options
author | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2013-05-14 23:42:39 +0200 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2014-05-29 15:15:10 -0700 |
commit | 8b74c2bdbd21d9bf8159e25dd05c64b792ad89ac (patch) | |
tree | 01ddfe17b7618527b309d7b88255e82828b8cf6c | |
parent | 4afbd9b0e29fa7d45f6d9168b52d9b207d5b61a8 (diff) |
nv50: setup scissors on clear_render_target/depth_stencil
[imirkin: add logic to also clear the "regular" scissors]
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 200382be8576c43a668724c77b0f1b5a80b3adba)
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_surface.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_surface.c b/src/gallium/drivers/nouveau/nv50/nv50_surface.c index 1f3752717ab..6e68fb8a18e 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_surface.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_surface.c @@ -288,6 +288,14 @@ nv50_clear_render_target(struct pipe_context *pipe, PUSH_REFN(push, bo, mt->base.domain | NOUVEAU_BO_WR); + BEGIN_NV04(push, NV50_3D(SCREEN_SCISSOR_HORIZ), 2); + PUSH_DATA (push, ( width << 16) | dstx); + PUSH_DATA (push, (height << 16) | dsty); + BEGIN_NV04(push, NV50_3D(SCISSOR_HORIZ(0)), 2); + PUSH_DATA (push, 8192 << 16); + PUSH_DATA (push, 8192 << 16); + nv50->scissors_dirty |= 1; + BEGIN_NV04(push, NV50_3D(RT_CONTROL), 1); PUSH_DATA (push, 1); BEGIN_NV04(push, NV50_3D(RT_ADDRESS_HIGH(0)), 5); @@ -325,7 +333,7 @@ nv50_clear_render_target(struct pipe_context *pipe, (z << NV50_3D_CLEAR_BUFFERS_LAYER__SHIFT)); } - nv50->dirty |= NV50_NEW_FRAMEBUFFER; + nv50->dirty |= NV50_NEW_FRAMEBUFFER | NV50_NEW_SCISSOR; } static void @@ -364,6 +372,14 @@ nv50_clear_depth_stencil(struct pipe_context *pipe, PUSH_REFN(push, bo, mt->base.domain | NOUVEAU_BO_WR); + BEGIN_NV04(push, NV50_3D(SCREEN_SCISSOR_HORIZ), 2); + PUSH_DATA (push, ( width << 16) | dstx); + PUSH_DATA (push, (height << 16) | dsty); + BEGIN_NV04(push, NV50_3D(SCISSOR_HORIZ(0)), 2); + PUSH_DATA (push, 8192 << 16); + PUSH_DATA (push, 8192 << 16); + nv50->scissors_dirty |= 1; + BEGIN_NV04(push, NV50_3D(ZETA_ADDRESS_HIGH), 5); PUSH_DATAh(push, bo->offset + sf->offset); PUSH_DATA (push, bo->offset + sf->offset); @@ -390,7 +406,7 @@ nv50_clear_depth_stencil(struct pipe_context *pipe, (z << NV50_3D_CLEAR_BUFFERS_LAYER__SHIFT)); } - nv50->dirty |= NV50_NEW_FRAMEBUFFER; + nv50->dirty |= NV50_NEW_FRAMEBUFFER | NV50_NEW_SCISSOR; } void |