[Mesa-dev] [PATCH 06/14] i965: Add new SIMD8 VS prog data flag

Matt Turner mattst88 at gmail.com
Tue Oct 28 16:25:05 PDT 2014


On Tue, Oct 28, 2014 at 3:17 PM, Kristian Høgsberg <krh at bitplanet.net> wrote:
> This flag signals that we have a SIMD8 VS shader so we can set up the
> corresponding state accordingly.  This boils down to setting
> the BDW+ SIMD8 enable bit in 3DSTATE_VS and making UBO and pull
> constant buffers use dword pitch.
>
> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h          |  5 ++++-
>  src/mesa/drivers/dri/i965/brw_defines.h          |  2 ++
>  src/mesa/drivers/dri/i965/brw_gs_surface_state.c |  2 +-
>  src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 10 ++++++++--
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c |  7 ++++---
>  src/mesa/drivers/dri/i965/gen8_vs_state.c        |  2 ++
>  6 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> index eb37e75..e7cd30f 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -543,6 +543,8 @@ struct brw_vec4_prog_data {
>      * is the size of the URB entry used for output.
>      */
>     GLuint urb_entry_size;
> +
> +   bool simd8;

brw_vec4_prog_data is going to be the prog_data struct for SIMD8
vertex shaders? :\

brw_gs_prog_data, which inherits brw_vec4_prog_data, has

   /**
    * Dispatch mode, can be any of:
    * GEN7_GS_DISPATCH_MODE_DUAL_OBJECT
    * GEN7_GS_DISPATCH_MODE_DUAL_INSTANCE
    * GEN7_GS_DISPATCH_MODE_SINGLE
    */
   int dispatch_mode;

Maybe it shouldn't hold the values of the things in the comment
directly (since they're things like 2<<11) but shouldn't we pull this
field out and have an enum or something?

>  };
>
>
> @@ -1599,7 +1601,8 @@ brw_update_sol_surface(struct brw_context *brw,
>  void brw_upload_ubo_surfaces(struct brw_context *brw,
>                              struct gl_shader *shader,
>                               struct brw_stage_state *stage_state,
> -                             struct brw_stage_prog_data *prog_data);
> +                             struct brw_stage_prog_data *prog_data,
> +                             bool dword_pitch);
>  void brw_upload_abo_surfaces(struct brw_context *brw,
>                               struct gl_shader_program *prog,
>                               struct brw_stage_state *stage_state,
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
> index bc7304b..aabb89b 100644
> --- a/src/mesa/drivers/dri/i965/brw_defines.h
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> @@ -1686,6 +1686,8 @@ enum brw_message_target {
>  # define GEN6_VS_STATISTICS_ENABLE                     (1 << 10)
>  # define GEN6_VS_CACHE_DISABLE                         (1 << 1)
>  # define GEN6_VS_ENABLE                                        (1 << 0)
> +/* Gen8+ DW7 */
> +# define GEN8_VS_SIMD8_ENABLE                           (1 << 2)
>  /* Gen8+ DW8 */
>  # define GEN8_VS_URB_ENTRY_OUTPUT_OFFSET_SHIFT          21
>  # define GEN8_VS_URB_OUTPUT_LENGTH_SHIFT                16
> diff --git a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> index 2c2ba56..42cdddb 100644
> --- a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> @@ -77,7 +77,7 @@ brw_upload_gs_ubo_surfaces(struct brw_context *brw)
>
>     /* CACHE_NEW_GS_PROG */
>     brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_GEOMETRY],
> -                          &brw->gs.base, &brw->gs.prog_data->base.base);
> +                          &brw->gs.base, &brw->gs.prog_data->base.base, false);
>  }
>
>  const struct brw_tracked_state brw_gs_ubo_surfaces = {
> diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
> index 1cc96cf..24bc06d 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
> @@ -112,6 +112,7 @@ static void
>  brw_upload_vs_pull_constants(struct brw_context *brw)
>  {
>     struct brw_stage_state *stage_state = &brw->vs.base;
> +   bool dword_pitch;

I can't figure out the name of this variable. In most any context I
would imagine 'dword_pitch' is an integer.

What does this mean, and can we name it something more descriptive?


More information about the mesa-dev mailing list