From cb5edcd2154cbed69f9dfb0e6321a62a53af30fd Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 30 Jun 2020 15:19:47 -0400 Subject: [PATCH] panfrost: Expose MSAA 4x Signed-off-by: Alyssa Rosenzweig Part-of: --- .gitlab-ci/deqp-panfrost-t860-fails.txt | 197 ---------------------- src/gallium/drivers/panfrost/pan_screen.c | 3 - 2 files changed, 200 deletions(-) diff --git a/.gitlab-ci/deqp-panfrost-t860-fails.txt b/.gitlab-ci/deqp-panfrost-t860-fails.txt index 90e21e12af6..cd93d33d91c 100644 --- a/.gitlab-ci/deqp-panfrost-t860-fails.txt +++ b/.gitlab-ci/deqp-panfrost-t860-fails.txt @@ -85,63 +85,34 @@ dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_color dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_depth dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth -dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_stencil -dEQP-GLES3.functional.fbo.invalidate.sub.unbind_read_depth -dEQP-GLES3.functional.fbo.invalidate.sub.unbind_read_stencil dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_color dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_depth dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth -dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth_stencil dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_stencil -dEQP-GLES3.functional.fbo.invalidate.whole.unbind_read_color -dEQP-GLES3.functional.fbo.invalidate.whole.unbind_read_color_stencil dEQP-GLES3.functional.fbo.msaa.2_samples.depth24_stencil8 dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8 dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16 dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component24 dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component32f -dEQP-GLES3.functional.fbo.msaa.2_samples.r11f_g11f_b10f dEQP-GLES3.functional.fbo.msaa.2_samples.r16f -dEQP-GLES3.functional.fbo.msaa.2_samples.r32f -dEQP-GLES3.functional.fbo.msaa.2_samples.r8 dEQP-GLES3.functional.fbo.msaa.2_samples.rg16f -dEQP-GLES3.functional.fbo.msaa.2_samples.rg32f -dEQP-GLES3.functional.fbo.msaa.2_samples.rg8 -dEQP-GLES3.functional.fbo.msaa.2_samples.rgb10_a2 -dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565 -dEQP-GLES3.functional.fbo.msaa.2_samples.rgb5_a1 -dEQP-GLES3.functional.fbo.msaa.2_samples.rgb8 dEQP-GLES3.functional.fbo.msaa.2_samples.rgba16f -dEQP-GLES3.functional.fbo.msaa.2_samples.rgba32f -dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4 -dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8 -dEQP-GLES3.functional.fbo.msaa.2_samples.srgb8_alpha8 dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8 dEQP-GLES3.functional.fbo.msaa.4_samples.depth24_stencil8 dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8 dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16 dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24 dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f -dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f dEQP-GLES3.functional.fbo.msaa.4_samples.r16f dEQP-GLES3.functional.fbo.msaa.4_samples.r32f -dEQP-GLES3.functional.fbo.msaa.4_samples.r8 dEQP-GLES3.functional.fbo.msaa.4_samples.rg16f dEQP-GLES3.functional.fbo.msaa.4_samples.rg32f -dEQP-GLES3.functional.fbo.msaa.4_samples.rg8 -dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2 -dEQP-GLES3.functional.fbo.msaa.4_samples.rgb565 -dEQP-GLES3.functional.fbo.msaa.4_samples.rgb5_a1 -dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8 dEQP-GLES3.functional.fbo.msaa.4_samples.rgba16f dEQP-GLES3.functional.fbo.msaa.4_samples.rgba32f -dEQP-GLES3.functional.fbo.msaa.4_samples.rgba4 -dEQP-GLES3.functional.fbo.msaa.4_samples.rgba8 -dEQP-GLES3.functional.fbo.msaa.4_samples.srgb8_alpha8 dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8 dEQP-GLES3.functional.fbo.render.recreate_color.rbo_r11f_g11f_b10f_depth_stencil_rbo_depth24_stencil8 dEQP-GLES3.functional.fbo.render.recreate_color.rbo_r16f_depth_stencil_rbo_depth24_stencil8 @@ -276,174 +247,6 @@ dEQP-GLES3.functional.fbo.render.shared_depth_stencil.tex2d_rgba8_depth_tex2d_de dEQP-GLES3.functional.fbo.render.shared_depth_stencil.tex2d_rgba8_depth_tex2d_depth_component24 dEQP-GLES3.functional.fbo.render.shared_depth_stencil.tex2d_rgba8_depth_tex2d_depth_component32f dEQP-GLES3.functional.fence_sync.client_wait_sync_finish -dEQP-GLES3.functional.multisample.fbo_4_samples.common_edge_big_quad -dEQP-GLES3.functional.multisample.fbo_4_samples.common_edge_small_quads -dEQP-GLES3.functional.multisample.fbo_4_samples.common_edge_viewport_quad -dEQP-GLES3.functional.multisample.fbo_4_samples.constancy_alpha_to_coverage -dEQP-GLES3.functional.multisample.fbo_4_samples.constancy_both -dEQP-GLES3.functional.multisample.fbo_4_samples.constancy_both_inverted -dEQP-GLES3.functional.multisample.fbo_4_samples.constancy_sample_coverage -dEQP-GLES3.functional.multisample.fbo_4_samples.constancy_sample_coverage_inverted -dEQP-GLES3.functional.multisample.fbo_4_samples.depth -dEQP-GLES3.functional.multisample.fbo_4_samples.num_samples_line -dEQP-GLES3.functional.multisample.fbo_4_samples.num_samples_polygon -dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_alpha_to_coverage -dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_sample_coverage -dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_sample_coverage_inverted -dEQP-GLES3.functional.multisample.fbo_4_samples.sample_coverage_invert dEQP-GLES3.functional.multisample.fbo_4_samples.stencil -dEQP-GLES3.functional.multisample.fbo_max_samples.common_edge_big_quad -dEQP-GLES3.functional.multisample.fbo_max_samples.common_edge_small_quads -dEQP-GLES3.functional.multisample.fbo_max_samples.common_edge_viewport_quad -dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_alpha_to_coverage -dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_both -dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_both_inverted -dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage -dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage -dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted -dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert dEQP-GLES3.functional.multisample.fbo_max_samples.stencil -dEQP-GLES3.functional.negative_api.buffer.blit_framebuffer_multisample dEQP-GLES3.functional.negative_api.buffer.read_pixels_fbo_format_mismatch -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.fill_rules.basic_quad -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.fill_rules.basic_quad_reverse -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.fill_rules.clipped_full -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.fill_rules.clipped_partly -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.fill_rules.projected -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.interpolation.lines -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.interpolation.lines_wide -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.interpolation.triangles -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines_wide -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.points -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.triangles -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.fill_rules.projected -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.triangles -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points -dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.triangles -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp -dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_mediump -dEQP-GLES3.functional.state_query.integers.max_samples_getfloat -dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64 diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index c199dd71e32..0c246d22ddf 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -469,9 +469,6 @@ panfrost_is_format_supported( struct pipe_screen *screen, * hardware can go up to 16x but we don't support higher modes yet. * MSAA 2x is notably not supported and gets rounded up to MSAA 4x. */ - if (sample_count > 1 && !(pan_debug & (PAN_DBG_GL3 | PAN_DBG_DEQP))) - return false; - if (!(sample_count == 0 || sample_count == 1 || sample_count == 4)) return false; -- 2.30.2