This will be used by the generic implementation of the image and atomic counter built-ins to extract the register location of its arguments without having to be aware of the actual visitor type. --- src/mesa/drivers/dri/i965/brw_fs.h | 3 +++ src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 7 +++++++ src/mesa/drivers/dri/i965/brw_shader.h | 3 +++ src/mesa/drivers/dri/i965/brw_vec4.h | 3 +++ src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 7 +++++++ 5 files changed, 23 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 4f9767c..4ada075 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -237,6 +237,9 @@ public: void visit(ir_emit_vertex *); void visit(ir_end_primitive *); + /** Visit an instruction \p ir and extract the result. */ + virtual fs_reg &visit_result(ir_instruction *ir); + uint32_t gather_channel(ir_texture *ir, int sampler); void swizzle_result(ir_texture *ir, fs_reg orig_val, int sampler); diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index f45f089..b5957c6 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2874,6 +2874,13 @@ fs_visitor::resolve_bool_comparison(ir_rvalue *rvalue, fs_reg *reg) *reg = temp; } +fs_reg & +fs_visitor::visit_result(ir_instruction *ir) +{ + ir->accept(this); + return result; +} + fs_visitor::fs_visitor(struct brw_context *brw, struct brw_wm_compile *c, struct gl_shader_program *shader_prog, diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h index c31f76d..48382af 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.h +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -141,6 +141,9 @@ public: */ exec_list instructions; + /** Visit an instruction \p ir and extract the result. */ + virtual backend_reg &visit_result(ir_instruction *ir) = 0; + virtual void dump_instruction(backend_instruction *inst) = 0; void dump_instructions(); diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 50e4794..355d497 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -354,6 +354,9 @@ public: virtual void visit(ir_end_primitive *); /*@}*/ + /** Visit an instruction \p ir and extract the result. */ + virtual src_reg &visit_result(ir_instruction *ir); + src_reg result; /* Regs for vertex results. Generated at ir_variable visiting time diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 5b0ceea..97bd26d 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -3230,6 +3230,13 @@ vec4_visitor::resolve_ud_negate(src_reg *reg) *reg = temp; } +src_reg & +vec4_visitor::visit_result(ir_instruction *ir) +{ + ir->accept(this); + return result; +} + vec4_visitor::vec4_visitor(struct brw_context *brw, struct brw_vec4_compile *c, struct gl_program *prog, -- 1.8.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev