[Mesa-dev] [PATCH 13/16] i965/vs: Pass the current set of clip planes through run() and run_vs()

2015-06-22 Thread Jason Ekstrand
Previously, these were pulled out of the GL context conditionally based on
whether we were running ff/ARB or a GLSL program.  Now, we just pass them
in so that the visitor doesn't have to grab them itself.
---
 src/mesa/drivers/dri/i965/brw_fs.cpp  |  4 ++--
 src/mesa/drivers/dri/i965/brw_fs.h|  8 
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp  | 11 +--
 src/mesa/drivers/dri/i965/brw_vec4.cpp|  8 
 src/mesa/drivers/dri/i965/brw_vec4.h  |  4 ++--
 src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp |  4 ++--
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp|  4 +---
 7 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index bf04e26..23f60c2 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -3791,7 +3791,7 @@ fs_visitor::allocate_registers()
 }
 
 bool
-fs_visitor::run_vs()
+fs_visitor::run_vs(gl_clip_plane *clip_planes)
 {
assert(stage == MESA_SHADER_VERTEX);
 
@@ -3806,7 +3806,7 @@ fs_visitor::run_vs()
if (failed)
   return false;
 
-   emit_urb_writes();
+   emit_urb_writes(clip_planes);
 
if (shader_time_index = 0)
   emit_shader_time_end();
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
b/src/mesa/drivers/dri/i965/brw_fs.h
index 4db5a91..e0a8984 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -84,8 +84,8 @@ public:
 
fs_reg vgrf(const glsl_type *const type);
void import_uniforms(fs_visitor *v);
-   void setup_uniform_clipplane_values();
-   void compute_clip_distance();
+   void setup_uniform_clipplane_values(gl_clip_plane *clip_planes);
+   void compute_clip_distance(gl_clip_plane *clip_planes);
 
uint32_t gather_channel(int orig_chan, uint32_t sampler);
void swizzle_result(ir_texture_opcode op, int dest_components,
@@ -104,7 +104,7 @@ public:
void DEP_RESOLVE_MOV(const brw::fs_builder bld, int grf);
 
bool run_fs(bool do_rep_send);
-   bool run_vs();
+   bool run_vs(gl_clip_plane *clip_planes);
bool run_cs();
void optimize();
void allocate_registers();
@@ -271,7 +271,7 @@ public:
  fs_reg src0_alpha, unsigned components,
  unsigned exec_size, bool use_2nd_half = 
false);
void emit_fb_writes();
-   void emit_urb_writes();
+   void emit_urb_writes(gl_clip_plane *clip_planes);
void emit_cs_terminate();
 
void emit_barrier();
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 9ce8491..395394c 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -1715,9 +1715,8 @@ fs_visitor::emit_fb_writes()
 }
 
 void
-fs_visitor::setup_uniform_clipplane_values()
+fs_visitor::setup_uniform_clipplane_values(gl_clip_plane *clip_planes)
 {
-   gl_clip_plane *clip_planes = brw_select_clip_planes(ctx);
const struct brw_vue_prog_key *key =
   (const struct brw_vue_prog_key *) this-key;
 
@@ -1731,7 +1730,7 @@ fs_visitor::setup_uniform_clipplane_values()
}
 }
 
-void fs_visitor::compute_clip_distance()
+void fs_visitor::compute_clip_distance(gl_clip_plane *clip_planes)
 {
struct brw_vue_prog_data *vue_prog_data =
   (struct brw_vue_prog_data *) prog_data;
@@ -1760,7 +1759,7 @@ void fs_visitor::compute_clip_distance()
if (outputs[clip_vertex].file == BAD_FILE)
   return;
 
-   setup_uniform_clipplane_values();
+   setup_uniform_clipplane_values(clip_planes);
 
const fs_builder abld = bld.annotate(user clip distances);
 
@@ -1781,7 +1780,7 @@ void fs_visitor::compute_clip_distance()
 }
 
 void
-fs_visitor::emit_urb_writes()
+fs_visitor::emit_urb_writes(gl_clip_plane *clip_planes)
 {
int slot, urb_offset, length;
struct brw_vs_prog_data *vs_prog_data =
@@ -1796,7 +1795,7 @@ fs_visitor::emit_urb_writes()
 
/* Lower legacy ff and ClipVertex clipping to clip distances */
if (key-base.userclip_active  !prog-UsesClipDistanceOut)
-  compute_clip_distance();
+  compute_clip_distance(clip_planes);
 
/* If we don't have any valid slots to write, just do a minimal urb write
 * send to terminate the shader. */
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp 
b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index 093802c..9c45034 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -1706,7 +1706,7 @@ vec4_visitor::emit_shader_time_write(int 
shader_time_subindex, src_reg value)
 }
 
 bool
-vec4_visitor::run()
+vec4_visitor::run(gl_clip_plane *clip_planes)
 {
sanity_param_count = prog-Parameters-NumParameters;
 
@@ -1728,7 +1728,7 @@ vec4_visitor::run()
base_ir = NULL;
 
if (key-userclip_active  !prog-UsesClipDistanceOut)
-  setup_uniform_clipplane_values();
+  setup_uniform_clipplane_values(clip_planes);
 

Re: [Mesa-dev] [PATCH 13/16] i965/vs: Pass the current set of clip planes through run() and run_vs()

2015-06-22 Thread Chris Forbes
Is fairly unpleasant that the clip plane plumbing needs to be so
special in the visitors at all -- but breaking the context dependency
is a win.

- Chris

On Tue, Jun 23, 2015 at 1:07 PM, Jason Ekstrand ja...@jlekstrand.net wrote:
 Previously, these were pulled out of the GL context conditionally based on
 whether we were running ff/ARB or a GLSL program.  Now, we just pass them
 in so that the visitor doesn't have to grab them itself.
 ---
  src/mesa/drivers/dri/i965/brw_fs.cpp  |  4 ++--
  src/mesa/drivers/dri/i965/brw_fs.h|  8 
  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp  | 11 +--
  src/mesa/drivers/dri/i965/brw_vec4.cpp|  8 
  src/mesa/drivers/dri/i965/brw_vec4.h  |  4 ++--
  src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp |  4 ++--
  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp|  4 +---
  7 files changed, 20 insertions(+), 23 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs.cpp
 index bf04e26..23f60c2 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
 @@ -3791,7 +3791,7 @@ fs_visitor::allocate_registers()
  }

  bool
 -fs_visitor::run_vs()
 +fs_visitor::run_vs(gl_clip_plane *clip_planes)
  {
 assert(stage == MESA_SHADER_VERTEX);

 @@ -3806,7 +3806,7 @@ fs_visitor::run_vs()
 if (failed)
return false;

 -   emit_urb_writes();
 +   emit_urb_writes(clip_planes);

 if (shader_time_index = 0)
emit_shader_time_end();
 diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
 b/src/mesa/drivers/dri/i965/brw_fs.h
 index 4db5a91..e0a8984 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs.h
 +++ b/src/mesa/drivers/dri/i965/brw_fs.h
 @@ -84,8 +84,8 @@ public:

 fs_reg vgrf(const glsl_type *const type);
 void import_uniforms(fs_visitor *v);
 -   void setup_uniform_clipplane_values();
 -   void compute_clip_distance();
 +   void setup_uniform_clipplane_values(gl_clip_plane *clip_planes);
 +   void compute_clip_distance(gl_clip_plane *clip_planes);

 uint32_t gather_channel(int orig_chan, uint32_t sampler);
 void swizzle_result(ir_texture_opcode op, int dest_components,
 @@ -104,7 +104,7 @@ public:
 void DEP_RESOLVE_MOV(const brw::fs_builder bld, int grf);

 bool run_fs(bool do_rep_send);
 -   bool run_vs();
 +   bool run_vs(gl_clip_plane *clip_planes);
 bool run_cs();
 void optimize();
 void allocate_registers();
 @@ -271,7 +271,7 @@ public:
   fs_reg src0_alpha, unsigned components,
   unsigned exec_size, bool use_2nd_half = 
 false);
 void emit_fb_writes();
 -   void emit_urb_writes();
 +   void emit_urb_writes(gl_clip_plane *clip_planes);
 void emit_cs_terminate();

 void emit_barrier();
 diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 index 9ce8491..395394c 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 @@ -1715,9 +1715,8 @@ fs_visitor::emit_fb_writes()
  }

  void
 -fs_visitor::setup_uniform_clipplane_values()
 +fs_visitor::setup_uniform_clipplane_values(gl_clip_plane *clip_planes)
  {
 -   gl_clip_plane *clip_planes = brw_select_clip_planes(ctx);
 const struct brw_vue_prog_key *key =
(const struct brw_vue_prog_key *) this-key;

 @@ -1731,7 +1730,7 @@ fs_visitor::setup_uniform_clipplane_values()
 }
  }

 -void fs_visitor::compute_clip_distance()
 +void fs_visitor::compute_clip_distance(gl_clip_plane *clip_planes)
  {
 struct brw_vue_prog_data *vue_prog_data =
(struct brw_vue_prog_data *) prog_data;
 @@ -1760,7 +1759,7 @@ void fs_visitor::compute_clip_distance()
 if (outputs[clip_vertex].file == BAD_FILE)
return;

 -   setup_uniform_clipplane_values();
 +   setup_uniform_clipplane_values(clip_planes);

 const fs_builder abld = bld.annotate(user clip distances);

 @@ -1781,7 +1780,7 @@ void fs_visitor::compute_clip_distance()
  }

  void
 -fs_visitor::emit_urb_writes()
 +fs_visitor::emit_urb_writes(gl_clip_plane *clip_planes)
  {
 int slot, urb_offset, length;
 struct brw_vs_prog_data *vs_prog_data =
 @@ -1796,7 +1795,7 @@ fs_visitor::emit_urb_writes()

 /* Lower legacy ff and ClipVertex clipping to clip distances */
 if (key-base.userclip_active  !prog-UsesClipDistanceOut)
 -  compute_clip_distance();
 +  compute_clip_distance(clip_planes);

 /* If we don't have any valid slots to write, just do a minimal urb write
  * send to terminate the shader. */
 diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp 
 b/src/mesa/drivers/dri/i965/brw_vec4.cpp
 index 093802c..9c45034 100644
 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
 @@ -1706,7 +1706,7 @@ vec4_visitor::emit_shader_time_write(int 
 shader_time_subindex, src_reg value)
  }

  bool
 -vec4_visitor::run()