i965/fs: Remove the ir_visitor code
Now that everything is running through NIR, this is all dead. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
66a03a4c4b
commit
78644ffc4d
|
@ -1129,117 +1129,18 @@ fs_reg::fs_reg(enum register_file file, int reg, enum brw_reg_type type,
|
|||
this->width = width;
|
||||
}
|
||||
|
||||
fs_reg *
|
||||
fs_visitor::variable_storage(ir_variable *var)
|
||||
{
|
||||
return (fs_reg *)hash_table_find(this->variable_ht, var);
|
||||
}
|
||||
|
||||
void
|
||||
import_uniforms_callback(const void *key,
|
||||
void *data,
|
||||
void *closure)
|
||||
{
|
||||
struct hash_table *dst_ht = (struct hash_table *)closure;
|
||||
const fs_reg *reg = (const fs_reg *)data;
|
||||
|
||||
if (reg->file != UNIFORM)
|
||||
return;
|
||||
|
||||
hash_table_insert(dst_ht, data, key);
|
||||
}
|
||||
|
||||
/* For SIMD16, we need to follow from the uniform setup of SIMD8 dispatch.
|
||||
* This brings in those uniform definitions
|
||||
*/
|
||||
void
|
||||
fs_visitor::import_uniforms(fs_visitor *v)
|
||||
{
|
||||
hash_table_call_foreach(v->variable_ht,
|
||||
import_uniforms_callback,
|
||||
variable_ht);
|
||||
this->push_constant_loc = v->push_constant_loc;
|
||||
this->pull_constant_loc = v->pull_constant_loc;
|
||||
this->uniforms = v->uniforms;
|
||||
this->param_size = v->param_size;
|
||||
}
|
||||
|
||||
/* Our support for uniforms is piggy-backed on the struct
|
||||
* gl_fragment_program, because that's where the values actually
|
||||
* get stored, rather than in some global gl_shader_program uniform
|
||||
* store.
|
||||
*/
|
||||
void
|
||||
fs_visitor::setup_uniform_values(ir_variable *ir)
|
||||
{
|
||||
int namelen = strlen(ir->name);
|
||||
|
||||
/* The data for our (non-builtin) uniforms is stored in a series of
|
||||
* gl_uniform_driver_storage structs for each subcomponent that
|
||||
* glGetUniformLocation() could name. We know it's been set up in the same
|
||||
* order we'd walk the type, so walk the list of storage and find anything
|
||||
* with our name, or the prefix of a component that starts with our name.
|
||||
*/
|
||||
unsigned params_before = uniforms;
|
||||
for (unsigned u = 0; u < shader_prog->NumUserUniformStorage; u++) {
|
||||
struct gl_uniform_storage *storage = &shader_prog->UniformStorage[u];
|
||||
|
||||
if (strncmp(ir->name, storage->name, namelen) != 0 ||
|
||||
(storage->name[namelen] != 0 &&
|
||||
storage->name[namelen] != '.' &&
|
||||
storage->name[namelen] != '[')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned slots = storage->type->component_slots();
|
||||
if (storage->array_elements)
|
||||
slots *= storage->array_elements;
|
||||
|
||||
for (unsigned i = 0; i < slots; i++) {
|
||||
stage_prog_data->param[uniforms++] = &storage->storage[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* Make sure we actually initialized the right amount of stuff here. */
|
||||
assert(params_before + ir->type->component_slots() == uniforms);
|
||||
(void)params_before;
|
||||
}
|
||||
|
||||
|
||||
/* Our support for builtin uniforms is even scarier than non-builtin.
|
||||
* It sits on top of the PROG_STATE_VAR parameters that are
|
||||
* automatically updated from GL context state.
|
||||
*/
|
||||
void
|
||||
fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
|
||||
{
|
||||
const ir_state_slot *const slots = ir->get_state_slots();
|
||||
assert(slots != NULL);
|
||||
|
||||
for (unsigned int i = 0; i < ir->get_num_state_slots(); i++) {
|
||||
/* This state reference has already been setup by ir_to_mesa, but we'll
|
||||
* get the same index back here.
|
||||
*/
|
||||
int index = _mesa_add_state_reference(this->prog->Parameters,
|
||||
(gl_state_index *)slots[i].tokens);
|
||||
|
||||
/* Add each of the unique swizzles of the element as a parameter.
|
||||
* This'll end up matching the expected layout of the
|
||||
* array/matrix/structure we're trying to fill in.
|
||||
*/
|
||||
int last_swiz = -1;
|
||||
for (unsigned int j = 0; j < 4; j++) {
|
||||
int swiz = GET_SWZ(slots[i].swizzle, j);
|
||||
if (swiz == last_swiz)
|
||||
break;
|
||||
last_swiz = swiz;
|
||||
|
||||
stage_prog_data->param[uniforms++] =
|
||||
&prog->Parameters->ParameterValues[index][swiz];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fs_reg *
|
||||
fs_visitor::emit_fragcoord_interpolation(bool pixel_center_integer,
|
||||
bool origin_upper_left)
|
||||
|
|
|
@ -66,7 +66,7 @@ namespace brw {
|
|||
*
|
||||
* Translates either GLSL IR or Mesa IR (for ARB_fragment_program) into FS IR.
|
||||
*/
|
||||
class fs_visitor : public backend_shader, public ir_visitor
|
||||
class fs_visitor : public backend_shader
|
||||
{
|
||||
public:
|
||||
const fs_reg reg_null_f;
|
||||
|
@ -84,33 +84,12 @@ public:
|
|||
|
||||
~fs_visitor();
|
||||
|
||||
fs_reg *variable_storage(ir_variable *var);
|
||||
fs_reg vgrf(const glsl_type *const type);
|
||||
fs_reg vgrf(int num_components);
|
||||
void import_uniforms(fs_visitor *v);
|
||||
void setup_uniform_clipplane_values();
|
||||
void compute_clip_distance();
|
||||
|
||||
void visit(ir_variable *ir);
|
||||
void visit(ir_assignment *ir);
|
||||
void visit(ir_dereference_variable *ir);
|
||||
void visit(ir_dereference_record *ir);
|
||||
void visit(ir_dereference_array *ir);
|
||||
void visit(ir_expression *ir);
|
||||
void visit(ir_texture *ir);
|
||||
void visit(ir_if *ir);
|
||||
void visit(ir_constant *ir);
|
||||
void visit(ir_swizzle *ir);
|
||||
void visit(ir_return *ir);
|
||||
void visit(ir_loop *ir);
|
||||
void visit(ir_loop_jump *ir);
|
||||
void visit(ir_discard *ir);
|
||||
void visit(ir_call *ir);
|
||||
void visit(ir_function *ir);
|
||||
void visit(ir_function_signature *ir);
|
||||
void visit(ir_emit_vertex *);
|
||||
void visit(ir_end_primitive *);
|
||||
|
||||
uint32_t gather_channel(int orig_chan, uint32_t sampler);
|
||||
void swizzle_result(ir_texture_opcode op, int dest_components,
|
||||
fs_reg orig_val, uint32_t sampler);
|
||||
|
@ -308,25 +287,15 @@ public:
|
|||
fs_inst *emit_math(enum opcode op, fs_reg dst, fs_reg src0, fs_reg src1);
|
||||
fs_inst *emit_lrp(const fs_reg &dst, const fs_reg &x, const fs_reg &y,
|
||||
const fs_reg &a);
|
||||
void emit_minmax(enum brw_conditional_mod conditionalmod, const fs_reg &dst,
|
||||
const fs_reg &src0, const fs_reg &src1);
|
||||
void emit_discard_jump();
|
||||
/** Copy any live channel from \p src to the first channel of \p dst. */
|
||||
void emit_uniformize(const fs_reg &dst, const fs_reg &src);
|
||||
bool try_emit_b2f_of_comparison(ir_expression *ir);
|
||||
bool try_emit_saturate(ir_expression *ir);
|
||||
bool try_emit_line(ir_expression *ir);
|
||||
bool try_emit_mad(ir_expression *ir);
|
||||
bool try_replace_with_sel();
|
||||
bool try_opt_frontfacing_ternary(ir_if *ir);
|
||||
bool opt_peephole_sel();
|
||||
bool opt_peephole_predicated_break();
|
||||
bool opt_saturate_propagation();
|
||||
bool opt_cmod_propagation();
|
||||
bool opt_zero_samples();
|
||||
void emit_bool_to_cond_code(ir_rvalue *condition);
|
||||
void emit_bool_to_cond_code_of_reg(ir_expression *expr, fs_reg op[3]);
|
||||
void emit_if_gen6(ir_if *ir);
|
||||
void emit_unspill(bblock_t *block, fs_inst *inst, fs_reg reg,
|
||||
uint32_t spill_offset, int count);
|
||||
void emit_spill(bblock_t *block, fs_inst *inst, fs_reg reg,
|
||||
|
@ -377,23 +346,11 @@ public:
|
|||
void emit_untyped_surface_read(unsigned surf_index, fs_reg dst,
|
||||
fs_reg offset);
|
||||
|
||||
void emit_interpolate_expression(ir_expression *ir);
|
||||
|
||||
bool try_rewrite_rhs_to_dst(ir_assignment *ir,
|
||||
fs_reg dst,
|
||||
fs_reg src,
|
||||
fs_inst *pre_rhs_inst,
|
||||
fs_inst *last_rhs_inst);
|
||||
void emit_assignment_writes(fs_reg &l, fs_reg &r,
|
||||
const glsl_type *type, bool predicated);
|
||||
void resolve_ud_negate(fs_reg *reg);
|
||||
void resolve_bool_comparison(ir_rvalue *rvalue, fs_reg *reg);
|
||||
|
||||
fs_reg get_timestamp(fs_inst **out_mov);
|
||||
|
||||
struct brw_reg interp_reg(int location, int channel);
|
||||
void setup_uniform_values(ir_variable *ir);
|
||||
void setup_builtin_uniform_values(ir_variable *ir);
|
||||
int implied_mrf_writes(fs_inst *inst);
|
||||
|
||||
virtual void dump_instructions();
|
||||
|
@ -401,8 +358,6 @@ public:
|
|||
void dump_instruction(backend_instruction *inst);
|
||||
void dump_instruction(backend_instruction *inst, FILE *file);
|
||||
|
||||
void visit_atomic_counter_intrinsic(ir_call *ir);
|
||||
|
||||
const void *const key;
|
||||
const struct brw_sampler_prog_key_data *key_tex;
|
||||
|
||||
|
@ -438,7 +393,6 @@ public:
|
|||
*/
|
||||
int *push_constant_loc;
|
||||
|
||||
struct hash_table *variable_ht;
|
||||
fs_reg frag_depth;
|
||||
fs_reg sample_mask;
|
||||
fs_reg outputs[VARYING_SLOT_MAX];
|
||||
|
@ -465,7 +419,7 @@ public:
|
|||
bool simd16_unsupported;
|
||||
char *no16_msg;
|
||||
|
||||
/* Result of last visit() method. */
|
||||
/* Result of last visit() method. Still used by emit_texture() */
|
||||
fs_reg result;
|
||||
|
||||
/** Register numbers for thread payload fields. */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue