<div dir="ltr"><div class="gmail_quote">A bindless handle is a temporary (coming from a shader input, UBO, SSBO, image, or inline constant), so the bindless code shouldn't have any awareness of where it's coming from.<br></div><div class="gmail_quote"><br></div><div class="gmail_quote">Patches 1-4:</div><div class="gmail_quote"><br></div><div class="gmail_quote">Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>></div><div class="gmail_quote"><br></div><div class="gmail_quote">Marek<br></div><div class="gmail_quote"><div dir="ltr" class="m_-1477423880060399140gmail_attr"><br></div><div dir="ltr" class="m_-1477423880060399140gmail_attr">On Wed, Jan 9, 2019 at 3:54 AM Timothy Arceri <<a href="mailto:tarceri@itsqueeze.com" target="_blank">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/gallium/drivers/radeonsi/si_shader_nir.c | 33 +++++++++++++++++++-<br>
 1 file changed, 32 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c<br>
index 2c95c62d99..256ef28bb1 100644<br>
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c<br>
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c<br>
@@ -912,6 +912,28 @@ si_nir_lookup_interp_param(struct ac_shader_abi *abi,<br>
                LLVMGetParam(ctx->main_fn, interp_param_idx) : NULL;<br>
 }<br>
<br>
+static LLVMValueRef<br>
+get_bindless_index(struct ac_shader_abi *abi,<br>
+                  struct si_shader_context *ctx, unsigned base_index,<br>
+                  unsigned constant_index, LLVMValueRef dynamic_index)<br>
+{<br>
+       LLVMValueRef offset = LLVMConstInt(ctx->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->i32, 8, 0), "");<br>
+       offset = LLVMBuildAdd(ctx->ac.builder, offset, index, "");<br>
+<br>
+       LLVMValueRef ubo_index = abi->load_ubo(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->i32, "");<br>
+}<br>
+<br>
+<br>
 static LLVMValueRef<br>
 si_nir_load_sampler_desc(struct ac_shader_abi *abi,<br>
                         unsigned descriptor_set, unsigned base_index,<br>
@@ -937,8 +959,17 @@ si_nir_load_sampler_desc(struct ac_shader_abi *abi,<br>
                LLVMValueRef list =<br>
                        LLVMGetParam(ctx->main_fn, ctx->param_bindless_samplers_and_images);<br>
<br>
-               /* dynamic_index is the bindless handle */<br>
+               dynamic_index = dynamic_index ? dynamic_index : ctx->ac.i32_0;<br>
+               dynamic_index = get_bindless_index(abi, ctx, base_index,<br>
+                                                  constant_index, dynamic_index);<br>
+<br>
                if (image) {<br>
+                       /* For simplicity, bindless image descriptors use fixed<br>
+                        * 16-dword slots for now.<br>
+                        */<br>
+                       dynamic_index = LLVMBuildMul(ctx->ac.builder, dynamic_index,<br>
+                                            LLVMConstInt(ctx->i32, 2, 0), "");<br>
+<br>
                        return si_load_image_desc(ctx, list, dynamic_index, desc_type,<br>
                                                  dcc_off, true);<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></div>