r600g: adjust QUANT_MODE for higher precision
authorVadim Girlin <vadimgirlin@gmail.com>
Mon, 3 Sep 2012 20:18:13 +0000 (00:18 +0400)
committerVadim Girlin <vadimgirlin@gmail.com>
Mon, 3 Sep 2012 20:18:13 +0000 (00:18 +0400)
Use 1/256 for R6xx/7xx, 1/4096 for evergreen, instead of default 1/16.

Helps to pass some piglit tests (fbo, multisample).

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/evergreend.h
src/gallium/drivers/r600/r600_state.c
src/gallium/drivers/r600/r600d.h

index 28a83f299b4b2301ab8c5151f95517477989a948..bda8ed5dc2dd44e526ebc8561c27f8e82060f3d5 100644 (file)
@@ -920,7 +920,8 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
                                        S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
        } else {
                r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
-                                       S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
+                                       S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
+                                       S_028C08_QUANT_MODE(V_028C08_X_1_4096TH));
        }
        r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp));
        r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,
index 91d78f81ee12ae36c73fd6f1604f8c99251858ab..e4d72f5411e61a2ef82aa3df91a83fee7b33584a 100644 (file)
 #define   S_028C08_PIX_CENTER_HALF(x)                  (((x) & 0x1) << 0)
 #define   G_028C08_PIX_CENTER_HALF(x)                  (((x) >> 0) & 0x1)
 #define   C_028C08_PIX_CENTER_HALF                     0xFFFFFFFE
+#define   S_028C08_QUANT_MODE(x)                       (((x) & 0x7) << 3)
+#define   G_028C08_QUANT_MODE(x)                       (((x) >> 3) & 0x7)
+#define   C_028C08_QUANT_MODE                          0xFFFFFFC7
+#define     V_028C08_X_1_16TH                          0x00
+#define     V_028C08_X_1_8TH                           0x01
+#define     V_028C08_X_1_4TH                           0x02
+#define     V_028C08_X_1_2                             0x03
+#define     V_028C08_X_1                               0x04
+#define     V_028C08_X_1_256TH                         0x05
+#define     V_028C08_X_1_1024TH                        0x06
+#define     V_028C08_X_1_4096TH                        0x07
 #define R_028C0C_PA_CL_GB_VERT_CLIP_ADJ              0x00028C0C
 #define R_028C10_PA_CL_GB_VERT_DISC_ADJ              0x00028C10
 #define R_028C14_PA_CL_GB_HORZ_CLIP_ADJ              0x00028C14
index 26db24b164479f5e446d6023bd311ad5d2eeeded..53bbdd9da7d7fad027f02456555c4f23e6f3ca0c 100644 (file)
@@ -948,7 +948,8 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
        r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL, sc_mode_cntl);
 
        r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
-                               S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
+                               S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
+                               S_028C08_QUANT_MODE(V_028C08_X_1_256TH));
 
        r600_pipe_state_add_reg(rstate, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp));
        r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,
index a6da0a2fbadabc52856aab186fb893623f8e8d34..28423e1f5186631b9639d6ec500d22e6819d9715 100644 (file)
 #define   S_028C08_PIX_CENTER_HALF(x)                  (((x) & 0x1) << 0)
 #define   G_028C08_PIX_CENTER_HALF(x)                  (((x) >> 0) & 0x1)
 #define   C_028C08_PIX_CENTER_HALF                     0xFFFFFFFE
+#define   S_028C08_QUANT_MODE(x)                       (((x) & 0x7) << 3)
+#define   G_028C08_QUANT_MODE(x)                       (((x) >> 3) & 0x7)
+#define   C_028C08_QUANT_MODE                          0xFFFFFFC7
+#define     V_028C08_X_1_16TH                          0x00
+#define     V_028C08_X_1_8TH                           0x01
+#define     V_028C08_X_1_4TH                           0x02
+#define     V_028C08_X_1_2                             0x03
+#define     V_028C08_X_1                               0x04
+#define     V_028C08_X_1_256TH                         0x05
 #define R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX           0x028C1C
 #define R_028C48_PA_SC_AA_MASK                       0x028C48
 #define R_028810_PA_CL_CLIP_CNTL                     0x028810