Module: Mesa
Branch: master
Commit: 95fb0bf58dde0b81ce601d3f0477fd1b2a5a28d4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=95fb0bf58dde0b81ce601d3f0477fd1b2a5a28d4

Author: Jerome Glisse <[email protected]>
Date:   Mon Aug  9 11:32:45 2010 -0400

r600g: fix r600 context structure, avoid segfault when no scissor

Signed-off-by: Jerome Glisse <[email protected]>

---

 src/gallium/drivers/r600/r600_context.h |    2 +-
 src/gallium/drivers/r600/r600_state.c   |   17 +++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_context.h 
b/src/gallium/drivers/r600/r600_context.h
index 431f895..c606dbb 100644
--- a/src/gallium/drivers/r600/r600_context.h
+++ b/src/gallium/drivers/r600/r600_context.h
@@ -94,7 +94,7 @@ struct r600_context_hw_states {
        struct radeon_state     *dsa;
        struct radeon_state     *blend;
        struct radeon_state     *viewport;
-       struct radeon_state     *cb[7];
+       struct radeon_state     *cb[8];
        struct radeon_state     *config;
        struct radeon_state     *cb_cntl;
        struct radeon_state     *db;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index ff62108..cad5185 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -836,12 +836,25 @@ static struct radeon_state *r600_rasterizer(struct 
r600_context *rctx)
 static struct radeon_state *r600_scissor(struct r600_context *rctx)
 {
        const struct pipe_scissor_state *state = &rctx->scissor->state.scissor;
+       const struct pipe_framebuffer_state *fb = 
&rctx->framebuffer->state.framebuffer;
        struct r600_screen *rscreen = rctx->screen;
        struct radeon_state *rstate;
+       unsigned minx, maxx, miny, maxy;
        u32 tl, br;
 
-       tl = S_028240_TL_X(state->minx) | S_028240_TL_Y(state->miny) | 
S_028240_WINDOW_OFFSET_DISABLE(1);
-       br = S_028244_BR_X(state->maxx) | S_028244_BR_Y(state->maxy);
+       if (state == NULL) {
+               minx = 0;
+               miny = 0;
+               maxx = fb->cbufs[0]->width;
+               maxy = fb->cbufs[0]->height;
+       } else {
+               minx = state->minx;
+               miny = state->miny;
+               maxx = state->maxx;
+               maxy = state->maxy;
+       }
+       tl = S_028240_TL_X(minx) | S_028240_TL_Y(miny) | 
S_028240_WINDOW_OFFSET_DISABLE(1);
+       br = S_028244_BR_X(maxx) | S_028244_BR_Y(maxy);
        rstate = radeon_state(rscreen->rw, R600_SCISSOR_TYPE, R600_SCISSOR);
        if (rstate == NULL)
                return NULL;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to