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