[Mesa-dev] [PATCH 2/2] radeonsi: add load_image_desc()
Samuel Pitoiset
samuel.pitoiset at gmail.com
Thu Mar 30 17:58:02 UTC 2017
Similar to load_sampler_desc(). Same deal for bindless.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at 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
More information about the mesa-dev
mailing list