[Mesa-dev] [PATCH 03/37] i965/gen6/gs: use brw_gs_prog atom instead of brw_ff_gs_prog

Jordan Justen jljusten at gmail.com
Wed Sep 3 19:03:28 PDT 2014


Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

On Thu, Aug 14, 2014 at 4:11 AM, Iago Toral Quiroga <itoral at igalia.com> wrote:
> From: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
>
> This is needed to support user-provided geometry shaders, since the
> brw_ff_gs_prog atom in gen6 only takes care of implementing transform feedback
> for vertex shaders.
>
> If there is no user-provided geometry shader the implementation falls back to
> the original code.
>
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/mesa/drivers/dri/i965/brw_gs.c           |  4 ++++
>  src/mesa/drivers/dri/i965/brw_gs.h           |  1 +
>  src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
>  src/mesa/drivers/dri/i965/brw_vec4_gs.c      | 11 ++++++++++-
>  4 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c
> index fbd728f..c0c4c13 100644
> --- a/src/mesa/drivers/dri/i965/brw_gs.c
> +++ b/src/mesa/drivers/dri/i965/brw_gs.c
> @@ -243,6 +243,10 @@ brw_upload_ff_gs_prog(struct brw_context *brw)
>     }
>  }
>
> +void gen6_brw_upload_ff_gs_prog(struct brw_context *brw)
> +{
> +   brw_upload_ff_gs_prog(brw);
> +}
>
>  const struct brw_tracked_state brw_ff_gs_prog = {
>     .dirty = {
> diff --git a/src/mesa/drivers/dri/i965/brw_gs.h b/src/mesa/drivers/dri/i965/brw_gs.h
> index f8f430c..a538948 100644
> --- a/src/mesa/drivers/dri/i965/brw_gs.h
> +++ b/src/mesa/drivers/dri/i965/brw_gs.h
> @@ -110,5 +110,6 @@ void brw_ff_gs_lines(struct brw_ff_gs_compile *c);
>  void gen6_sol_program(struct brw_ff_gs_compile *c,
>                        struct brw_ff_gs_prog_key *key,
>                        unsigned num_verts, bool check_edge_flag);
> +void gen6_brw_upload_ff_gs_prog(struct brw_context *brw);
>
>  #endif
> diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
> index 3a452c3..086956d 100644
> --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> @@ -108,7 +108,7 @@ static const struct brw_tracked_state *gen4_atoms[] =
>  static const struct brw_tracked_state *gen6_atoms[] =
>  {
>     &brw_vs_prog, /* must do before state base address */
> -   &brw_ff_gs_prog, /* must do before state base address */
> +   &brw_gs_prog, /* must do before state base address */
>     &brw_wm_prog, /* must do before state base address */
>
>     &gen6_clip_vp,
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> index 6428291..2d9e8c2 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> @@ -31,6 +31,7 @@
>  #include "brw_context.h"
>  #include "brw_vec4_gs_visitor.h"
>  #include "brw_state.h"
> +#include "brw_gs.h"
>
>
>  static bool
> @@ -270,6 +271,12 @@ brw_upload_gs_prog(struct brw_context *brw)
>        (struct brw_geometry_program *) brw->geometry_program;
>
>     if (gp == NULL) {
> +      if (brw->gen == 6) {
> +         if (brw->state.dirty.brw & BRW_NEW_TRANSFORM_FEEDBACK)
> +            gen6_brw_upload_ff_gs_prog(brw);
> +         return;
> +      }
> +
>        /* No geometry shader.  Vertex data just passes straight through. */
>        if (brw->state.dirty.brw & BRW_NEW_VUE_MAP_VS) {
>           brw->vue_map_geom_out = brw->vue_map_vs;
> @@ -325,7 +332,9 @@ brw_upload_gs_prog(struct brw_context *brw)
>  const struct brw_tracked_state brw_gs_prog = {
>     .dirty = {
>        .mesa  = (_NEW_LIGHT | _NEW_BUFFERS | _NEW_TEXTURE),
> -      .brw   = BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_VUE_MAP_VS,
> +      .brw   = (BRW_NEW_GEOMETRY_PROGRAM |
> +                BRW_NEW_VUE_MAP_VS |
> +                BRW_NEW_TRANSFORM_FEEDBACK),
>     },
>     .emit = brw_upload_gs_prog
>  };
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list