<div dir="ltr"><div>For the series:</div><div><br></div><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jan 21, 2019 at 9:29 PM Timothy Arceri <<a href="mailto:tarceri@itsqueeze.com">tarceri@itsqueeze.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">---<br>
 src/amd/common/ac_nir_to_llvm.c | 28 ++++++++++++++++++++++++++++<br>
 1 file changed, 28 insertions(+)<br>
<br>
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c<br>
index c558873bbe..161a8b2c34 100644<br>
--- a/src/amd/common/ac_nir_to_llvm.c<br>
+++ b/src/amd/common/ac_nir_to_llvm.c<br>
@@ -3303,6 +3303,27 @@ static void visit_intrinsic(struct ac_nir_context *ctx,<br>
        }<br>
 }<br>
<br>
+static LLVMValueRef get_bindless_index_from_uniform(struct ac_nir_context *ctx,<br>
+                                                   unsigned base_index,<br>
+                                                   unsigned constant_index,<br>
+                                                   LLVMValueRef dynamic_index)<br>
+{<br>
+       LLVMValueRef offset = LLVMConstInt(ctx->ac.i32, base_index * 4, 0);<br>
+       LLVMValueRef index = LLVMBuildAdd(ctx->ac.builder, dynamic_index,<br>
+                                         LLVMConstInt(ctx->ac.i32, constant_index, 0), "");<br>
+<br>
+       /* Bindless uniforms are 64bit so multiple index by 8 */<br>
+       index = LLVMBuildMul(ctx->ac.builder, index, LLVMConstInt(ctx->ac.i32, 8, 0), "");<br>
+       offset = LLVMBuildAdd(ctx->ac.builder, offset, index, "");<br>
+<br>
+       LLVMValueRef ubo_index = ctx->abi->load_ubo(ctx->abi, ctx->ac.i32_0);<br>
+<br>
+       LLVMValueRef ret = ac_build_buffer_load(&ctx->ac, ubo_index, 1, NULL, offset,<br>
+                                               NULL, 0, false, false, true, true);<br>
+<br>
+       return LLVMBuildBitCast(ctx->ac.builder, ret, ctx->ac.i32, "");<br>
+}<br>
+<br>
 static LLVMValueRef get_sampler_desc(struct ac_nir_context *ctx,<br>
                                     nir_deref_instr *deref_instr,<br>
                                     enum ac_descriptor_type desc_type,<br>
@@ -3353,8 +3374,15 @@ static LLVMValueRef get_sampler_desc(struct ac_nir_context *ctx,<br>
                descriptor_set = deref_instr->var->data.descriptor_set;<br>
<br>
                if (deref_instr->var->data.bindless) {<br>
+                       /* For now just assert on unhandled variable types */<br>
+                       assert(deref_instr->var->data.mode == nir_var_uniform);<br>
+<br>
                        base_index = deref_instr->var->data.driver_location;<br>
                        bindless = true;<br>
+<br>
+                       index = index ? index : ctx->ac.i32_0;<br>
+                       index = get_bindless_index_from_uniform(ctx, base_index,<br>
+                                                               constant_index, index);<br>
                } else<br>
                        base_index = deref_instr->var->data.binding;<br>
        }<br>
-- <br>
2.20.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div>