[Mesa-dev] [PATCH v2 1/2] i965: Fix missing dirty bits related to is_drawing_points/lines.

Iago Toral itoral at igalia.com
Wed Aug 31 13:55:44 UTC 2016


On Tue, 2016-08-30 at 21:50 -0700, Kenneth Graunke wrote:
> calculate_attr_overrides() uses is_drawing_points(), which depends
> on tessellation and geometry program state, as well as polygon state.
> 
> v2: Add missing _NEW_POLYGON as well.  Caught by Iago Toral.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
> ---
>  src/mesa/drivers/dri/i965/gen6_clip_state.c |  5 +++++
>  src/mesa/drivers/dri/i965/gen7_sf_state.c   | 14 +++++++++++---
>  src/mesa/drivers/dri/i965/gen8_sf_state.c   |  9 +++++++--
>  3 files changed, 23 insertions(+), 5 deletions(-)
> 
> Thanks Iago!  Here's a v2 with _NEW_POLYGON added.

Looks good to me. You already have my Rb though :)

> diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c
> b/src/mesa/drivers/dri/i965/gen6_clip_state.c
> index 4a3f7f9..8a3d05a 100644
> --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
> +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
> @@ -230,6 +230,9 @@ upload_clip_state(struct brw_context *brw)
>     else
>        enable = GEN6_CLIP_ENABLE;
>  
> +   /* _NEW_POLYGON,
> +    * BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_TES_PROG_DATA |
> BRW_NEW_PRIMITIVE
> +    */
>     if (!brw_is_drawing_points(brw) && !brw_is_drawing_lines(brw))
>        dw2 |= GEN6_CLIP_XY_TEST;
>  
> @@ -255,6 +258,7 @@ const struct brw_tracked_state gen6_clip_state =
> {
>     .dirty = {
>        .mesa  = _NEW_BUFFERS |
>                 _NEW_LIGHT |
> +               _NEW_POLYGON |
>                 _NEW_TRANSFORM,
>        .brw   = BRW_NEW_BLORP |
>                 BRW_NEW_CONTEXT |
> @@ -281,6 +285,7 @@ const struct brw_tracked_state gen7_clip_state =
> {
>                 BRW_NEW_META_IN_PROGRESS |
>                 BRW_NEW_PRIMITIVE |
>                 BRW_NEW_RASTERIZER_DISCARD |
> +               BRW_NEW_TES_PROG_DATA |
>                 BRW_NEW_VUE_MAP_GEOM_OUT,
>     },
>     .emit = upload_clip_state,
> diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c
> b/src/mesa/drivers/dri/i965/gen7_sf_state.c
> index ba0592a..8727bf8 100644
> --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
> @@ -59,8 +59,10 @@ upload_sbe_state(struct brw_context *brw)
>     }
>     dw1 |= point_sprite_origin;
>  
> -   /* BRW_NEW_VUE_MAP_GEOM_OUT | BRW_NEW_FRAGMENT_PROGRAM
> -    * _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM | BRW_NEW_FS_PROG_DATA
> +   /* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM,
> +    * BRW_NEW_FS_PROG_DATA | BRW_NEW_FRAGMENT_PROGRAM |
> +    * BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_PRIMITIVE |
> BRW_NEW_TES_PROG_DATA |
> +    * BRW_NEW_VUE_MAP_GEOM_OUT
>      */
>     uint32_t urb_entry_read_length;
>     uint32_t urb_entry_read_offset;
> @@ -90,12 +92,14 @@ const struct brw_tracked_state gen7_sbe_state = {
>        .mesa  = _NEW_BUFFERS |
>                 _NEW_LIGHT |
>                 _NEW_POINT |
> +               _NEW_POLYGON |
>                 _NEW_PROGRAM,
>        .brw   = BRW_NEW_BLORP |
>                 BRW_NEW_CONTEXT |
>                 BRW_NEW_FRAGMENT_PROGRAM |
>                 BRW_NEW_FS_PROG_DATA |
>                 BRW_NEW_GEOMETRY_PROGRAM |
> +               BRW_NEW_TES_PROG_DATA |
>                 BRW_NEW_PRIMITIVE |
>                 BRW_NEW_VUE_MAP_GEOM_OUT,
>     },
> @@ -187,7 +191,9 @@ upload_sf_state(struct brw_context *brw)
>        dw2 |= GEN6_SF_CULL_NONE;
>     }
>  
> -   /* _NEW_SCISSOR _NEW_POLYGON BRW_NEW_GEOMETRY_PROGRAM
> BRW_NEW_PRIMITIVE */
> +   /* _NEW_SCISSOR | _NEW_POLYGON,
> +    * BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_PRIMITIVE |
> BRW_NEW_TES_PROG_DATA
> +    */
>     if (ctx->Scissor.EnableFlags ||
>         brw_is_drawing_points(brw) || brw_is_drawing_lines(brw))
>        dw2 |= GEN6_SF_SCISSOR_ENABLE;
> @@ -256,7 +262,9 @@ const struct brw_tracked_state gen7_sf_state = {
>                 _NEW_SCISSOR,
>        .brw   = BRW_NEW_BLORP |
>                 BRW_NEW_CONTEXT |
> +               BRW_NEW_GEOMETRY_PROGRAM |
>                 BRW_NEW_PRIMITIVE |
> +               BRW_NEW_TES_PROG_DATA |
>                 BRW_NEW_VUE_MAP_GEOM_OUT,
>     },
>     .emit = upload_sf_state,
> diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c
> b/src/mesa/drivers/dri/i965/gen8_sf_state.c
> index 0c4f1df..93c77f7 100644
> --- a/src/mesa/drivers/dri/i965/gen8_sf_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c
> @@ -60,8 +60,10 @@ upload_sbe(struct brw_context *brw)
>     else
>        dw1 |= GEN6_SF_POINT_SPRITE_UPPERLEFT;
>  
> -   /* BRW_NEW_VUE_MAP_GEOM_OUT | BRW_NEW_FRAGMENT_PROGRAM |
> -    * _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM | BRW_NEW_FS_PROG_DATA
> +   /* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM,
> +    * BRW_NEW_FS_PROG_DATA | BRW_NEW_FRAGMENT_PROGRAM |
> +    * BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_PRIMITIVE |
> BRW_NEW_TES_PROG_DATA |
> +    * BRW_NEW_VUE_MAP_GEOM_OUT
>      */
>     calculate_attr_overrides(brw, attr_overrides,
>                              &point_sprite_enables,
> @@ -132,11 +134,14 @@ const struct brw_tracked_state gen8_sbe_state =
> {
>        .mesa  = _NEW_BUFFERS |
>                 _NEW_LIGHT |
>                 _NEW_POINT |
> +               _NEW_POLYGON |
>                 _NEW_PROGRAM,
>        .brw   = BRW_NEW_BLORP |
>                 BRW_NEW_CONTEXT |
>                 BRW_NEW_FRAGMENT_PROGRAM |
>                 BRW_NEW_FS_PROG_DATA |
> +               BRW_NEW_GEOMETRY_PROGRAM |
> +               BRW_NEW_TES_PROG_DATA |
>                 BRW_NEW_VUE_MAP_GEOM_OUT,
>     },
>     .emit = upload_sbe,


More information about the mesa-dev mailing list