mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-22 05:30:31 +01:00
i965/vs: Pass the current set of clip planes through run() and run_vs()
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. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
parent
4af62c0f5c
commit
663f8d121d
7 changed files with 20 additions and 23 deletions
|
|
@ -3803,7 +3803,7 @@ fs_visitor::allocate_registers()
|
|||
}
|
||||
|
||||
bool
|
||||
fs_visitor::run_vs()
|
||||
fs_visitor::run_vs(gl_clip_plane *clip_planes)
|
||||
{
|
||||
assert(stage == MESA_SHADER_VERTEX);
|
||||
|
||||
|
|
@ -3818,7 +3818,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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue