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() > +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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev