Re: [Mesa-dev] [PATCH 23/23] i965: Add polymorphic backend_visitor method to extract the result of a visit.

2013-12-30 Thread Paul Berry
On 2 December 2013 11:36, Francisco Jerez  wrote:

> 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.
>

I have the same concerns about object slicing with this patch that I had
with patch 06/23.

I've sent comments on patches 2, 4, 6, 8, 10, 13, 17, and 21.  The
remainder of this series is:

Reviewed-by: Paul Berry 
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 23/23] i965: Add polymorphic backend_visitor method to extract the result of a visit.

2013-12-02 Thread Francisco Jerez
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