[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