diff --git a/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-skips.txt b/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-skips.txt index 1d9014cd84b..f9b1ce2e406 100644 --- a/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-skips.txt +++ b/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-skips.txt @@ -16,3 +16,10 @@ dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.36 # Some compute jobs take more 0.5s, the maximum allowed by the # kernel driver dEQP-GLES31.functional.draw_indirect.compute_interop.large.* + +# Numerical instability causes failures with FP16. Forcing highp in the GLSL +# compiler is one workaround, but these tests are suspected to be buggy with a +# fix pending upstream. See +# https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10394 +dEQP-GLES3.functional.shaders.matrix.inverse.dynamic.mediump_mat2_float_vertex +dEQP-GLES3.functional.shaders.matrix.inverse.dynamic.lowp_mat2_float_vertex diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index df14f65ebeb..2649a39d4f1 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -63,7 +63,6 @@ static const struct debug_named_value panfrost_debug_options[] = { {"deqp", PAN_DBG_DEQP, "Hacks for dEQP"}, {"sync", PAN_DBG_SYNC, "Wait for each job's completion and check for any GPU fault"}, {"precompile", PAN_DBG_PRECOMPILE, "Precompile shaders for shader-db"}, - {"fp16", PAN_DBG_FP16, "Enable 16-bit support"}, {"nofp16", PAN_DBG_NOFP16, "Disable 16-bit support"}, {"gl3", PAN_DBG_GL3, "Enable experimental GL 3.x implementation, up to 3.3"}, {"noafbc", PAN_DBG_NO_AFBC, "Disable AFBC support"}, @@ -322,7 +321,6 @@ panfrost_get_shader_param(struct pipe_screen *screen, { struct panfrost_device *dev = pan_device(screen); bool is_deqp = dev->debug & PAN_DBG_DEQP; - bool is_fp16 = dev->debug & PAN_DBG_FP16; bool is_nofp16 = dev->debug & PAN_DBG_NOFP16; if (shader != PIPE_SHADER_VERTEX && @@ -379,13 +377,18 @@ panfrost_get_shader_param(struct pipe_screen *screen, case PIPE_SHADER_CAP_INTEGERS: return 1; + /* The Bifrost compiler supports full 16-bit. Midgard could but int16 + * support is untested, so restrict INT16 to Bifrost. Midgard + * architecturally cannot support fp16 derivatives. */ + case PIPE_SHADER_CAP_FP16: case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS: - return (!is_nofp16 && !pan_is_bifrost(dev)) || is_fp16; - + return !is_nofp16; case PIPE_SHADER_CAP_FP16_DERIVATIVES: - case PIPE_SHADER_CAP_FP16_CONST_BUFFERS: case PIPE_SHADER_CAP_INT16: + case PIPE_SHADER_CAP_FP16_CONST_BUFFERS: + return pan_is_bifrost(dev) && !is_nofp16; + case PIPE_SHADER_CAP_INT64_ATOMICS: case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED: case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED: diff --git a/src/panfrost/lib/pan_util.h b/src/panfrost/lib/pan_util.h index 0fa7a1efcb7..bdac9984ec9 100644 --- a/src/panfrost/lib/pan_util.h +++ b/src/panfrost/lib/pan_util.h @@ -38,7 +38,6 @@ #define PAN_DBG_NO_CRC 0x0080 #define PAN_DBG_GL3 0x0100 #define PAN_DBG_NO_AFBC 0x0200 -#define PAN_DBG_FP16 0x0400 -#define PAN_DBG_MSAA16 0x0800 +#define PAN_DBG_MSAA16 0x0400 #endif /* PAN_UTIL_H */