Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
On Fri, Dec 30, 2016 at 6:22 AM, Dave Airlie <airl...@gmail.com> wrote: > From: Dave Airlie <airl...@redhat.com> > > This just adds the nir->llvm support, enabling > the extension causes some failures on llvm 3.9 at least, > but this code seems fine. > > NIR passes the sampler in src[1].x, and we LLVM/SI requires > it as the last parameters in the coords (coord[2] for 2D, > coord[3] for 2DArray). > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/amd/common/ac_nir_to_llvm.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c > index f214fcd..bc3a345 100644 > --- a/src/amd/common/ac_nir_to_llvm.c > +++ b/src/amd/common/ac_nir_to_llvm.c > @@ -2386,12 +2386,16 @@ static int image_type_to_components_count(enum > glsl_sampler_dim dim, bool array) > return array ? 2 : 1; > case GLSL_SAMPLER_DIM_2D: > return array ? 3 : 2; > + case GLSL_SAMPLER_DIM_MS: > + return array ? 4 : 3; > case GLSL_SAMPLER_DIM_3D: > case GLSL_SAMPLER_DIM_CUBE: > return 3; > case GLSL_SAMPLER_DIM_RECT: > case GLSL_SAMPLER_DIM_SUBPASS: > return 2; > + case GLSL_SAMPLER_DIM_SUBPASS_MS: > + return 3; > default: > break; > } > @@ -2413,7 +2417,11 @@ static LLVMValueRef get_image_coords(struct > nir_to_llvm_context *ctx, > }; > LLVMValueRef res; > int count; > - count = image_type_to_components_count(glsl_get_sampler_dim(type), > + enum glsl_sampler_dim dim = glsl_get_sampler_dim(type); > + bool is_ms = (dim == GLSL_SAMPLER_DIM_MS || > + dim == GLSL_SAMPLER_DIM_SUBPASS_MS); > + > + count = image_type_to_components_count(dim, > > glsl_sampler_type_is_array(type)); > > if (count == 1) { > @@ -2423,6 +2431,8 @@ static LLVMValueRef get_image_coords(struct > nir_to_llvm_context *ctx, > res = src0; > } else { > int chan; > + if (is_ms) > + count--; > for (chan = 0; chan < count; ++chan) { > coords[chan] = LLVMBuildExtractElement(ctx->builder, > src0, masks[chan], ""); > } > @@ -2431,6 +2441,11 @@ static LLVMValueRef get_image_coords(struct > nir_to_llvm_context *ctx, > for (chan = 0; chan < count; ++chan) > coords[chan] = LLVMBuildAdd(ctx->builder, > coords[chan], LLVMBuildFPToUI(ctx->builder, ctx->frag_pos[chan], ctx->i32, > ""), ""); > } > + if (is_ms) { > + coords[count] = llvm_extract_elem(ctx, get_src(ctx, > instr->src[1]), 0); > + count++; > + } > + > if (count == 3) { > coords[3] = LLVMGetUndef(ctx->i32); > count = 4; > -- > 2.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev