diff --git a/.pick_status.json b/.pick_status.json index 7667fd188db..efdfe767b14 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1004,7 +1004,7 @@ "description": "r600: fix pa_su_vtx_cntl rounding mode", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/drivers/r600/ci/r600-rv770-fails.txt b/src/gallium/drivers/r600/ci/r600-rv770-fails.txt index 22249de873a..87997c0d1a0 100644 --- a/src/gallium/drivers/r600/ci/r600-rv770-fails.txt +++ b/src/gallium/drivers/r600/ci/r600-rv770-fails.txt @@ -825,10 +825,6 @@ spec@ext_framebuffer_multisample@no-color 8 depth-computed combined,Fail spec@ext_framebuffer_multisample@no-color 8 depth-computed single,Fail spec@ext_framebuffer_multisample@no-color 8 stencil combined,Fail spec@ext_framebuffer_multisample@no-color 8 stencil single,Fail -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail spec@ext_framebuffer_object@fbo-blending-formats,Fail spec@ext_framebuffer_object@fbo-blending-formats@3,Fail diff --git a/src/gallium/drivers/r600/ci/r600-turks-fails.txt b/src/gallium/drivers/r600/ci/r600-turks-fails.txt index 7c5dc32f4dd..13a10f3cbb4 100644 --- a/src/gallium/drivers/r600/ci/r600-turks-fails.txt +++ b/src/gallium/drivers/r600/ci/r600-turks-fails.txt @@ -1277,14 +1277,6 @@ spec@ext_framebuffer_multisample@accuracy all_samples stencil_resolve small dept spec@ext_framebuffer_multisample@blit-mismatched-formats,Fail -spec@ext_framebuffer_multisample@interpolation 6 centroid-edges,Fail -spec@ext_framebuffer_multisample@interpolation 8 centroid-edges,Fail - -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail - spec@ext_framebuffer_object@fbo-blending-formats,Fail spec@ext_framebuffer_object@fbo-blending-formats@3,Fail spec@ext_framebuffer_object@fbo-blending-formats@GL_RGB,Fail diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index ad4fa3a9fed..c8a028d80c4 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -552,10 +552,12 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx, if (rctx->b.gfx_level == CAYMAN) { r600_store_context_reg(&rs->buffer, CM_R_028BE4_PA_SU_VTX_CNTL, S_028C08_PIX_CENTER_HALF(state->half_pixel_center) | + S_028C08_ROUND_MODE(V_028C08_X_ROUND_TO_EVEN) | S_028C08_QUANT_MODE(V_028C08_X_1_256TH)); } else { r600_store_context_reg(&rs->buffer, R_028C08_PA_SU_VTX_CNTL, S_028C08_PIX_CENTER_HALF(state->half_pixel_center) | + S_028C08_ROUND_MODE(V_028C08_X_ROUND_TO_EVEN) | S_028C08_QUANT_MODE(V_028C08_X_1_256TH)); } diff --git a/src/gallium/drivers/r600/evergreend.h b/src/gallium/drivers/r600/evergreend.h index e222697e968..02456c51a75 100644 --- a/src/gallium/drivers/r600/evergreend.h +++ b/src/gallium/drivers/r600/evergreend.h @@ -2402,6 +2402,12 @@ #define S_028C08_PIX_CENTER_HALF(x) (((unsigned)(x) & 0x1) << 0) #define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1) #define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE +#define S_028C08_ROUND_MODE(x) (((unsigned)(x) & 0x03) << 1) +#define G_028C08_ROUND_MODE(x) (((x) >> 1) & 0x03) +#define V_028C08_X_TRUNCATE 0x00 +#define V_028C08_X_ROUND 0x01 +#define V_028C08_X_ROUND_TO_EVEN 0x02 +#define V_028C08_X_ROUND_TO_ODD 0x03 #define S_028C08_QUANT_MODE(x) (((unsigned)(x) & 0x7) << 3) #define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7) #define C_028C08_QUANT_MODE 0xFFFFFFC7 diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 1d94da82da0..69b4505bc2a 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -539,6 +539,7 @@ static void *r600_create_rs_state(struct pipe_context *ctx, r600_store_context_reg(&rs->buffer, R_028A4C_PA_SC_MODE_CNTL, sc_mode_cntl); r600_store_context_reg(&rs->buffer, R_028C08_PA_SU_VTX_CNTL, S_028C08_PIX_CENTER_HALF(state->half_pixel_center) | + S_028C08_ROUND_MODE(V_028C08_X_ROUND_TO_EVEN) | S_028C08_QUANT_MODE(V_028C08_X_1_256TH)); r600_store_context_reg(&rs->buffer, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp)); diff --git a/src/gallium/drivers/r600/r600d.h b/src/gallium/drivers/r600/r600d.h index 1eb0a7422c5..db7e7bf05af 100644 --- a/src/gallium/drivers/r600/r600d.h +++ b/src/gallium/drivers/r600/r600d.h @@ -2279,6 +2279,12 @@ #define S_028C08_PIX_CENTER_HALF(x) (((unsigned)(x) & 0x1) << 0) #define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1) #define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE +#define S_028C08_ROUND_MODE(x) (((unsigned)(x) & 0x03) << 1) +#define G_028C08_ROUND_MODE(x) (((x) >> 1) & 0x03) +#define V_028C08_X_TRUNCATE 0x00 +#define V_028C08_X_ROUND 0x01 +#define V_028C08_X_ROUND_TO_EVEN 0x02 +#define V_028C08_X_ROUND_TO_ODD 0x03 #define S_028C08_QUANT_MODE(x) (((unsigned)(x) & 0x7) << 3) #define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7) #define C_028C08_QUANT_MODE 0xFFFFFFC7