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

Chris Forbes chrisf at ijw.co.nz
Mon Jun 22 20:24:38 PDT 2015


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 <jason at 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()
> +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);
>
>     emit_thread_end();
>
> @@ -1901,7 +1901,7 @@ brw_vs_emit(struct brw_context *brw,
>        fs_visitor v(brw, mem_ctx, MESA_SHADER_VERTEX, &c->key,
>                     &prog_data->base.base, prog, &c->vp->program.Base,
>                     8, st_index);
> -      if (!v.run_vs()) {
> +      if (!v.run_vs(brw_select_clip_planes(&brw->ctx))) {
>           if (prog) {
>              prog->LinkStatus = false;
>              ralloc_strcat(&prog->InfoLog, v.fail_msg);
> @@ -1939,7 +1939,7 @@ brw_vs_emit(struct brw_context *brw,
>        prog_data->base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
>
>        vec4_vs_visitor v(brw, c, prog_data, prog, mem_ctx, st_index);
> -      if (!v.run()) {
> +      if (!v.run(brw_select_clip_planes(&brw->ctx))) {
>           if (prog) {
>              prog->LinkStatus = false;
>              ralloc_strcat(&prog->InfoLog, v.fail_msg);
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
> index 4a3ce62..193b381 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
> @@ -177,10 +177,10 @@ public:
>
>     struct hash_table *variable_ht;
>
> -   bool run(void);
> +   bool run(gl_clip_plane *clip_planes);
>     void fail(const char *msg, ...);
>
> -   void setup_uniform_clipplane_values();
> +   void setup_uniform_clipplane_values(gl_clip_plane *clip_planes);
>     void setup_uniform_values(ir_variable *ir);
>     void setup_builtin_uniform_values(ir_variable *ir);
>     int setup_uniforms(int payload_reg);
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> index 9ba9641..d876762 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> @@ -664,7 +664,7 @@ brw_gs_emit(struct brw_context *brw,
>
>           vec4_gs_visitor v(brw, c, prog, mem_ctx, true /* no_spills */,
>                             st_index);
> -         if (v.run()) {
> +         if (v.run(NULL /* clip planes */)) {
>              return generate_assembly(brw, prog, &c->gp->program.Base,
>                                       &c->prog_data.base, mem_ctx, v.cfg,
>                                       final_assembly_size);
> @@ -710,7 +710,7 @@ brw_gs_emit(struct brw_context *brw,
>        gs = new gen6_gs_visitor(brw, c, prog, mem_ctx, false /* no_spills */,
>                                 st_index);
>
> -   if (!gs->run()) {
> +   if (!gs->run(NULL /* clip planes */)) {
>        prog->LinkStatus = false;
>        ralloc_strcat(&prog->InfoLog, gs->fail_msg);
>     } else {
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 7c44acf..dd50dfa 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -720,10 +720,8 @@ vec4_visitor::setup_uniform_values(ir_variable *ir)
>  }
>
>  void
> -vec4_visitor::setup_uniform_clipplane_values()
> +vec4_visitor::setup_uniform_clipplane_values(gl_clip_plane *clip_planes)
>  {
> -   gl_clip_plane *clip_planes = brw_select_clip_planes(ctx);
> -
>     for (int i = 0; i < key->nr_userclip_plane_consts; ++i) {
>        assert(this->uniforms < uniform_array_size);
>        this->uniform_vector_size[this->uniforms] = 4;
> --
> 2.4.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list