From 75666605c98e628ad6a88ef46ec7351588969ed5 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 15 Jun 2018 19:39:56 -0700 Subject: [PATCH] i965/vec4: Correctly handle uniform sources in generate_tes_add_indirect_urb_offset Fixes failure in the new piglit test tes-patch-input-array-vec2-index-invalid-rd.shader_test. Signed-off-by: Ian Romanick Reviewed-by: Kenneth Graunke Cc: mesa-stable@lists.freedesktop.org --- src/intel/compiler/brw_vec4_generator.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/intel/compiler/brw_vec4_generator.cpp b/src/intel/compiler/brw_vec4_generator.cpp index d506b675776..888cb358fd1 100644 --- a/src/intel/compiler/brw_vec4_generator.cpp +++ b/src/intel/compiler/brw_vec4_generator.cpp @@ -929,8 +929,21 @@ generate_tes_add_indirect_urb_offset(struct brw_codegen *p, brw_set_default_mask_control(p, BRW_MASK_DISABLE); brw_MOV(p, dst, header); + + /* Uniforms will have a stride <0;4,1>, and we need to convert to <0;1,0>. + * Other values get <4;1,0>. + */ + struct brw_reg restrided_offset; + if (offset.vstride == BRW_VERTICAL_STRIDE_0 && + offset.width == BRW_WIDTH_4 && + offset.hstride == BRW_HORIZONTAL_STRIDE_1) { + restrided_offset = stride(offset, 0, 1, 0); + } else { + restrided_offset = stride(offset, 4, 1, 0); + } + /* m0.3-0.4: 128-bit-granular offsets into the URB from the handles */ - brw_MOV(p, vec2(get_element_ud(dst, 3)), stride(offset, 4, 1, 0)); + brw_MOV(p, vec2(get_element_ud(dst, 3)), restrided_offset); brw_pop_insn_state(p); } -- 2.30.2