[Mesa-dev] [PATCH 06/14] i965: Add new SIMD8 VS prog data flag
Kenneth Graunke
kenneth at whitecape.org
Tue Oct 28 17:48:17 PDT 2014
On Tuesday, October 28, 2014 04:25:05 PM Matt Turner wrote:
> 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?
I like that plan. A bunch of stages can (or will be able to) run in 4x1
(single), 4x2 dual object, 4x2 dual instance, or SIMD8 mode.
enum shader_dispatch_mode {
DISPATCH_MODE_4X2_DUAL_OBJECT,
DISPATCH_MODE_4X2_DUAL_INSTANCE,
DISPATCH_MODE_4X1_SINGLE,
DISPATCH_MODE_SIMD8,
};
The state upload code would use these values.
> > 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?
See brw_create_constant_surface in brw_wm_surface_state.c. For SIMD8 shader
access, we configure the constant buffer SURFACE_STATE to use a pitch of 4,
while for SIMD4x2 access, we configure it to use a pitch of 16 (vec4 size).
I believe Eric introduced the name, and it's been around for quite a while
now. Feel free to submit a patch to rename it.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141028/e8df35ad/attachment-0001.sig>
More information about the mesa-dev
mailing list