Similar to load_sampler_desc(). Same deal for bindless.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/gallium/drivers/radeonsi/si_shader.c | 45 +++++++++++++++++---------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index cf725cebd8..6b02d61e17 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -3230,6 +3230,24 @@ static LLVMTypeRef const_array(LLVMTypeRef elem_type, 
int num_elements)
                               CONST_ADDR_SPACE);
 }
 
+static LLVMValueRef load_image_desc(struct si_shader_context *ctx,
+                                   LLVMValueRef list, LLVMValueRef index,
+                                   unsigned target)
+{
+       LLVMBuilderRef builder = ctx->gallivm.builder;
+
+       if (target == TGSI_TEXTURE_BUFFER) {
+               index = LLVMBuildMul(builder, index,
+                                    LLVMConstInt(ctx->i32, 2, 0), "");
+               index = LLVMBuildAdd(builder, index,
+                                    LLVMConstInt(ctx->i32, 1, 0), "");
+               list = LLVMBuildPointerCast(builder, list,
+                                           const_array(ctx->v4i32, 0), "");
+       }
+
+       return ac_build_indexed_load_const(&ctx->ac, list, index);
+}
+
 /**
  * Load the resource descriptor for \p image.
  */
@@ -3243,8 +3261,8 @@ image_fetch_rsrc(
        struct si_shader_context *ctx = si_shader_context(bld_base);
        LLVMValueRef rsrc_ptr = LLVMGetParam(ctx->main_fn,
                                             SI_PARAM_IMAGES);
-       LLVMValueRef index, tmp;
-       bool dcc_off = target != TGSI_TEXTURE_BUFFER && is_store;
+       LLVMValueRef index;
+       bool dcc_off = is_store;
 
        assert(image->Register.File == TGSI_FILE_IMAGE);
 
@@ -3255,8 +3273,7 @@ image_fetch_rsrc(
 
                index = LLVMConstInt(ctx->i32, image->Register.Index, 0);
 
-               if (images_writemask & (1 << image->Register.Index) &&
-                   target != TGSI_TEXTURE_BUFFER)
+               if (images_writemask & (1 << image->Register.Index))
                        dcc_off = true;
        } else {
                /* From the GL_ARB_shader_image_load_store extension spec:
@@ -3273,23 +3290,9 @@ image_fetch_rsrc(
                                                   SI_NUM_IMAGES);
        }
 
-       if (target == TGSI_TEXTURE_BUFFER) {
-               LLVMBuilderRef builder = ctx->gallivm.builder;
-
-               rsrc_ptr = LLVMBuildPointerCast(builder, rsrc_ptr,
-                                               const_array(ctx->v4i32, 0), "");
-               index = LLVMBuildMul(builder, index,
-                                    LLVMConstInt(ctx->i32, 2, 0), "");
-               index = LLVMBuildAdd(builder, index,
-                                    LLVMConstInt(ctx->i32, 1, 0), "");
-               *rsrc = ac_build_indexed_load_const(&ctx->ac, rsrc_ptr, index);
-               return;
-       }
-
-       tmp = ac_build_indexed_load_const(&ctx->ac, rsrc_ptr, index);
-       if (dcc_off)
-               tmp = force_dcc_off(ctx, tmp);
-       *rsrc = tmp;
+       *rsrc = load_image_desc(ctx, rsrc_ptr, index, target);
+       if (dcc_off && target != TGSI_TEXTURE_BUFFER)
+               *rsrc = force_dcc_off(ctx, *rsrc);
 }
 
 static LLVMValueRef image_fetch_coords(
-- 
2.12.1

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

Reply via email to