Re: [Mesa-dev] [PATCH 39/42] i965/fs: introduce blorp specific rt-write for fs_generator

2014-01-20 Thread Paul Berry
On 20 December 2013 06:39, Topi Pohjolainen topi.pohjolai...@intel.comwrote:

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
 b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
 index df91235..4c159e6 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
 @@ -190,6 +190,21 @@ fs_generator::generate_fb_write(fs_inst *inst)
 mark_surface_used(surf_index);
  }

 +void
 +fs_generator::generate_blorp_fb_write(fs_inst *inst)
 +{
 +   brw_fb_WRITE(p,
 +16 /* dispatch_width */,
 +inst-base_mrf,
 +brw_reg_from_fs_reg(inst-src[0]),
 +BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE,
 +1 /* BRW_BLORP_RENDERBUFFER_BINDING_TABLE_INDEX */,


This seems like it would lead to a maintenance burden if anyone ever
decides to change BRW_BLORP_RENDERBUFFER_BINDING_TABLE_INDEX to a number
other than 1.  Can we move the declaration of
BRW_BLORP_RENDERBUFFER_BINDING_TABLE_INDEX to somewhere that's accessible
to this file so that we can just pass it in directly?  Alternatively, we
could store it in inst-target.

With that issue addressed, this patch is:

Reviewed-by: Paul Berry stereotype...@gmail.com


 +inst-mlen,
 +0,
 +true,
 +inst-header_present);
 +}
 +

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


[Mesa-dev] [PATCH 39/42] i965/fs: introduce blorp specific rt-write for fs_generator

2013-12-20 Thread Topi Pohjolainen
The compiler for blorp programs likes to emit instructions for
the message construction itself meaning that the generator needs
to skip any such when blorp programs are translated for the hw.
In addition, the binding table control is special for blorp
programs and the generator does not need to update the binding
tables associated with the compiler bookkeeping (this in fact
gets thrown away as the blorp compiler sets the program data
in its own way).

Signed-off-by: Topi Pohjolainen topi.pohjolai...@intel.com
---
 src/mesa/drivers/dri/i965/brw_defines.h|  1 +
 src/mesa/drivers/dri/i965/brw_fs.h |  1 +
 src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 19 +++
 src/mesa/drivers/dri/i965/brw_shader.cpp   |  2 ++
 4 files changed, 23 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h 
b/src/mesa/drivers/dri/i965/brw_defines.h
index 5ee4165..6a3050e 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -752,6 +752,7 @@ enum opcode {
 * instructions.
 */
FS_OPCODE_FB_WRITE = 128,
+   FS_OPCODE_BLORP_FB_WRITE,
SHADER_OPCODE_RCP,
SHADER_OPCODE_RSQ,
SHADER_OPCODE_SQRT,
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
b/src/mesa/drivers/dri/i965/brw_fs.h
index d40d0a8..2137aee 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -518,6 +518,7 @@ private:
void generate_code(exec_list *instructions, bool dump_enabled,
   FILE *dump_file);
void generate_fb_write(fs_inst *inst);
+   void generate_blorp_fb_write(fs_inst *inst);
void generate_pixel_xy(struct brw_reg dst, bool is_x);
void generate_linterp(fs_inst *inst, struct brw_reg dst,
 struct brw_reg *src);
diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
index df91235..4c159e6 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
@@ -190,6 +190,21 @@ fs_generator::generate_fb_write(fs_inst *inst)
mark_surface_used(surf_index);
 }
 
+void
+fs_generator::generate_blorp_fb_write(fs_inst *inst)
+{
+   brw_fb_WRITE(p,
+16 /* dispatch_width */,
+inst-base_mrf,
+brw_reg_from_fs_reg(inst-src[0]),
+BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE,
+1 /* BRW_BLORP_RENDERBUFFER_BINDING_TABLE_INDEX */,
+inst-mlen,
+0,
+true,
+inst-header_present);
+}
+
 /* Computes the integer pixel x,y values from the origin.
  *
  * This is the basis of gl_FragCoord computation, but is also used
@@ -1715,6 +1730,10 @@ fs_generator::generate_code(exec_list *instructions, 
bool dump_enabled,
 generate_fb_write(inst);
 break;
 
+  case FS_OPCODE_BLORP_FB_WRITE:
+generate_blorp_fb_write(inst);
+break;
+
   case FS_OPCODE_MOV_DISPATCH_TO_FLAGS:
  generate_mov_dispatch_to_flags(inst);
  break;
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index c0683a8..bf792c4 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -413,6 +413,8 @@ brw_instruction_name(enum opcode op)
switch (op) {
case FS_OPCODE_FB_WRITE:
   return fb_write;
+   case FS_OPCODE_BLORP_FB_WRITE:
+  return blorp_fb_write;
 
case SHADER_OPCODE_RCP:
   return rcp;
-- 
1.8.3.1

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