Mesa (master): radeonsi: add load_image_desc()

Samuel Pitoiset hakzsam at kemper.freedesktop.org
Sat Apr 1 16:10:08 UTC 2017


Module: Mesa
Branch: master
Commit: 515165ff0e5f0674d79a2a4ea2904a609d521346
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=515165ff0e5f0674d79a2a4ea2904a609d521346

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Thu Mar 30 19:58:02 2017 +0200

radeonsi: add load_image_desc()

Similar to load_sampler_desc(). Same deal for bindless.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.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 2ca53dec70..38760109f0 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -3249,6 +3249,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.
  */
@@ -3262,8 +3280,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);
 
@@ -3274,8 +3292,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:
@@ -3292,23 +3309,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(




More information about the mesa-commit mailing list