i965/vec4: Delete the old ir_visitor code
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
b85761d11d
commit
1153f12076
|
@ -65,7 +65,7 @@ class vec4_live_variables;
|
|||
* Translates either GLSL IR or Mesa IR (for ARB_vertex_program and
|
||||
* fixed-function) into VS IR.
|
||||
*/
|
||||
class vec4_visitor : public backend_shader, public ir_visitor
|
||||
class vec4_visitor : public backend_shader
|
||||
{
|
||||
public:
|
||||
vec4_visitor(const struct brw_compiler *compiler,
|
||||
|
@ -116,44 +116,8 @@ public:
|
|||
brw::vec4_live_variables *live_intervals;
|
||||
dst_reg userplane[MAX_CLIP_PLANES];
|
||||
|
||||
dst_reg *variable_storage(ir_variable *var);
|
||||
|
||||
void reladdr_to_temp(ir_instruction *ir, src_reg *reg, int *num_reladdr);
|
||||
|
||||
bool need_all_constants_in_pull_buffer;
|
||||
|
||||
/**
|
||||
* \name Visit methods
|
||||
*
|
||||
* As typical for the visitor pattern, there must be one \c visit method for
|
||||
* each concrete subclass of \c ir_instruction. Virtual base classes within
|
||||
* the hierarchy should not have \c visit methods.
|
||||
*/
|
||||
/*@{*/
|
||||
virtual void visit(ir_variable *);
|
||||
virtual void visit(ir_loop *);
|
||||
virtual void visit(ir_loop_jump *);
|
||||
virtual void visit(ir_function_signature *);
|
||||
virtual void visit(ir_function *);
|
||||
virtual void visit(ir_expression *);
|
||||
virtual void visit(ir_swizzle *);
|
||||
virtual void visit(ir_dereference_variable *);
|
||||
virtual void visit(ir_dereference_array *);
|
||||
virtual void visit(ir_dereference_record *);
|
||||
virtual void visit(ir_assignment *);
|
||||
virtual void visit(ir_constant *);
|
||||
virtual void visit(ir_call *);
|
||||
virtual void visit(ir_return *);
|
||||
virtual void visit(ir_discard *);
|
||||
virtual void visit(ir_texture *);
|
||||
virtual void visit(ir_if *);
|
||||
virtual void visit(ir_emit_vertex *);
|
||||
virtual void visit(ir_end_primitive *);
|
||||
virtual void visit(ir_barrier *);
|
||||
/*@}*/
|
||||
|
||||
src_reg result;
|
||||
|
||||
/* Regs for vertex results. Generated at ir_variable visiting time
|
||||
* for the ir->location's used.
|
||||
*/
|
||||
|
@ -166,16 +130,12 @@ public:
|
|||
|
||||
src_reg shader_start_time;
|
||||
|
||||
struct hash_table *variable_ht;
|
||||
|
||||
bool run();
|
||||
void fail(const char *msg, ...);
|
||||
|
||||
virtual void setup_vec4_uniform_value(unsigned param_offset,
|
||||
const gl_constant_value *values,
|
||||
unsigned n);
|
||||
void setup_uniform_values(ir_variable *ir);
|
||||
void setup_builtin_uniform_values(ir_variable *ir);
|
||||
int setup_uniforms(int payload_reg);
|
||||
|
||||
bool reg_allocate_trivial();
|
||||
|
@ -271,21 +231,9 @@ public:
|
|||
|
||||
int implied_mrf_writes(vec4_instruction *inst);
|
||||
|
||||
bool try_rewrite_rhs_to_dst(ir_assignment *ir,
|
||||
dst_reg dst,
|
||||
src_reg src,
|
||||
vec4_instruction *pre_rhs_inst,
|
||||
vec4_instruction *last_rhs_inst);
|
||||
|
||||
/** Walks an exec_list of ir_instruction and sends it through this visitor. */
|
||||
void visit_instructions(const exec_list *list);
|
||||
|
||||
void emit_vp_sop(enum brw_conditional_mod condmod, dst_reg dst,
|
||||
src_reg src0, src_reg src1, src_reg one);
|
||||
|
||||
void emit_bool_to_cond_code(ir_rvalue *ir, enum brw_predicate *predicate);
|
||||
void emit_if_gen6(ir_if *ir);
|
||||
|
||||
vec4_instruction *emit_minmax(enum brw_conditional_mod conditionalmod, dst_reg dst,
|
||||
src_reg src0, src_reg src1);
|
||||
|
||||
|
@ -298,22 +246,11 @@ public:
|
|||
*/
|
||||
src_reg emit_uniformize(const src_reg &src);
|
||||
|
||||
void emit_block_move(dst_reg *dst, src_reg *src,
|
||||
const struct glsl_type *type, brw_predicate predicate);
|
||||
|
||||
void emit_constant_values(dst_reg *dst, ir_constant *value);
|
||||
|
||||
/**
|
||||
* Emit the correct dot-product instruction for the type of arguments
|
||||
*/
|
||||
void emit_dp(dst_reg dst, src_reg src0, src_reg src1, unsigned elements);
|
||||
|
||||
void emit_scalar(ir_instruction *ir, enum prog_opcode op,
|
||||
dst_reg dst, src_reg src0);
|
||||
|
||||
void emit_scalar(ir_instruction *ir, enum prog_opcode op,
|
||||
dst_reg dst, src_reg src0, src_reg src1);
|
||||
|
||||
src_reg fix_3src_operand(const src_reg &src);
|
||||
src_reg resolve_source_modifiers(const src_reg &src);
|
||||
|
||||
|
@ -389,20 +326,13 @@ public:
|
|||
src_reg emit_resolve_reladdr(int scratch_loc[], bblock_t *block,
|
||||
vec4_instruction *inst, src_reg src);
|
||||
|
||||
bool try_emit_mad(ir_expression *ir);
|
||||
bool try_emit_b2f_of_compare(ir_expression *ir);
|
||||
void resolve_ud_negate(src_reg *reg);
|
||||
void resolve_bool_comparison(ir_rvalue *rvalue, src_reg *reg);
|
||||
|
||||
src_reg get_timestamp();
|
||||
|
||||
bool process_move_condition(ir_rvalue *ir);
|
||||
|
||||
void dump_instruction(backend_instruction *inst);
|
||||
void dump_instruction(backend_instruction *inst, FILE *file);
|
||||
|
||||
void visit_atomic_counter_intrinsic(ir_call *ir);
|
||||
|
||||
bool is_high_sampler(src_reg sampler);
|
||||
|
||||
virtual void emit_nir_code();
|
||||
|
@ -457,7 +387,6 @@ protected:
|
|||
virtual void emit_thread_end() = 0;
|
||||
virtual void emit_urb_write_header(int mrf) = 0;
|
||||
virtual vec4_instruction *emit_urb_write_opcode(bool complete) = 0;
|
||||
virtual int compute_array_stride(ir_dereference_array *ir);
|
||||
virtual void gs_emit_vertex(int stream_id);
|
||||
virtual void gs_end_primitive();
|
||||
|
||||
|
|
|
@ -310,24 +310,6 @@ vec4_gs_visitor::emit_urb_write_opcode(bool complete)
|
|||
}
|
||||
|
||||
|
||||
int
|
||||
vec4_gs_visitor::compute_array_stride(ir_dereference_array *ir)
|
||||
{
|
||||
/* Geometry shader inputs are arrays, but they use an unusual array layout:
|
||||
* instead of all array elements for a given geometry shader input being
|
||||
* stored consecutively, all geometry shader inputs are interleaved into
|
||||
* one giant array. At this stage of compilation, we assume that the
|
||||
* stride of the array is BRW_VARYING_SLOT_COUNT. Later,
|
||||
* setup_attributes() will remap our accesses to the actual input array.
|
||||
*/
|
||||
ir_dereference_variable *deref_var = ir->array->as_dereference_variable();
|
||||
if (deref_var && deref_var->var->data.mode == ir_var_shader_in)
|
||||
return BRW_VARYING_SLOT_COUNT;
|
||||
else
|
||||
return vec4_visitor::compute_array_stride(ir);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write out a batch of 32 control data bits from the control_data_bits
|
||||
* register to the URB.
|
||||
|
@ -575,27 +557,6 @@ vec4_gs_visitor::gs_emit_vertex(int stream_id)
|
|||
this->current_annotation = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
vec4_gs_visitor::visit(ir_emit_vertex *ir)
|
||||
{
|
||||
/* To ensure that we don't output more vertices than the shader specified
|
||||
* using max_vertices, do the logic inside a conditional of the form "if
|
||||
* (vertex_count < MAX)"
|
||||
*/
|
||||
unsigned num_output_vertices = c->gp->program.VerticesOut;
|
||||
emit(CMP(dst_null_d(), this->vertex_count,
|
||||
src_reg(num_output_vertices), BRW_CONDITIONAL_L));
|
||||
emit(IF(BRW_PREDICATE_NORMAL));
|
||||
|
||||
gs_emit_vertex(ir->stream_id());
|
||||
|
||||
this->current_annotation = "emit vertex: increment vertex count";
|
||||
emit(ADD(dst_reg(this->vertex_count), this->vertex_count,
|
||||
src_reg(1u)));
|
||||
|
||||
emit(BRW_OPCODE_ENDIF);
|
||||
}
|
||||
|
||||
void
|
||||
vec4_gs_visitor::gs_end_primitive()
|
||||
{
|
||||
|
@ -647,12 +608,6 @@ vec4_gs_visitor::gs_end_primitive()
|
|||
emit(OR(dst_reg(this->control_data_bits), this->control_data_bits, mask));
|
||||
}
|
||||
|
||||
void
|
||||
vec4_gs_visitor::visit(ir_end_primitive *)
|
||||
{
|
||||
gs_end_primitive();
|
||||
}
|
||||
|
||||
static const unsigned *
|
||||
generate_assembly(struct brw_context *brw,
|
||||
struct gl_shader_program *shader_prog,
|
||||
|
|
|
@ -87,9 +87,6 @@ protected:
|
|||
virtual void emit_thread_end();
|
||||
virtual void emit_urb_write_header(int mrf);
|
||||
virtual vec4_instruction *emit_urb_write_opcode(bool complete);
|
||||
virtual int compute_array_stride(ir_dereference_array *ir);
|
||||
virtual void visit(ir_emit_vertex *);
|
||||
virtual void visit(ir_end_primitive *);
|
||||
virtual void gs_emit_vertex(int stream_id);
|
||||
virtual void gs_end_primitive();
|
||||
virtual void nir_emit_intrinsic(nir_intrinsic_instr *instr);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -146,27 +146,6 @@ gen6_gs_visitor::emit_prolog()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
gen6_gs_visitor::visit(ir_emit_vertex *ir)
|
||||
{
|
||||
/* To ensure that we don't output more vertices than the shader specified
|
||||
* using max_vertices, do the logic inside a conditional of the form "if
|
||||
* (vertex_count < MAX)"
|
||||
*/
|
||||
unsigned num_output_vertices = c->gp->program.VerticesOut;
|
||||
emit(CMP(dst_null_d(), this->vertex_count,
|
||||
src_reg(num_output_vertices), BRW_CONDITIONAL_L));
|
||||
emit(IF(BRW_PREDICATE_NORMAL));
|
||||
|
||||
gs_emit_vertex(ir->stream_id());
|
||||
|
||||
this->current_annotation = "emit vertex: increment vertex count";
|
||||
emit(ADD(dst_reg(this->vertex_count), this->vertex_count,
|
||||
src_reg(1u)));
|
||||
|
||||
emit(BRW_OPCODE_ENDIF);
|
||||
}
|
||||
|
||||
void
|
||||
gen6_gs_visitor::gs_emit_vertex(int stream_id)
|
||||
{
|
||||
|
@ -230,12 +209,6 @@ gen6_gs_visitor::gs_emit_vertex(int stream_id)
|
|||
this->vertex_output_offset, 1u));
|
||||
}
|
||||
|
||||
void
|
||||
gen6_gs_visitor::visit(ir_end_primitive *)
|
||||
{
|
||||
gs_end_primitive();
|
||||
}
|
||||
|
||||
void
|
||||
gen6_gs_visitor::gs_end_primitive()
|
||||
{
|
||||
|
@ -356,9 +329,7 @@ gen6_gs_visitor::emit_thread_end()
|
|||
if (c->gp->program.OutputType != GL_POINTS) {
|
||||
emit(CMP(dst_null_d(), this->first_vertex, 0u, BRW_CONDITIONAL_Z));
|
||||
emit(IF(BRW_PREDICATE_NORMAL));
|
||||
{
|
||||
visit((ir_end_primitive *) NULL);
|
||||
}
|
||||
gs_end_primitive();
|
||||
emit(BRW_OPCODE_ENDIF);
|
||||
}
|
||||
|
||||
|
|
|
@ -49,8 +49,6 @@ protected:
|
|||
virtual void assign_binding_table_offsets();
|
||||
virtual void emit_prolog();
|
||||
virtual void emit_thread_end();
|
||||
virtual void visit(ir_emit_vertex *);
|
||||
virtual void visit(ir_end_primitive *);
|
||||
virtual void gs_emit_vertex(int stream_id);
|
||||
virtual void gs_end_primitive();
|
||||
virtual void emit_urb_write_header(int mrf);
|
||||
|
|
Loading…
Reference in New Issue