Mesa (master): r300g: move GA_POINT_MINMAX back to rs_state

Marek Olšák mareko at kemper.freedesktop.org
Sat May 8 21:25:51 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sat May  8 20:52:24 2010 +0200

r300g: move GA_POINT_MINMAX back to rs_state

This basically reverts commit 74f94e8fdfe035fa68acdc19e6b0afc2957a4264.

---

 src/gallium/drivers/r300/r300_context.h |    1 +
 src/gallium/drivers/r300/r300_emit.c    |    6 +++---
 src/gallium/drivers/r300/r300_state.c   |   16 +++++++++++++---
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h
index b3c5459..dd16565 100644
--- a/src/gallium/drivers/r300/r300_context.h
+++ b/src/gallium/drivers/r300/r300_context.h
@@ -94,6 +94,7 @@ struct r300_rs_state {
     uint32_t vap_control_status;    /* R300_VAP_CNTL_STATUS: 0x2140 */
     uint32_t antialiasing_config;   /* R300_GB_AA_CONFIG: 0x4020 */
     uint32_t point_size;            /* R300_GA_POINT_SIZE: 0x421c */
+    uint32_t point_minmax;          /* R300_GA_POINT_MINMAX: 0x4230 */
     uint32_t line_control;          /* R300_GA_LINE_CNTL: 0x4234 */
     float depth_scale;            /* R300_SU_POLY_OFFSET_FRONT_SCALE: 0x42a4 */
                                   /* R300_SU_POLY_OFFSET_BACK_SCALE: 0x42ac */
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index f3be274..9344b53 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -525,8 +525,6 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
         OUT_CS(((fb->width  + 1440-1) << R300_SCISSORS_X_SHIFT) |
                ((fb->height + 1440-1) << R300_SCISSORS_Y_SHIFT));
     }
-    OUT_CS_REG(R300_GA_POINT_MINMAX,
-        (MAX2(fb->width, fb->height) * 6) << R300_GA_POINT_MINMAX_MAX_SHIFT);
     END_CS;
 }
 
@@ -667,7 +665,9 @@ void r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state)
     OUT_CS_REG(R300_GB_AA_CONFIG, rs->antialiasing_config);
 
     OUT_CS_REG(R300_GA_POINT_SIZE, rs->point_size);
-    OUT_CS_REG(R300_GA_LINE_CNTL, rs->line_control);
+    OUT_CS_REG_SEQ(R300_GA_POINT_MINMAX, 2);
+    OUT_CS(rs->point_minmax);
+    OUT_CS(rs->line_control);
 
     if (rs->polygon_offset_enable) {
         scale = rs->depth_scale * 12;
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index af5bf44..5a65f0c 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -616,7 +616,7 @@ static void
     memcpy(r300->fb_state.state, state, sizeof(struct pipe_framebuffer_state));
 
     r300->fb_state.size = (10 * state->nr_cbufs) + (2 * (4 - state->nr_cbufs)) +
-                          (state->zsbuf ? 10 : 0) + 11;
+                          (state->zsbuf ? 10 : 0) + 9;
 
     /* Polygon offset depends on the zbuffer bit depth. */
     if (state->zsbuf && r300->polygon_offset_enabled) {
@@ -722,6 +722,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
 {
     struct r300_rs_state* rs = CALLOC_STRUCT(r300_rs_state);
     int i;
+    float psiz;
 
     /* Copy rasterizer state for Draw. */
     rs->rs = *state;
@@ -737,9 +738,18 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
         rs->vap_control_status |= R300_VAP_TCL_BYPASS;
     }
 
-    rs->point_size = pack_float_16_6x(state->point_size) |
+    /* Point size width and height. */
+    rs->point_size =
+        pack_float_16_6x(state->point_size) |
         (pack_float_16_6x(state->point_size) << R300_POINTSIZE_X_SHIFT);
 
+    /* Point size clamping. */
+    psiz = pipe->screen->get_paramf(pipe->screen,
+                                    PIPE_CAP_MAX_POINT_WIDTH);
+    rs->point_minmax =
+        (pack_float_16_6x(psiz)) << R300_GA_POINT_MINMAX_MAX_SHIFT;
+
+    /* Line control. */
     rs->line_control = pack_float_16_6x(state->line_width) |
         R300_GA_LINE_CNTL_END_TYPE_COMP;
 
@@ -864,7 +874,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
     }
 
     UPDATE_STATE(state, r300->rs_state);
-    r300->rs_state.size = 26 + (r300->polygon_offset_enabled ? 5 : 0);
+    r300->rs_state.size = 27 + (r300->polygon_offset_enabled ? 5 : 0);
 
     if (last_sprite_coord_enable != r300->sprite_coord_enable) {
         r300->rs_block_state.dirty = TRUE;




More information about the mesa-commit mailing list