Re: [Mesa-dev] [PATCH 10/12] i965/fs: Reimplement emit_texture() in terms of logical send messages.

2015-07-22 Thread Jason Ekstrand
On Wed, Jul 22, 2015 at 12:41 AM, Francisco Jerez curroje...@riseup.net wrote:
 Jason Ekstrand ja...@jlekstrand.net writes:

 On Sat, Jul 18, 2015 at 7:34 AM, Francisco Jerez curroje...@riseup.net 
 wrote:
 ---
  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 66 
 +---
  1 file changed, 49 insertions(+), 17 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 index 89fcc49..4011639 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 @@ -861,6 +861,14 @@ fs_visitor::emit_texture(ir_texture_opcode op,
}
 }

 +   if (op == ir_query_levels) {
 +  /* textureQueryLevels() is implemented in terms of TXS so we need to
 +   * pass a valid LOD argument.
 +   */
 +  assert(lod.file == BAD_FILE);
 +  lod = fs_reg(0u);

 Why can't this go as part of the switch below?  It seems kind of odd
 to split the logic up like this.

 What I had in mind originally was to factor out the switch statement
 below into a separate function -- Later on I noticed that you wanted to
 rework emit_texture() and friends to stop using ir_texture_opcode as
 representation for the texturing operation, so you would likely want to
 get rid of the whole switch-case statement below or replace it with
 something else, so I didn't bother.  What are your current plans for
 emit_texture()?

At this point, we may just roll it into nir_emit_texture or we may
leave it alone.  In any case, we will want to get rid of the
ir_texture_opcode eventually.  Feel free to leave this patch as is.  I
can merge things or whatever as needed whenever we do that refactor.

 +   }
 +
 if (coordinate.file != BAD_FILE) {
/* FINISHME: Texture coordinate rescaling doesn't work with 
 non-constant
 * samplers.  This should only be a problem with GL_CLAMP on Gen7.
 @@ -873,26 +881,50 @@ fs_visitor::emit_texture(ir_texture_opcode op,
  * samples, so don't worry about them.
  */
 fs_reg dst = vgrf(glsl_type::get_instance(dest_type-base_type, 4, 1));
 +   const fs_reg srcs[] = {
 +  coordinate, shadow_c, lod, lod2,
 +  sample_index, mcs, sampler_reg, offset_value,
 +  fs_reg(coord_components), fs_reg(grad_components)
 +   };
 +   enum opcode opcode;

 -   if (devinfo-gen = 7) {
 -  inst = emit_texture_gen7(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, mcs, sampler_reg,
 -   offset_value);
 -   } else if (devinfo-gen = 5) {
 -  inst = emit_texture_gen5(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, sampler,
 -   offset_value.file != BAD_FILE);
 -   } else if (dispatch_width == 16) {
 -  inst = emit_texture_gen4_simd16(op, dst, coordinate, 
 coord_components,
 -  shadow_c, lod, sampler);
 -   } else {
 -  inst = emit_texture_gen4(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sampler);
 +   switch (op) {
 +   case ir_tex:
 +  opcode = SHADER_OPCODE_TEX_LOGICAL;
 +  break;
 +   case ir_txb:
 +  opcode = FS_OPCODE_TXB_LOGICAL;
 +  break;
 +   case ir_txl:
 +  opcode = SHADER_OPCODE_TXL_LOGICAL;
 +  break;
 +   case ir_txd:
 +  opcode = SHADER_OPCODE_TXD_LOGICAL;
 +  break;
 +   case ir_txf:
 +  opcode = SHADER_OPCODE_TXF_LOGICAL;
 +  break;
 +   case ir_txf_ms:
 +  opcode = SHADER_OPCODE_TXF_CMS_LOGICAL;
 +  break;
 +   case ir_txs:
 +   case ir_query_levels:
 +  opcode = SHADER_OPCODE_TXS_LOGICAL;
 +  break;
 +   case ir_lod:
 +  opcode = SHADER_OPCODE_LOD_LOGICAL;
 +  break;
 +   case ir_tg4:
 +  opcode = (offset_value.file != BAD_FILE  offset_value.file != IMM ?
 +SHADER_OPCODE_TG4_OFFSET_LOGICAL : 
 SHADER_OPCODE_TG4_LOGICAL);
 +  break;
 +   default:
 +  unreachable(not reached);

 Please choose something more descriptive than not reached.  How
 about invalid texture opcode

 Sure, I'll fix that, thanks.


 }

 +   inst = bld.emit(opcode, dst, srcs, ARRAY_SIZE(srcs));
 +   inst-regs_written = 4 * dispatch_width / 8;
 +
 if (shadow_c.file != BAD_FILE)
inst-shadow_compare = true;

 --
 2.4.3

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


Re: [Mesa-dev] [PATCH 10/12] i965/fs: Reimplement emit_texture() in terms of logical send messages.

2015-07-22 Thread Francisco Jerez
Jason Ekstrand ja...@jlekstrand.net writes:

 On Sat, Jul 18, 2015 at 7:34 AM, Francisco Jerez curroje...@riseup.net 
 wrote:
 ---
  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 66 
 +---
  1 file changed, 49 insertions(+), 17 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 index 89fcc49..4011639 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 @@ -861,6 +861,14 @@ fs_visitor::emit_texture(ir_texture_opcode op,
}
 }

 +   if (op == ir_query_levels) {
 +  /* textureQueryLevels() is implemented in terms of TXS so we need to
 +   * pass a valid LOD argument.
 +   */
 +  assert(lod.file == BAD_FILE);
 +  lod = fs_reg(0u);

 Why can't this go as part of the switch below?  It seems kind of odd
 to split the logic up like this.

What I had in mind originally was to factor out the switch statement
below into a separate function -- Later on I noticed that you wanted to
rework emit_texture() and friends to stop using ir_texture_opcode as
representation for the texturing operation, so you would likely want to
get rid of the whole switch-case statement below or replace it with
something else, so I didn't bother.  What are your current plans for
emit_texture()?

 +   }
 +
 if (coordinate.file != BAD_FILE) {
/* FINISHME: Texture coordinate rescaling doesn't work with 
 non-constant
 * samplers.  This should only be a problem with GL_CLAMP on Gen7.
 @@ -873,26 +881,50 @@ fs_visitor::emit_texture(ir_texture_opcode op,
  * samples, so don't worry about them.
  */
 fs_reg dst = vgrf(glsl_type::get_instance(dest_type-base_type, 4, 1));
 +   const fs_reg srcs[] = {
 +  coordinate, shadow_c, lod, lod2,
 +  sample_index, mcs, sampler_reg, offset_value,
 +  fs_reg(coord_components), fs_reg(grad_components)
 +   };
 +   enum opcode opcode;

 -   if (devinfo-gen = 7) {
 -  inst = emit_texture_gen7(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, mcs, sampler_reg,
 -   offset_value);
 -   } else if (devinfo-gen = 5) {
 -  inst = emit_texture_gen5(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, sampler,
 -   offset_value.file != BAD_FILE);
 -   } else if (dispatch_width == 16) {
 -  inst = emit_texture_gen4_simd16(op, dst, coordinate, coord_components,
 -  shadow_c, lod, sampler);
 -   } else {
 -  inst = emit_texture_gen4(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sampler);
 +   switch (op) {
 +   case ir_tex:
 +  opcode = SHADER_OPCODE_TEX_LOGICAL;
 +  break;
 +   case ir_txb:
 +  opcode = FS_OPCODE_TXB_LOGICAL;
 +  break;
 +   case ir_txl:
 +  opcode = SHADER_OPCODE_TXL_LOGICAL;
 +  break;
 +   case ir_txd:
 +  opcode = SHADER_OPCODE_TXD_LOGICAL;
 +  break;
 +   case ir_txf:
 +  opcode = SHADER_OPCODE_TXF_LOGICAL;
 +  break;
 +   case ir_txf_ms:
 +  opcode = SHADER_OPCODE_TXF_CMS_LOGICAL;
 +  break;
 +   case ir_txs:
 +   case ir_query_levels:
 +  opcode = SHADER_OPCODE_TXS_LOGICAL;
 +  break;
 +   case ir_lod:
 +  opcode = SHADER_OPCODE_LOD_LOGICAL;
 +  break;
 +   case ir_tg4:
 +  opcode = (offset_value.file != BAD_FILE  offset_value.file != IMM ?
 +SHADER_OPCODE_TG4_OFFSET_LOGICAL : 
 SHADER_OPCODE_TG4_LOGICAL);
 +  break;
 +   default:
 +  unreachable(not reached);

 Please choose something more descriptive than not reached.  How
 about invalid texture opcode

Sure, I'll fix that, thanks.


 }

 +   inst = bld.emit(opcode, dst, srcs, ARRAY_SIZE(srcs));
 +   inst-regs_written = 4 * dispatch_width / 8;
 +
 if (shadow_c.file != BAD_FILE)
inst-shadow_compare = true;

 --
 2.4.3



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


Re: [Mesa-dev] [PATCH 10/12] i965/fs: Reimplement emit_texture() in terms of logical send messages.

2015-07-21 Thread Jason Ekstrand
On Sat, Jul 18, 2015 at 7:34 AM, Francisco Jerez curroje...@riseup.net wrote:
 ---
  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 66 
 +---
  1 file changed, 49 insertions(+), 17 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 index 89fcc49..4011639 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 @@ -861,6 +861,14 @@ fs_visitor::emit_texture(ir_texture_opcode op,
}
 }

 +   if (op == ir_query_levels) {
 +  /* textureQueryLevels() is implemented in terms of TXS so we need to
 +   * pass a valid LOD argument.
 +   */
 +  assert(lod.file == BAD_FILE);
 +  lod = fs_reg(0u);

Why can't this go as part of the switch below?  It seems kind of odd
to split the logic up like this.

 +   }
 +
 if (coordinate.file != BAD_FILE) {
/* FINISHME: Texture coordinate rescaling doesn't work with 
 non-constant
 * samplers.  This should only be a problem with GL_CLAMP on Gen7.
 @@ -873,26 +881,50 @@ fs_visitor::emit_texture(ir_texture_opcode op,
  * samples, so don't worry about them.
  */
 fs_reg dst = vgrf(glsl_type::get_instance(dest_type-base_type, 4, 1));
 +   const fs_reg srcs[] = {
 +  coordinate, shadow_c, lod, lod2,
 +  sample_index, mcs, sampler_reg, offset_value,
 +  fs_reg(coord_components), fs_reg(grad_components)
 +   };
 +   enum opcode opcode;

 -   if (devinfo-gen = 7) {
 -  inst = emit_texture_gen7(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, mcs, sampler_reg,
 -   offset_value);
 -   } else if (devinfo-gen = 5) {
 -  inst = emit_texture_gen5(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sample_index, sampler,
 -   offset_value.file != BAD_FILE);
 -   } else if (dispatch_width == 16) {
 -  inst = emit_texture_gen4_simd16(op, dst, coordinate, coord_components,
 -  shadow_c, lod, sampler);
 -   } else {
 -  inst = emit_texture_gen4(op, dst, coordinate, coord_components,
 -   shadow_c, lod, lod2, grad_components,
 -   sampler);
 +   switch (op) {
 +   case ir_tex:
 +  opcode = SHADER_OPCODE_TEX_LOGICAL;
 +  break;
 +   case ir_txb:
 +  opcode = FS_OPCODE_TXB_LOGICAL;
 +  break;
 +   case ir_txl:
 +  opcode = SHADER_OPCODE_TXL_LOGICAL;
 +  break;
 +   case ir_txd:
 +  opcode = SHADER_OPCODE_TXD_LOGICAL;
 +  break;
 +   case ir_txf:
 +  opcode = SHADER_OPCODE_TXF_LOGICAL;
 +  break;
 +   case ir_txf_ms:
 +  opcode = SHADER_OPCODE_TXF_CMS_LOGICAL;
 +  break;
 +   case ir_txs:
 +   case ir_query_levels:
 +  opcode = SHADER_OPCODE_TXS_LOGICAL;
 +  break;
 +   case ir_lod:
 +  opcode = SHADER_OPCODE_LOD_LOGICAL;
 +  break;
 +   case ir_tg4:
 +  opcode = (offset_value.file != BAD_FILE  offset_value.file != IMM ?
 +SHADER_OPCODE_TG4_OFFSET_LOGICAL : 
 SHADER_OPCODE_TG4_LOGICAL);
 +  break;
 +   default:
 +  unreachable(not reached);

Please choose something more descriptive than not reached.  How
about invalid texture opcode

 }

 +   inst = bld.emit(opcode, dst, srcs, ARRAY_SIZE(srcs));
 +   inst-regs_written = 4 * dispatch_width / 8;
 +
 if (shadow_c.file != BAD_FILE)
inst-shadow_compare = true;

 --
 2.4.3

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


[Mesa-dev] [PATCH 10/12] i965/fs: Reimplement emit_texture() in terms of logical send messages.

2015-07-18 Thread Francisco Jerez
---
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 66 +---
 1 file changed, 49 insertions(+), 17 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 89fcc49..4011639 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -861,6 +861,14 @@ fs_visitor::emit_texture(ir_texture_opcode op,
   }
}
 
+   if (op == ir_query_levels) {
+  /* textureQueryLevels() is implemented in terms of TXS so we need to
+   * pass a valid LOD argument.
+   */
+  assert(lod.file == BAD_FILE);
+  lod = fs_reg(0u);
+   }
+
if (coordinate.file != BAD_FILE) {
   /* FINISHME: Texture coordinate rescaling doesn't work with non-constant
* samplers.  This should only be a problem with GL_CLAMP on Gen7.
@@ -873,26 +881,50 @@ fs_visitor::emit_texture(ir_texture_opcode op,
 * samples, so don't worry about them.
 */
fs_reg dst = vgrf(glsl_type::get_instance(dest_type-base_type, 4, 1));
+   const fs_reg srcs[] = {
+  coordinate, shadow_c, lod, lod2,
+  sample_index, mcs, sampler_reg, offset_value,
+  fs_reg(coord_components), fs_reg(grad_components)
+   };
+   enum opcode opcode;
 
-   if (devinfo-gen = 7) {
-  inst = emit_texture_gen7(op, dst, coordinate, coord_components,
-   shadow_c, lod, lod2, grad_components,
-   sample_index, mcs, sampler_reg,
-   offset_value);
-   } else if (devinfo-gen = 5) {
-  inst = emit_texture_gen5(op, dst, coordinate, coord_components,
-   shadow_c, lod, lod2, grad_components,
-   sample_index, sampler,
-   offset_value.file != BAD_FILE);
-   } else if (dispatch_width == 16) {
-  inst = emit_texture_gen4_simd16(op, dst, coordinate, coord_components,
-  shadow_c, lod, sampler);
-   } else {
-  inst = emit_texture_gen4(op, dst, coordinate, coord_components,
-   shadow_c, lod, lod2, grad_components,
-   sampler);
+   switch (op) {
+   case ir_tex:
+  opcode = SHADER_OPCODE_TEX_LOGICAL;
+  break;
+   case ir_txb:
+  opcode = FS_OPCODE_TXB_LOGICAL;
+  break;
+   case ir_txl:
+  opcode = SHADER_OPCODE_TXL_LOGICAL;
+  break;
+   case ir_txd:
+  opcode = SHADER_OPCODE_TXD_LOGICAL;
+  break;
+   case ir_txf:
+  opcode = SHADER_OPCODE_TXF_LOGICAL;
+  break;
+   case ir_txf_ms:
+  opcode = SHADER_OPCODE_TXF_CMS_LOGICAL;
+  break;
+   case ir_txs:
+   case ir_query_levels:
+  opcode = SHADER_OPCODE_TXS_LOGICAL;
+  break;
+   case ir_lod:
+  opcode = SHADER_OPCODE_LOD_LOGICAL;
+  break;
+   case ir_tg4:
+  opcode = (offset_value.file != BAD_FILE  offset_value.file != IMM ?
+SHADER_OPCODE_TG4_OFFSET_LOGICAL : SHADER_OPCODE_TG4_LOGICAL);
+  break;
+   default:
+  unreachable(not reached);
}
 
+   inst = bld.emit(opcode, dst, srcs, ARRAY_SIZE(srcs));
+   inst-regs_written = 4 * dispatch_width / 8;
+
if (shadow_c.file != BAD_FILE)
   inst-shadow_compare = true;
 
-- 
2.4.3

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