Re: [Mesa-dev] [PATCH 1/2] i965: Combine 3DSTATE_STREAMOUT emitters and genX_sol_state atoms.

2016-06-22 Thread Kenneth Graunke
On Wednesday, June 22, 2016 5:21:34 PM PDT Jason Ekstrand wrote:
> On Wed, Jun 22, 2016 at 4:26 PM, Kenneth Graunke 
> wrote:
> 
> > They're basically the same.  Let's avoid the code duplication.
> >
> > Signed-off-by: Kenneth Graunke 
> > ---
> >  src/mesa/drivers/dri/i965/brw_state.h|  2 +-
> >  src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
> >  src/mesa/drivers/dri/i965/gen7_sol_state.c   | 32 --
> >  src/mesa/drivers/dri/i965/gen8_sol_state.c   | 90
> > +---
> >  4 files changed, 31 insertions(+), 95 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_state.h
> > b/src/mesa/drivers/dri/i965/brw_state.h
> > index b29412e..a16e876 100644
> > --- a/src/mesa/drivers/dri/i965/brw_state.h
> > +++ b/src/mesa/drivers/dri/i965/brw_state.h
> > @@ -166,7 +166,6 @@ extern const struct brw_tracked_state gen8_wm_state;
> >  extern const struct brw_tracked_state gen8_raster_state;
> >  extern const struct brw_tracked_state gen8_sbe_state;
> >  extern const struct brw_tracked_state gen8_sf_state;
> > -extern const struct brw_tracked_state gen8_sol_state;
> >  extern const struct brw_tracked_state gen8_sf_clip_viewport;
> >  extern const struct brw_tracked_state gen8_vertices;
> >  extern const struct brw_tracked_state gen8_vf_topology;
> > @@ -303,6 +302,7 @@ void gen8_upload_ps_extra(struct brw_context *brw,
> >  /* gen7_sol_state.c */
> >  void gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
> >const struct brw_vue_map *vue_map);
> > +void gen8_upload_3dstate_so_buffers(struct brw_context *brw);
> >
> >  /* gen8_surface_state.c */
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c
> > b/src/mesa/drivers/dri/i965/brw_state_upload.c
> > index 0b47ebe..4a20821 100644
> > --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> > +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> > @@ -337,7 +337,7 @@ static const struct brw_tracked_state
> > *gen8_render_atoms[] =
> > _te_state,
> > _ds_state,
> > _gs_state,
> > -   _sol_state,
> > +   _sol_state,
> > _clip_state,
> > _raster_state,
> > _sbe_state,
> > diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c
> > b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> > index 4749cc8..8fcc591 100644
> > --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
> > +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> > @@ -222,7 +222,9 @@ upload_3dstate_streamout(struct brw_context *brw, bool
> > active,
> > /* BRW_NEW_TRANSFORM_FEEDBACK */
> > struct gl_transform_feedback_object *xfb_obj =
> >ctx->TransformFeedback.CurrentObject;
> > -   uint32_t dw1 = 0, dw2 = 0;
> > +   const struct gl_transform_feedback_info *linked_xfb_info =
> > +  _obj->shader_program->LinkedTransformFeedback;
> > +   uint32_t dw1 = 0, dw2 = 0, dw3 = 0, dw4 = 0;
> > int i;
> >
> > if (active) {
> >
> 
> In here (not visible) gen7 sets a bunch of enable bits that don't exist on
> gen8.  That should be inside of an "if (brw->gen <= 7)" guard.

D'oh...thanks.  Fixed locally.


signature.asc
Description: This is a digitally signed message part.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] i965: Combine 3DSTATE_STREAMOUT emitters and genX_sol_state atoms.

2016-06-22 Thread Jason Ekstrand
On Wed, Jun 22, 2016 at 4:26 PM, Kenneth Graunke 
wrote:

> They're basically the same.  Let's avoid the code duplication.
>
> Signed-off-by: Kenneth Graunke 
> ---
>  src/mesa/drivers/dri/i965/brw_state.h|  2 +-
>  src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
>  src/mesa/drivers/dri/i965/gen7_sol_state.c   | 32 --
>  src/mesa/drivers/dri/i965/gen8_sol_state.c   | 90
> +---
>  4 files changed, 31 insertions(+), 95 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_state.h
> b/src/mesa/drivers/dri/i965/brw_state.h
> index b29412e..a16e876 100644
> --- a/src/mesa/drivers/dri/i965/brw_state.h
> +++ b/src/mesa/drivers/dri/i965/brw_state.h
> @@ -166,7 +166,6 @@ extern const struct brw_tracked_state gen8_wm_state;
>  extern const struct brw_tracked_state gen8_raster_state;
>  extern const struct brw_tracked_state gen8_sbe_state;
>  extern const struct brw_tracked_state gen8_sf_state;
> -extern const struct brw_tracked_state gen8_sol_state;
>  extern const struct brw_tracked_state gen8_sf_clip_viewport;
>  extern const struct brw_tracked_state gen8_vertices;
>  extern const struct brw_tracked_state gen8_vf_topology;
> @@ -303,6 +302,7 @@ void gen8_upload_ps_extra(struct brw_context *brw,
>  /* gen7_sol_state.c */
>  void gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
>const struct brw_vue_map *vue_map);
> +void gen8_upload_3dstate_so_buffers(struct brw_context *brw);
>
>  /* gen8_surface_state.c */
>
> diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c
> b/src/mesa/drivers/dri/i965/brw_state_upload.c
> index 0b47ebe..4a20821 100644
> --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> @@ -337,7 +337,7 @@ static const struct brw_tracked_state
> *gen8_render_atoms[] =
> _te_state,
> _ds_state,
> _gs_state,
> -   _sol_state,
> +   _sol_state,
> _clip_state,
> _raster_state,
> _sbe_state,
> diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c
> b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> index 4749cc8..8fcc591 100644
> --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> @@ -222,7 +222,9 @@ upload_3dstate_streamout(struct brw_context *brw, bool
> active,
> /* BRW_NEW_TRANSFORM_FEEDBACK */
> struct gl_transform_feedback_object *xfb_obj =
>ctx->TransformFeedback.CurrentObject;
> -   uint32_t dw1 = 0, dw2 = 0;
> +   const struct gl_transform_feedback_info *linked_xfb_info =
> +  _obj->shader_program->LinkedTransformFeedback;
> +   uint32_t dw1 = 0, dw2 = 0, dw3 = 0, dw4 = 0;
> int i;
>
> if (active) {
>

In here (not visible) gen7 sets a bunch of enable bits that don't exist on
gen8.  That should be inside of an "if (brw->gen <= 7)" guard.


> @@ -258,12 +260,30 @@ upload_3dstate_streamout(struct brw_context *brw,
> bool active,
>
>dw2 |= SET_FIELD(urb_entry_read_offset,
> SO_STREAM_3_VERTEX_READ_OFFSET);
>dw2 |= SET_FIELD(urb_entry_read_length - 1,
> SO_STREAM_3_VERTEX_READ_LENGTH);
> +
> +  if (brw->gen >= 8) {
> +/* Set buffer pitches; 0 means unbound. */
> +if (xfb_obj->Buffers[0])
> +   dw3 |= linked_xfb_info->Buffers[0].Stride * 4;
> +if (xfb_obj->Buffers[1])
> +   dw3 |= (linked_xfb_info->Buffers[1].Stride * 4) << 16;
> +if (xfb_obj->Buffers[2])
> +   dw4 |= linked_xfb_info->Buffers[2].Stride * 4;
> +if (xfb_obj->Buffers[3])
> +   dw4 |= (linked_xfb_info->Buffers[3].Stride * 4) << 16;
> +  }
> }
>
> -   BEGIN_BATCH(3);
> -   OUT_BATCH(_3DSTATE_STREAMOUT << 16 | (3 - 2));
> +   const int dwords = brw->gen >= 8 ? 5 : 3;
> +
> +   BEGIN_BATCH(dwords);
> +   OUT_BATCH(_3DSTATE_STREAMOUT << 16 | (dwords - 2));
> OUT_BATCH(dw1);
> OUT_BATCH(dw2);
> +   if (dwords > 3) {
> +  OUT_BATCH(dw3);
> +  OUT_BATCH(dw4);
> +   }
> ADVANCE_BATCH();
>  }
>
> @@ -275,7 +295,11 @@ upload_sol_state(struct brw_context *brw)
> bool active = _mesa_is_xfb_active_and_unpaused(ctx);
>
> if (active) {
> -  upload_3dstate_so_buffers(brw);
> +  if (brw->gen >= 8)
> + gen8_upload_3dstate_so_buffers(brw);
> +  else
> + upload_3dstate_so_buffers(brw);
> +
>/* BRW_NEW_VUE_MAP_GEOM_OUT */
>gen7_upload_3dstate_so_decl_list(brw, >vue_map_geom_out);
> }
> diff --git a/src/mesa/drivers/dri/i965/gen8_sol_state.c
> b/src/mesa/drivers/dri/i965/gen8_sol_state.c
> index a72f5e1..21cc129 100644
> --- a/src/mesa/drivers/dri/i965/gen8_sol_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_sol_state.c
> @@ -35,7 +35,7 @@
>  #include "intel_buffer_objects.h"
>  #include "main/transformfeedback.h"
>
> -static void
> +void
>  gen8_upload_3dstate_so_buffers(struct brw_context *brw)
>  {
> struct gl_context *ctx = >ctx;
> @@ -93,91 +93,3 @@ 

[Mesa-dev] [PATCH 1/2] i965: Combine 3DSTATE_STREAMOUT emitters and genX_sol_state atoms.

2016-06-22 Thread Kenneth Graunke
They're basically the same.  Let's avoid the code duplication.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/brw_state.h|  2 +-
 src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
 src/mesa/drivers/dri/i965/gen7_sol_state.c   | 32 --
 src/mesa/drivers/dri/i965/gen8_sol_state.c   | 90 +---
 4 files changed, 31 insertions(+), 95 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
b/src/mesa/drivers/dri/i965/brw_state.h
index b29412e..a16e876 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -166,7 +166,6 @@ extern const struct brw_tracked_state gen8_wm_state;
 extern const struct brw_tracked_state gen8_raster_state;
 extern const struct brw_tracked_state gen8_sbe_state;
 extern const struct brw_tracked_state gen8_sf_state;
-extern const struct brw_tracked_state gen8_sol_state;
 extern const struct brw_tracked_state gen8_sf_clip_viewport;
 extern const struct brw_tracked_state gen8_vertices;
 extern const struct brw_tracked_state gen8_vf_topology;
@@ -303,6 +302,7 @@ void gen8_upload_ps_extra(struct brw_context *brw,
 /* gen7_sol_state.c */
 void gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
   const struct brw_vue_map *vue_map);
+void gen8_upload_3dstate_so_buffers(struct brw_context *brw);
 
 /* gen8_surface_state.c */
 
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c 
b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 0b47ebe..4a20821 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -337,7 +337,7 @@ static const struct brw_tracked_state *gen8_render_atoms[] =
_te_state,
_ds_state,
_gs_state,
-   _sol_state,
+   _sol_state,
_clip_state,
_raster_state,
_sbe_state,
diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c 
b/src/mesa/drivers/dri/i965/gen7_sol_state.c
index 4749cc8..8fcc591 100644
--- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
@@ -222,7 +222,9 @@ upload_3dstate_streamout(struct brw_context *brw, bool 
active,
/* BRW_NEW_TRANSFORM_FEEDBACK */
struct gl_transform_feedback_object *xfb_obj =
   ctx->TransformFeedback.CurrentObject;
-   uint32_t dw1 = 0, dw2 = 0;
+   const struct gl_transform_feedback_info *linked_xfb_info =
+  _obj->shader_program->LinkedTransformFeedback;
+   uint32_t dw1 = 0, dw2 = 0, dw3 = 0, dw4 = 0;
int i;
 
if (active) {
@@ -258,12 +260,30 @@ upload_3dstate_streamout(struct brw_context *brw, bool 
active,
 
   dw2 |= SET_FIELD(urb_entry_read_offset, SO_STREAM_3_VERTEX_READ_OFFSET);
   dw2 |= SET_FIELD(urb_entry_read_length - 1, 
SO_STREAM_3_VERTEX_READ_LENGTH);
+
+  if (brw->gen >= 8) {
+/* Set buffer pitches; 0 means unbound. */
+if (xfb_obj->Buffers[0])
+   dw3 |= linked_xfb_info->Buffers[0].Stride * 4;
+if (xfb_obj->Buffers[1])
+   dw3 |= (linked_xfb_info->Buffers[1].Stride * 4) << 16;
+if (xfb_obj->Buffers[2])
+   dw4 |= linked_xfb_info->Buffers[2].Stride * 4;
+if (xfb_obj->Buffers[3])
+   dw4 |= (linked_xfb_info->Buffers[3].Stride * 4) << 16;
+  }
}
 
-   BEGIN_BATCH(3);
-   OUT_BATCH(_3DSTATE_STREAMOUT << 16 | (3 - 2));
+   const int dwords = brw->gen >= 8 ? 5 : 3;
+
+   BEGIN_BATCH(dwords);
+   OUT_BATCH(_3DSTATE_STREAMOUT << 16 | (dwords - 2));
OUT_BATCH(dw1);
OUT_BATCH(dw2);
+   if (dwords > 3) {
+  OUT_BATCH(dw3);
+  OUT_BATCH(dw4);
+   }
ADVANCE_BATCH();
 }
 
@@ -275,7 +295,11 @@ upload_sol_state(struct brw_context *brw)
bool active = _mesa_is_xfb_active_and_unpaused(ctx);
 
if (active) {
-  upload_3dstate_so_buffers(brw);
+  if (brw->gen >= 8)
+ gen8_upload_3dstate_so_buffers(brw);
+  else
+ upload_3dstate_so_buffers(brw);
+
   /* BRW_NEW_VUE_MAP_GEOM_OUT */
   gen7_upload_3dstate_so_decl_list(brw, >vue_map_geom_out);
}
diff --git a/src/mesa/drivers/dri/i965/gen8_sol_state.c 
b/src/mesa/drivers/dri/i965/gen8_sol_state.c
index a72f5e1..21cc129 100644
--- a/src/mesa/drivers/dri/i965/gen8_sol_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_sol_state.c
@@ -35,7 +35,7 @@
 #include "intel_buffer_objects.h"
 #include "main/transformfeedback.h"
 
-static void
+void
 gen8_upload_3dstate_so_buffers(struct brw_context *brw)
 {
struct gl_context *ctx = >ctx;
@@ -93,91 +93,3 @@ gen8_upload_3dstate_so_buffers(struct brw_context *brw)
}
brw_obj->zero_offsets = false;
 }
-
-static void
-gen8_upload_3dstate_streamout(struct brw_context *brw, bool active,
-  struct brw_vue_map *vue_map)
-{
-   struct gl_context *ctx = >ctx;
-
-   /* BRW_NEW_TRANSFORM_FEEDBACK */
-   struct gl_transform_feedback_object *xfb_obj =
-  ctx->TransformFeedback.CurrentObject;
-   const struct gl_transform_feedback_info *linked_xfb_info =
-