On 19.08.2015 01:42, Marek Olšák wrote:
> From: Marek Olšák <marek.ol...@amd.com>
> 
> FMASK wasn't handled correctly.
> ---
>  src/gallium/drivers/radeonsi/si_shader.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
> b/src/gallium/drivers/radeonsi/si_shader.c
> index 4288e9b..066732d 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -2277,7 +2277,7 @@ static void tex_fetch_args(
>       unsigned sampler_index;
>       unsigned num_deriv_channels = 0;
>       bool has_offset = HAVE_LLVM >= 0x0305 ? inst->Texture.NumOffsets > 0 : 
> false;
> -     LLVMValueRef res_ptr, samp_ptr;
> +     LLVMValueRef res_ptr, samp_ptr, fmask_ptr = NULL;
>  
>       sampler_src = emit_data->inst->Instruction.NumSrcRegs - 1;
>       sampler_index = emit_data->inst->Src[sampler_src].Register.Index;
> @@ -2293,9 +2293,19 @@ static void tex_fetch_args(
>  
>               samp_ptr = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, 
> SI_PARAM_SAMPLER);
>               samp_ptr = build_indexed_load_const(si_shader_ctx, samp_ptr, 
> ind_index);
> +
> +             if (target == TGSI_TEXTURE_2D_MSAA ||
> +                 target == TGSI_TEXTURE_2D_ARRAY_MSAA) {
> +                     ind_index = LLVMBuildAdd(gallivm->builder, ind_index,
> +                                              lp_build_const_int32(gallivm,
> +                                                                   
> SI_FMASK_TEX_OFFSET), "");
> +                     fmask_ptr = 
> LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, SI_PARAM_RESOURCE);
> +                     fmask_ptr = build_indexed_load_const(si_shader_ctx, 
> res_ptr, ind_index);
> +             }
>       } else {
>               res_ptr = si_shader_ctx->resources[sampler_index];
>               samp_ptr = si_shader_ctx->samplers[sampler_index];
> +             fmask_ptr = si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + 
> sampler_index];
>       }
>  
>       if (target == TGSI_TEXTURE_BUFFER) {
> @@ -2493,7 +2503,7 @@ static void tex_fetch_args(
>               txf_emit_data.dst_type = LLVMVectorType(
>                       LLVMInt32TypeInContext(gallivm->context), 4);
>               txf_emit_data.args[0] = lp_build_gather_values(gallivm, 
> txf_address, txf_count);
> -             txf_emit_data.args[1] = 
> si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + sampler_index];
> +             txf_emit_data.args[1] = fmask_ptr;
>               txf_emit_data.args[2] = lp_build_const_int32(gallivm, 
> inst.Texture.Texture);
>               txf_emit_data.arg_count = 3;
>  
> @@ -2524,8 +2534,7 @@ static void tex_fetch_args(
>                * resource descriptor is 0 (invalid),
>                */
>               LLVMValueRef fmask_desc =
> -                     LLVMBuildBitCast(gallivm->builder,
> -                                      
> si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + sampler_index],
> +                     LLVMBuildBitCast(gallivm->builder, fmask_ptr,
>                                        LLVMVectorType(uint_bld->elem_type, 
> 8), "");
>  
>               LLVMValueRef fmask_word1 =
> 

Reviewed-by: Michel Dänzer <michel.daen...@amd.com>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to