From 609c3e51f5ca8abb15867537997369e7e8a678e3 Mon Sep 17 00:00:00 2001 From: Tiziano Bacocco Date: Tue, 30 Dec 2014 21:33:48 +0100 Subject: [PATCH] nv50,nvc0: implement half_pixel_center LAST_LINE_PIXEL has actually been renamed to PIXEL_CENTER_INTEGER in rnndb; use that method to implement the rasterizer setting, used for st/nine. Signed-off-by: Tiziano Bacocco Reviewed-by: Ilia Mirkin Cc: "10.4" --- src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h | 2 +- src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 -- src/gallium/drivers/nouveau/nv50/nv50_state.c | 9 ++++----- src/gallium/drivers/nouveau/nv50/nv50_stateobj.h | 2 +- src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h | 2 +- src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 -- src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 4 +++- src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h | 2 +- 8 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h b/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h index a2c22c5eaa5..711445f35c7 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h +++ b/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h @@ -1708,7 +1708,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NV50_3D_CULL_FACE_BACK 0x00000405 #define NV50_3D_CULL_FACE_FRONT_AND_BACK 0x00000408 -#define NV50_3D_LINE_LAST_PIXEL 0x00001924 +#define NV50_3D_PIXEL_CENTER_INTEGER 0x00001924 #define NVA3_3D_FP_MULTISAMPLE 0x00001928 #define NVA3_3D_FP_MULTISAMPLE_EXPORT_SAMPLE_MASK 0x00000001 diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index 5c1a21d2731..ff087341de1 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c @@ -462,8 +462,6 @@ nv50_screen_init_hwctx(struct nv50_screen *screen) PUSH_DATA (push, 0); BEGIN_NV04(push, NV50_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1); PUSH_DATA (push, 1); - BEGIN_NV04(push, NV50_3D(LINE_LAST_PIXEL), 1); - PUSH_DATA (push, 0); BEGIN_NV04(push, NV50_3D(BLEND_SEPARATE_ALPHA), 1); PUSH_DATA (push, 1); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c b/src/gallium/drivers/nouveau/nv50/nv50_state.c index 155cdddf845..f233efedb1c 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_state.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c @@ -57,10 +57,6 @@ * ! pipe_rasterizer_state.flatshade_first also applies to QUADS * (There's a GL query for that, forcing an exception is just ridiculous.) * - * ! pipe_rasterizer_state.half_pixel_center is ignored - pixel centers - * are always at half integer coordinates and the top-left rule applies - * (There does not seem to be a hardware switch for this.) - * * ! pipe_rasterizer_state.sprite_coord_enable is masked with 0xff on NVC0 * (The hardware only has 8 slots meant for TexCoord and we have to assign * in advance to maintain elegant separate shader objects.) @@ -221,7 +217,7 @@ nv50_blend_state_delete(struct pipe_context *pipe, void *hwcso) FREE(hwcso); } -/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */ +/* NOTE: ignoring line_last_pixel */ static void * nv50_rasterizer_state_create(struct pipe_context *pipe, const struct pipe_rasterizer_state *cso) @@ -336,6 +332,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe, SB_BEGIN_3D(so, DEPTH_CLIP_NEGATIVE_Z, 1); SB_DATA (so, cso->clip_halfz); + SB_BEGIN_3D(so, PIXEL_CENTER_INTEGER, 1); + SB_DATA (so, !cso->half_pixel_center); + assert(so->size <= (sizeof(so->state) / sizeof(so->state[0]))); return (void *)so; } diff --git a/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h b/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h index 238951733cf..eea5327b6cb 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h +++ b/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h @@ -25,7 +25,7 @@ struct nv50_blend_stateobj { struct nv50_rasterizer_stateobj { struct pipe_rasterizer_state pipe; int size; - uint32_t state[48]; + uint32_t state[49]; }; struct nv50_zsa_stateobj { diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h index 5bd5e95370f..57407c5fa1b 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h @@ -1041,7 +1041,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NVC0_3D_CULL_FACE_BACK 0x00000405 #define NVC0_3D_CULL_FACE_FRONT_AND_BACK 0x00000408 -#define NVC0_3D_LINE_LAST_PIXEL 0x00001924 +#define NVC0_3D_PIXEL_CENTER_INTEGER 0x00001924 #define NVC0_3D_VIEWPORT_TRANSFORM_EN 0x0000192c diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index 7f68236ad14..5032c7f8070 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c @@ -787,8 +787,6 @@ nvc0_screen_create(struct nouveau_device *dev) PUSH_DATA (push, 0); BEGIN_NVC0(push, NVC0_3D(LINE_WIDTH_SEPARATE), 1); PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_3D(LINE_LAST_PIXEL), 1); - PUSH_DATA (push, 0); BEGIN_NVC0(push, NVC0_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1); PUSH_DATA (push, 1); BEGIN_NVC0(push, NVC0_3D(BLEND_SEPARATE_ALPHA), 1); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c index 54deb20cb0c..728618fdec3 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c @@ -204,7 +204,7 @@ nvc0_blend_state_delete(struct pipe_context *pipe, void *hwcso) FREE(hwcso); } -/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */ +/* NOTE: ignoring line_last_pixel */ static void * nvc0_rasterizer_state_create(struct pipe_context *pipe, const struct pipe_rasterizer_state *cso) @@ -315,6 +315,8 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe, SB_IMMED_3D(so, DEPTH_CLIP_NEGATIVE_Z, cso->clip_halfz); + SB_IMMED_3D(so, PIXEL_CENTER_INTEGER, !cso->half_pixel_center); + assert(so->size <= (sizeof(so->state) / sizeof(so->state[0]))); return (void *)so; } diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h b/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h index 80c33424032..1d70b7c7b23 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h @@ -23,7 +23,7 @@ struct nvc0_blend_stateobj { struct nvc0_rasterizer_stateobj { struct pipe_rasterizer_state pipe; int size; - uint32_t state[43]; + uint32_t state[44]; }; struct nvc0_zsa_stateobj { -- 2.30.2