mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-19 08:28:21 +02:00
radv: Implement buffer stores with less than 4 components.
We started using it in the btoi paths for r32g32b32, and the LLVM IR checker will complain about it because we end up with intrinsics with the wrong type extension in the name. Fixes:593996bc02("radv: implement buffer to image operations for R32G32B32") Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> (cherry picked from commit9a45a190ad) Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Conflicts: src/amd/common/ac_nir_to_llvm.c
This commit is contained in:
parent
666ffbbae5
commit
e5b1fde8c2
1 changed files with 13 additions and 3 deletions
|
|
@ -2380,17 +2380,27 @@ static void visit_image_store(struct ac_nir_context *ctx,
|
|||
glc = ctx->ac.i1true;
|
||||
|
||||
if (dim == GLSL_SAMPLER_DIM_BUF) {
|
||||
char name[48];
|
||||
const char *types[] = { "f32", "v2f32", "v4f32" };
|
||||
LLVMValueRef rsrc = get_image_buffer_descriptor(ctx, instr, true);
|
||||
LLVMValueRef src = ac_to_float(&ctx->ac, get_src(ctx, instr->src[3]));
|
||||
unsigned src_channels = ac_get_llvm_num_components(src);
|
||||
|
||||
params[0] = ac_to_float(&ctx->ac, get_src(ctx, instr->src[3])); /* data */
|
||||
if (src_channels == 3)
|
||||
src = ac_build_expand(&ctx->ac, src, 3, 4);
|
||||
|
||||
params[0] = src; /* data */
|
||||
params[1] = rsrc;
|
||||
params[2] = LLVMBuildExtractElement(ctx->ac.builder, get_src(ctx, instr->src[1]),
|
||||
ctx->ac.i32_0, ""); /* vindex */
|
||||
params[3] = ctx->ac.i32_0; /* voffset */
|
||||
snprintf(name, sizeof(name), "%s.%s",
|
||||
"llvm.amdgcn.buffer.store.format",
|
||||
types[CLAMP(src_channels, 1, 3) - 1]);
|
||||
|
||||
params[4] = glc; /* glc */
|
||||
params[5] = ctx->ac.i1false; /* slc */
|
||||
ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.store.format.v4f32", ctx->ac.voidt,
|
||||
params, 6, 0);
|
||||
ac_build_intrinsic(&ctx->ac, name, ctx->ac.voidt, params, 6, 0);
|
||||
} else {
|
||||
struct ac_image_args args = {};
|
||||
args.opcode = ac_image_store;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue