ac/nir: fix getting GLSL type of array of samplers for TG4
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 22 Aug 2018 12:42:51 +0000 (14:42 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 22 Aug 2018 13:23:11 +0000 (15:23 +0200)
This fixes a crash in build_tex_intrinsic() when trying to
launch the Basemark GPU benchmark on GFX8. It looks like
there is still something wrong because some frames are black.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106980
CC: 18.2 <mesa-stable@lists.freedesktop.org>
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/common/ac_nir_to_llvm.c

index 700e48e14b7afadc51f19254457b6bde18f9152b..90df1e0062373aaf7f34a0455ca33ffa07ae6764 100644 (file)
@@ -1163,7 +1163,8 @@ static LLVMValueRef lower_gather4_integer(struct ac_llvm_context *ctx,
                                          struct ac_image_args *args,
                                          const nir_tex_instr *instr)
 {
-       enum glsl_base_type stype = glsl_get_sampler_result_type(var->type);
+       const struct glsl_type *type = glsl_without_array(var->type);
+       enum glsl_base_type stype = glsl_get_sampler_result_type(type);
        LLVMValueRef half_texel[2];
        LLVMValueRef compare_cube_wa = NULL;
        LLVMValueRef result;
@@ -1348,7 +1349,8 @@ static LLVMValueRef build_tex_intrinsic(struct ac_nir_context *ctx,
        if (instr->op == nir_texop_tg4 && ctx->ac.chip_class <= VI) {
                nir_deref_instr *texture_deref_instr = get_tex_texture_deref(instr);
                nir_variable *var = nir_deref_instr_get_variable(texture_deref_instr);
-               enum glsl_base_type stype = glsl_get_sampler_result_type(var->type);
+               const struct glsl_type *type = glsl_without_array(var->type);
+               enum glsl_base_type stype = glsl_get_sampler_result_type(type);
                if (stype == GLSL_TYPE_UINT || stype == GLSL_TYPE_INT) {
                        return lower_gather4_integer(&ctx->ac, var, args, instr);
                }