[Mesa-dev] [PATCH] radv/ac: fix multisample subpass image.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Mon Jan 30 07:36:38 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Mon, Jan 30, 2017, at 07:14, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> We weren't adding the fragment position properly.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/common/ac_nir_to_llvm.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/src/amd/common/ac_nir_to_llvm.c
> b/src/amd/common/ac_nir_to_llvm.c
> index f83d0e1..8f5db73 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -2443,7 +2443,7 @@ static int image_type_to_components_count(enum
> glsl_sampler_dim dim, bool array)
>  }
>  
>  static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
> -                                    nir_intrinsic_instr *instr, bool
> add_frag_pos)
> +                                    nir_intrinsic_instr *instr)
>  {
>  	const struct glsl_type *type = instr->variables[0]->var->type;
>  	if(instr->variables[0]->deref.child)
> @@ -2458,6 +2458,8 @@ static LLVMValueRef get_image_coords(struct
> nir_to_llvm_context *ctx,
>  	LLVMValueRef res;
>  	int count;
>  	enum glsl_sampler_dim dim = glsl_get_sampler_dim(type);
> +       bool add_frag_pos = (dim == GLSL_SAMPLER_DIM_SUBPASS ||
> +                            dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
>  	bool is_ms = (dim == GLSL_SAMPLER_DIM_MS ||
>  		      dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
>  
> @@ -2583,12 +2585,11 @@ static LLVMValueRef visit_image_load(struct
> nir_to_llvm_context *ctx,
>  	} else {
>  		bool is_da = glsl_sampler_type_is_array(type) ||
>  			     glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
> -               bool add_frag_pos = glsl_get_sampler_dim(type) ==
> GLSL_SAMPLER_DIM_SUBPASS;
>  		LLVMValueRef da = is_da ? ctx->i32one : ctx->i32zero;
>  		LLVMValueRef glc = LLVMConstInt(ctx->i1, 0, false);
>  		LLVMValueRef slc = LLVMConstInt(ctx->i1, 0, false);
>  
> -               params[0] = get_image_coords(ctx, instr, add_frag_pos);
> +               params[0] = get_image_coords(ctx, instr);
>  		params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
>  		params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
>  		if (HAVE_LLVM <= 0x0309) {
> @@ -2647,7 +2648,7 @@ static void visit_image_store(struct
> nir_to_llvm_context *ctx,
>  		LLVMValueRef slc = i1false;
>  
>  		params[0] = to_float(ctx, get_src(ctx, instr->src[2]));
> -               params[1] = get_image_coords(ctx, instr, false); /*
> coords */
> +               params[1] = get_image_coords(ctx, instr); /* coords */
>  		params[2] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
>  		params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
>  		if (HAVE_LLVM <= 0x0309) {
> @@ -2707,7 +2708,7 @@ static LLVMValueRef visit_image_atomic(struct
> nir_to_llvm_context *ctx,
>  		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, false);
> +               coords = params[param_count++] = get_image_coords(ctx,
> instr);
>  		params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
>  		params[param_count++] = i1false; /* r128 */
>  		params[param_count++] = da ? i1true : i1false;      /* da */
> -- 
> 2.9.3
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list