Wait a sec. Nevermind. It's something else. Trace replays fine in Mesa 13.0.3. Ignore this patch.
On Sun, Jan 15, 2017 at 4:08 PM, Ilia Mirkin <[email protected]> wrote: > Well, the trace in question rendered just fine on NVIDIA blob... I'm > kind of assuming that I just missed something in the spec, or all > other HW works this way, or ... . > > On Sun, Jan 15, 2017 at 4:06 PM, Axel Davy <[email protected]> wrote: >> Shouldn't this be fixed in wine, rather than in the driver ? >> >> >> Yours, >> >> Axel >> >> >> On 15/01/2017 21:57, Ilia Mirkin wrote: >>> >>> While I can find no support for this in the GL spec, this is apparently >>> what D3D9 wants. Also appears to fix a very long-standing bug in Tomb >>> Raider: Underworld and Deus Ex: Human Revolution (probably based on the >>> same engines). >>> >>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91247 >>> References: https://github.com/iXit/Mesa-3D/issues/224 >>> Signed-off-by: Ilia Mirkin <[email protected]> >>> --- >>> src/gallium/drivers/nouveau/nv50/nv50_state.c | 4 ---- >>> src/gallium/drivers/nouveau/nv50/nv50_state_validate.c | 17 >>> +++++++++++++++++ >>> src/gallium/drivers/nouveau/nv50/nv50_stateobj.h | 2 +- >>> src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 4 ---- >>> src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c | 5 +++++ >>> src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h | 2 +- >>> 6 files changed, 24 insertions(+), 10 deletions(-) >>> >>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c >>> b/src/gallium/drivers/nouveau/nv50/nv50_state.c >>> index 99d70d1..e66257a 100644 >>> --- a/src/gallium/drivers/nouveau/nv50/nv50_state.c >>> +++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c >>> @@ -301,10 +301,6 @@ nv50_rasterizer_state_create(struct pipe_context >>> *pipe, >>> SB_BEGIN_3D(so, POLYGON_STIPPLE_ENABLE, 1); >>> SB_DATA (so, cso->poly_stipple_enable); >>> - SB_BEGIN_3D(so, POLYGON_OFFSET_POINT_ENABLE, 3); >>> - SB_DATA (so, cso->offset_point); >>> - SB_DATA (so, cso->offset_line); >>> - SB_DATA (so, cso->offset_tri); >>> if (cso->offset_point || cso->offset_line || cso->offset_tri) { >>> SB_BEGIN_3D(so, POLYGON_OFFSET_FACTOR, 1); >>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state_validate.c >>> b/src/gallium/drivers/nouveau/nv50/nv50_state_validate.c >>> index c6f0363..0db13d9 100644 >>> --- a/src/gallium/drivers/nouveau/nv50/nv50_state_validate.c >>> +++ b/src/gallium/drivers/nouveau/nv50/nv50_state_validate.c >>> @@ -347,6 +347,22 @@ nv50_validate_derived_2(struct nv50_context *nv50) >>> } >>> static void >>> +nv50_validate_rast_fb(struct nv50_context *nv50) >>> +{ >>> + struct nouveau_pushbuf *push = nv50->base.pushbuf; >>> + struct pipe_framebuffer_state *fb = &nv50->framebuffer; >>> + struct pipe_rasterizer_state *rast = &nv50->rast->pipe; >>> + >>> + if (!rast) >>> + return; >>> + >>> + BEGIN_NV04(push, NV50_3D(POLYGON_OFFSET_POINT_ENABLE), 3); >>> + PUSH_DATA (push, rast->offset_point * !!fb->zsbuf); >>> + PUSH_DATA (push, rast->offset_line * !!fb->zsbuf); >>> + PUSH_DATA (push, rast->offset_tri * !!fb->zsbuf); >>> +} >>> + >>> +static void >>> nv50_validate_clip(struct nv50_context *nv50) >>> { >>> struct nouveau_pushbuf *push = nv50->base.pushbuf; >>> @@ -515,6 +531,7 @@ validate_list_3d[] = { >>> { nv50_validate_derived_rs, NV50_NEW_3D_FRAGPROG | >>> NV50_NEW_3D_RASTERIZER | >>> NV50_NEW_3D_VERTPROG | >>> NV50_NEW_3D_GMTYPROG }, >>> { nv50_validate_derived_2, NV50_NEW_3D_ZSA | >>> NV50_NEW_3D_FRAMEBUFFER }, >>> + { nv50_validate_rast_fb, NV50_NEW_3D_RASTERIZER | >>> NV50_NEW_3D_FRAMEBUFFER }, >>> { nv50_validate_clip, NV50_NEW_3D_CLIP | >>> NV50_NEW_3D_RASTERIZER | >>> NV50_NEW_3D_VERTPROG | >>> NV50_NEW_3D_GMTYPROG }, >>> { nv50_constbufs_validate, NV50_NEW_3D_CONSTBUF }, >>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h >>> b/src/gallium/drivers/nouveau/nv50/nv50_stateobj.h >>> index 579da9a..a5af115 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[49]; >>> + uint32_t state[45]; >>> }; >>> struct nv50_zsa_stateobj { >>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c >>> b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c >>> index bba35f1..1c953eb 100644 >>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c >>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c >>> @@ -285,10 +285,6 @@ nvc0_rasterizer_state_create(struct pipe_context >>> *pipe, >>> } >>> SB_IMMED_3D(so, POLYGON_STIPPLE_ENABLE, cso->poly_stipple_enable); >>> - SB_BEGIN_3D(so, POLYGON_OFFSET_POINT_ENABLE, 3); >>> - SB_DATA (so, cso->offset_point); >>> - SB_DATA (so, cso->offset_line); >>> - SB_DATA (so, cso->offset_tri); >>> if (cso->offset_point || cso->offset_line || cso->offset_tri) { >>> SB_BEGIN_3D(so, POLYGON_OFFSET_FACTOR, 1); >>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c >>> b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c >>> index d4931cb..4dbcb1c 100644 >>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c >>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c >>> @@ -689,6 +689,11 @@ nvc0_validate_rast_fb(struct nvc0_context *nvc0) >>> else >>> PUSH_DATAf(push, rast->offset_units * (1 << 24)); >>> } >>> + >>> + BEGIN_NVC0(push, NVC0_3D(POLYGON_OFFSET_POINT_ENABLE), 3); >>> + PUSH_DATA (push, rast->offset_point * !!fb->zsbuf); >>> + PUSH_DATA (push, rast->offset_line * !!fb->zsbuf); >>> + PUSH_DATA (push, rast->offset_tri * !!fb->zsbuf); >>> } >>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h >>> b/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h >>> index 054b1e7..e93da9d 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[42]; >>> + uint32_t state[38]; >>> }; >>> struct nvc0_zsa_stateobj { >> >> >> _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
