Thanks, pushed.
On Mon, Jun 26, 2017 at 6:17 PM, Alex Smith <asm...@feralinteractive.com> wrote: > The buffer intrinsics should be used instead of the image ones. > > Signed-off-by: Alex Smith <asm...@feralinteractive.com> > Cc: <mesa-sta...@lists.freedesktop.org> > --- > This applies on top of James Legg's recent series [1], since they both > touch the same function. > > [1] https://lists.freedesktop.org/archives/mesa-dev/2017-June/160245.html > --- > src/amd/common/ac_nir_to_llvm.c | 63 > ++++++++++++++++++++++------------------- > 1 file changed, 34 insertions(+), 29 deletions(-) > > diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c > index 5e9f147..468ce4d 100644 > --- a/src/amd/common/ac_nir_to_llvm.c > +++ b/src/amd/common/ac_nir_to_llvm.c > @@ -3369,37 +3369,14 @@ static LLVMValueRef visit_image_atomic(struct > nir_to_llvm_context *ctx, > int param_count = 0; > const nir_variable *var = instr->variables[0]->var; > > - const char *base_name = "llvm.amdgcn.image.atomic"; > const char *atomic_name; > - LLVMValueRef coords; > - char intrinsic_name[41], coords_type[8]; > + char intrinsic_name[41]; > const struct glsl_type *type = glsl_without_array(var->type); > + MAYBE_UNUSED int length; > > if (ctx->stage == MESA_SHADER_FRAGMENT) > ctx->shader_info->fs.writes_memory = true; > > - params[param_count++] = get_src(ctx, instr->src[2]); > - if (instr->intrinsic == nir_intrinsic_image_atomic_comp_swap) > - params[param_count++] = get_src(ctx, instr->src[3]); > - > - if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) { > - params[param_count++] = get_sampler_desc(ctx, > instr->variables[0], DESC_BUFFER); > - coords = params[param_count++] = > LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]), > - > LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */ > - params[param_count++] = ctx->i32zero; /* voffset */ > - params[param_count++] = ctx->i1false; /* glc */ > - params[param_count++] = ctx->i1false; /* slc */ > - } else { > - bool da = glsl_sampler_type_is_array(type) || > - glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE; > - > - coords = params[param_count++] = get_image_coords(ctx, instr); > - params[param_count++] = get_sampler_desc(ctx, > instr->variables[0], DESC_IMAGE); > - params[param_count++] = ctx->i1false; /* r128 */ > - params[param_count++] = da ? ctx->i1true : ctx->i1false; > /* da */ > - params[param_count++] = ctx->i1false; /* slc */ > - } > - > switch (instr->intrinsic) { > case nir_intrinsic_image_atomic_add: > atomic_name = "add"; > @@ -3428,11 +3405,39 @@ static LLVMValueRef visit_image_atomic(struct > nir_to_llvm_context *ctx, > default: > abort(); > } > - build_int_type_name(LLVMTypeOf(coords), > - coords_type, sizeof(coords_type)); > > - MAYBE_UNUSED const int length = snprintf(intrinsic_name, > sizeof(intrinsic_name), > - "%s.%s.%s", base_name, > atomic_name, coords_type); > + params[param_count++] = get_src(ctx, instr->src[2]); > + if (instr->intrinsic == nir_intrinsic_image_atomic_comp_swap) > + params[param_count++] = get_src(ctx, instr->src[3]); > + > + if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) { > + params[param_count++] = get_sampler_desc(ctx, > instr->variables[0], DESC_BUFFER); > + params[param_count++] = LLVMBuildExtractElement(ctx->builder, > get_src(ctx, instr->src[0]), > + > LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */ > + params[param_count++] = ctx->i32zero; /* voffset */ > + params[param_count++] = ctx->i1false; /* slc */ > + > + length = snprintf(intrinsic_name, sizeof(intrinsic_name), > + "llvm.amdgcn.buffer.atomic.%s", > atomic_name); > + } else { > + char coords_type[8]; > + > + bool da = glsl_sampler_type_is_array(type) || > + glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE; > + > + LLVMValueRef coords = params[param_count++] = > get_image_coords(ctx, instr); > + params[param_count++] = get_sampler_desc(ctx, > instr->variables[0], DESC_IMAGE); > + params[param_count++] = ctx->i1false; /* r128 */ > + params[param_count++] = da ? ctx->i1true : ctx->i1false; > /* da */ > + params[param_count++] = ctx->i1false; /* slc */ > + > + build_int_type_name(LLVMTypeOf(coords), > + coords_type, sizeof(coords_type)); > + > + length = snprintf(intrinsic_name, sizeof(intrinsic_name), > + "llvm.amdgcn.image.atomic.%s.%s", > atomic_name, coords_type); > + } > + > assert(length < sizeof(intrinsic_name)); > return ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->i32, params, > param_count, 0); > } > -- > 2.9.4 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev