On 07/15/2014 05:28 AM, Ilia Mirkin wrote:
On Wed, Jul 9, 2014 at 9:06 AM, Brian Paul <bri...@vmware.com> wrote:
On 07/08/2014 08:40 PM, Ilia Mirkin wrote:

Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
---

With ChrisF's patches to add support for this in core mesa, this generates
code like:

FRAG
DCL OUT[0], COLOR
DCL CONST[0]
DCL CONST[1][0]
DCL CONST[2][0]
DCL CONST[3][0]
DCL CONST[4][0]
DCL TEMP[0], LOCAL
DCL ADDR[0..1]
IMM[0] UINT32 {0, 0, 0, 0}
IMM[1] INT32 {1, 0, 0, 0}
    0: UADD TEMP[0].x, CONST[0].xxxx, IMM[1].xxxx
    1: UARL ADDR[1].x, TEMP[0].xxxx
    2: UARL ADDR[1].x, TEMP[0].xxxx
    3: MOV TEMP[0], CONST[ADDR[1].x][0]
    4: MOV OUT[0], TEMP[0]
    5: END

Not sure what the deal is with the two UARL's, but nouveau's backend
removes
one of them pretty easily. I assume others handle this too.


Yeah, I noticed this too when I was doing some UBO work last week.  I
haven't had time to investigate yet.

Does this change look good though? Looks like Chris's non-const UBO
indexing patches are ~ready. With some tweaks to the nvc0 logic, the
simple tests pass on nouveau (and there are no 'complex' tests).

I'm not an expert on this code, but look OK AFAICT.

Reviewed-by: Brian Paul <bri...@vmware.com>




-Brian



Unfortunately the core patches aren't quite ready yet, but this patch
doesn't
regress anything.

   src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 20 +++++++++++++++++---
   1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 9bc7500..3202c56 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -1947,16 +1947,16 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
         break;

      case ir_binop_ubo_load: {
-      ir_constant *uniform_block = ir->operands[0]->as_constant();
+      ir_constant *const_uniform_block = ir->operands[0]->as_constant();
         ir_constant *const_offset_ir = ir->operands[1]->as_constant();
         unsigned const_offset = const_offset_ir ?
const_offset_ir->value.u[0] : 0;
+      unsigned const_block = const_uniform_block ?
const_uniform_block->value.u[0] + 1 : 0;
         st_src_reg index_reg = get_temp(glsl_type::uint_type);
         st_src_reg cbuf;

         cbuf.type = glsl_type::vec4_type->base_type;
         cbuf.file = PROGRAM_CONSTANT;
         cbuf.index = 0;
-      cbuf.index2D = uniform_block->value.u[0] + 1;
         cbuf.reladdr = NULL;
         cbuf.negate = 0;

@@ -1966,7 +1966,6 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
            /* Constant index into constant buffer */
            cbuf.reladdr = NULL;
            cbuf.index = const_offset / 16;
-         cbuf.has_index2 = true;
         }
         else {
            /* Relative/variable index into constant buffer */
@@ -1976,6 +1975,21 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
            memcpy(cbuf.reladdr, &index_reg, sizeof(index_reg));
         }

+      if (const_uniform_block) {
+         /* Constant constant buffer */
+         cbuf.reladdr2 = NULL;
+         cbuf.index2D = const_block;
+         cbuf.has_index2 = true;
+      }
+      else {
+         /* Relative/variable constant buffer */
+         emit(ir, TGSI_OPCODE_UADD, st_dst_reg(index_reg), op[0],
+              st_src_reg_for_int(1));
+         cbuf.reladdr2 = ralloc(mem_ctx, st_src_reg);
+         memcpy(cbuf.reladdr2, &index_reg, sizeof(index_reg));
+         cbuf.has_index2 = true;
+      }
+
         cbuf.swizzle = swizzle_for_size(ir->type->vector_elements);
         cbuf.swizzle += MAKE_SWIZZLE4(const_offset % 16 / 4,
                                       const_offset % 16 / 4,


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://urldefense.proofpoint.com/v1/url?u=http://lists.freedesktop.org/mailman/listinfo/mesa-dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=lGQMzzTgII0I7jefp2FHq7WtZ%2BTLs8wadB%2BiIj9xpBY%3D%0A&m=2PxC4euC4MUhdxrARICGkoYmsaKgMNJkIz%2BtzTOqBt0%3D%0A&s=d21974c40a550eabfa7fea826f13ec3c3f1e9a1f0fd99ad856975bac472793b5

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

Reply via email to