Open Bug 1735120 Opened 4 years ago Updated 9 months ago

Firefox doesn't recognize GPU capabilities

Categories

(Core :: Graphics: CanvasWebGL, defect, P3)

Firefox 93
defect

Tracking

()

UNCONFIRMED

People

(Reporter: nn1436401, Unassigned)

Details

User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36

Steps to reproduce:

https://alteredqualia.com/tmp/webgl-maxparams-test/

According to this website, Firefox doesn't provide detect GPU correctly and doesn't provide all extensions available.
This makes Firefox to work much slower compared to Chrome.
Tests show that Chrome renders pages about 1.5x faster using less resources.

Actual results:

Firefox 93.0:

WebGL MAX parameters support

                 Max Vertex Attributes: 16
                   Max Varying Vectors: 15

            Max Vertex Uniform Vectors: 2047
          Max Fragment Uniform Vectors: 512

      Max Fragment Texture Image Units: 8
        Max Vertex Texture Image Units: 8
      Max Combined Texture Image Units: 30

                   Max 2D Texture Size: 8192
                 Max Cube Texture Size: 8192

                Max Texture Anisotropy: 16

                      Point Size Range: 1 - 1024
                      Line Width Range: 1 - 1

               Max Viewport Dimensions: 32767 - 16383
                 Max Renderbuffer Size: 16384

                  Framebuffer Red Bits: 8
                Framebuffer Green Bits: 8
                 Framebuffer Blue Bits: 8
                Framebuffer Alpha Bits: 8

                Framebuffer Depth Bits: 24
              Framebuffer Stencil Bits: 8
             Framebuffer Subpixel Bits: 4

                          MSAA Samples: 4
                   MSAA Sample Buffers: 1

Supported Formats for UByte Render Targets : RGBA RGB
Supported Formats for Half Float Render Targets: RGBA
Supported Formats for Full Float Render Targets: RGBA

   Max Multiple Render Targets Buffers: 8

 High Float Precision in Vertex Shader: 23 (-2127 - 2127)

Medium Float Precision in Vertex Shader: 23 (-2127 - 2127)
Low Float Precision in Vertex Shader: 23 (-2127 - 2127)

High Float Precision in Fragment Shader: 23 (-2127 - 2127)
Medium Float Precision in Fragment Shader: 23 (-2127 - 2127)
Low Float Precision in Fragment Shader: 23 (-2127 - 2127)

   High Int Precision in Vertex Shader: 0 (-231 - 230)
 Medium Int Precision in Vertex Shader: 0 (-231 - 230)
    Low Int Precision in Vertex Shader: 0 (-231 - 230)

 High Int Precision in Fragment Shader: 0 (-231 - 230)

Medium Int Precision in Fragment Shader: 0 (-231 - 230)
Low Int Precision in Fragment Shader: 0 (-231 - 230)

                  Supported Extensions: ANGLE_instanced_arrays
				    EXT_blend_minmax
				    EXT_color_buffer_half_float
				    EXT_float_blend
				    EXT_frag_depth
				    EXT_shader_texture_lod
				    EXT_sRGB
				    EXT_texture_compression_bptc
				    EXT_texture_compression_rgtc
				    EXT_texture_filter_anisotropic
				    OES_element_index_uint
				    OES_fbo_render_mipmap
				    OES_standard_derivatives
				    OES_texture_float
				    OES_texture_float_linear
				    OES_texture_half_float
				    OES_texture_half_float_linear
				    OES_vertex_array_object
				    WEBGL_color_buffer_float
				    WEBGL_compressed_texture_s3tc
				    WEBGL_compressed_texture_s3tc_srgb
				    WEBGL_debug_renderer_info
				    WEBGL_debug_shaders
				    WEBGL_depth_texture
				    WEBGL_draw_buffers
				    WEBGL_lose_context

                        WebGL Renderer: ANGLE (NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)
                          WebGL Vendor: Mozilla
                         WebGL Version: WebGL 1.0
              Shading Language Version: WebGL GLSL ES 1.0

                     Unmasked Renderer: ANGLE (NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)
                       Unmasked Vendor: Google Inc.

Firefox 95 Nighly shows much better result but still incorrect GPU:

WebGL MAX parameters support

                 Max Vertex Attributes: 16
                   Max Varying Vectors: 30

            Max Vertex Uniform Vectors: 4095
          Max Fragment Uniform Vectors: 1024

      Max Fragment Texture Image Units: 16
        Max Vertex Texture Image Units: 16
      Max Combined Texture Image Units: 32

                   Max 2D Texture Size: 16384
                 Max Cube Texture Size: 16384

                Max Texture Anisotropy: 16

                      Point Size Range: 1 - 1024
                      Line Width Range: 1 - 1

               Max Viewport Dimensions: 32767 - 32767
                 Max Renderbuffer Size: 16384

                  Framebuffer Red Bits: 8
                Framebuffer Green Bits: 8
                 Framebuffer Blue Bits: 8
                Framebuffer Alpha Bits: 8

                Framebuffer Depth Bits: 24
              Framebuffer Stencil Bits: 8
             Framebuffer Subpixel Bits: 4

                          MSAA Samples: 4
                   MSAA Sample Buffers: 1

Supported Formats for UByte Render Targets : RGBA RGB
Supported Formats for Half Float Render Targets: RGBA
Supported Formats for Full Float Render Targets: RGBA

   Max Multiple Render Targets Buffers: 8

 High Float Precision in Vertex Shader: 23 (-2127 - 2127)

Medium Float Precision in Vertex Shader: 23 (-2127 - 2127)
Low Float Precision in Vertex Shader: 23 (-2127 - 2127)

High Float Precision in Fragment Shader: 23 (-2127 - 2127)
Medium Float Precision in Fragment Shader: 23 (-2127 - 2127)
Low Float Precision in Fragment Shader: 23 (-2127 - 2127)

   High Int Precision in Vertex Shader: 0 (-231 - 230)
 Medium Int Precision in Vertex Shader: 0 (-231 - 230)
    Low Int Precision in Vertex Shader: 0 (-231 - 230)

 High Int Precision in Fragment Shader: 0 (-231 - 230)

Medium Int Precision in Fragment Shader: 0 (-231 - 230)
Low Int Precision in Fragment Shader: 0 (-231 - 230)

                  Supported Extensions: ANGLE_instanced_arrays
				    EXT_blend_minmax
				    EXT_color_buffer_half_float
				    EXT_float_blend
				    EXT_frag_depth
				    EXT_shader_texture_lod
				    EXT_sRGB
				    EXT_texture_compression_bptc
				    EXT_texture_compression_rgtc
				    EXT_texture_filter_anisotropic
				    OES_element_index_uint
				    OES_fbo_render_mipmap
				    OES_standard_derivatives
				    OES_texture_float
				    OES_texture_float_linear
				    OES_texture_half_float
				    OES_texture_half_float_linear
				    OES_vertex_array_object
				    WEBGL_color_buffer_float
				    WEBGL_compressed_texture_s3tc
				    WEBGL_compressed_texture_s3tc_srgb
				    WEBGL_debug_renderer_info
				    WEBGL_debug_shaders
				    WEBGL_depth_texture
				    WEBGL_draw_buffers
				    WEBGL_lose_context

                        WebGL Renderer: ANGLE (GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11-25.21.14.2531)
                          WebGL Vendor: Mozilla
                         WebGL Version: WebGL 1.0
              Shading Language Version: WebGL GLSL ES 1.0

                     Unmasked Renderer: ANGLE (GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11-25.21.14.2531)
                       Unmasked Vendor: Google Inc. (NVIDIA)

Expected results:

Chrome 94 shows correct GPU, and correct number of extensions:

WebGL MAX parameters support
Max Vertex Attributes: 16
Max Varying Vectors: 30

            Max Vertex Uniform Vectors: 4095
          Max Fragment Uniform Vectors: 1024

      Max Fragment Texture Image Units: 16
        Max Vertex Texture Image Units: 16
      Max Combined Texture Image Units: 32

                   Max 2D Texture Size: 16384
                 Max Cube Texture Size: 16384

                Max Texture Anisotropy: 16

                      Point Size Range: 1 - 1024
                      Line Width Range: 1 - 1

               Max Viewport Dimensions: 32767 - 32767
                 Max Renderbuffer Size: 16384

                  Framebuffer Red Bits: 8
                Framebuffer Green Bits: 8
                 Framebuffer Blue Bits: 8
                Framebuffer Alpha Bits: 8

                Framebuffer Depth Bits: 24
              Framebuffer Stencil Bits: 8
             Framebuffer Subpixel Bits: 4

                          MSAA Samples: 4
                   MSAA Sample Buffers: 1

Supported Formats for UByte Render Targets : RGBA RGB
Supported Formats for Half Float Render Targets: RGBA RGB
Supported Formats for Full Float Render Targets: RGBA RGB

   Max Multiple Render Targets Buffers: 8

 High Float Precision in Vertex Shader: 23 (-2127 - 2127)

Medium Float Precision in Vertex Shader: 23 (-2127 - 2127)
Low Float Precision in Vertex Shader: 23 (-2127 - 2127)

High Float Precision in Fragment Shader: 23 (-2127 - 2127)
Medium Float Precision in Fragment Shader: 23 (-2127 - 2127)
Low Float Precision in Fragment Shader: 23 (-2127 - 2127)

   High Int Precision in Vertex Shader: 0 (-231 - 230)
 Medium Int Precision in Vertex Shader: 0 (-231 - 230)
    Low Int Precision in Vertex Shader: 0 (-231 - 230)

 High Int Precision in Fragment Shader: 0 (-231 - 230)

Medium Int Precision in Fragment Shader: 0 (-231 - 230)
Low Int Precision in Fragment Shader: 0 (-231 - 230)

                  Supported Extensions: ANGLE_instanced_arrays
				    EXT_blend_minmax
				    EXT_color_buffer_half_float
				    EXT_disjoint_timer_query
				    EXT_float_blend
				    EXT_frag_depth
				    EXT_shader_texture_lod
				    EXT_texture_compression_bptc
				    EXT_texture_compression_rgtc
				    EXT_texture_filter_anisotropic
				    WEBKIT_EXT_texture_filter_anisotropic
				    EXT_sRGB
				    KHR_parallel_shader_compile
				    OES_element_index_uint
				    OES_fbo_render_mipmap
				    OES_standard_derivatives
				    OES_texture_float
				    OES_texture_float_linear
				    OES_texture_half_float
				    OES_texture_half_float_linear
				    OES_vertex_array_object
				    WEBGL_color_buffer_float
				    WEBGL_compressed_texture_s3tc
				    WEBKIT_WEBGL_compressed_texture_s3tc
				    WEBGL_compressed_texture_s3tc_srgb
				    WEBGL_debug_renderer_info
				    WEBGL_debug_shaders
				    WEBGL_depth_texture
				    WEBKIT_WEBGL_depth_texture
				    WEBGL_draw_buffers
				    WEBGL_lose_context
				    WEBKIT_WEBGL_lose_context
				    WEBGL_multi_draw

                        WebGL Renderer: WebKit WebGL
                          WebGL Vendor: WebKit
                         WebGL Version: WebGL 1.0 (OpenGL ES 2.0 Chromium)
              Shading Language Version: WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)

                     Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce GT 650M Direct3D11 vs_5_0 ps_5_0, D3D11-25.21.14.2531)
                       Unmasked Vendor: Google Inc. (NVIDIA)

The Bugbug bot thinks this bug should belong to the 'Core::JavaScript Engine' component, and is moving the bug to that component. Please revert this change in case you think the bot is wrong.

Component: Untriaged → JavaScript Engine
Product: Firefox → Core
Component: JavaScript Engine → Canvas: WebGL

The severity field is not set for this bug.
:jgilbert, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(jgilbert)

95 is an ANGLE update ahead of 93, so it's expected that it gives similar capabilities as Chrome.
Firefox doesn't report the exact GPU string anymore, as of 91: bug 1715690

Are there any other specific concerns you have? We are aware of some amount of performance differences between Firefox and Chrome, and we're chipping away at that already.

Flags: needinfo?(jgilbert) → needinfo?(nn1436401)

Glad to know about work in this area.
I would expect Firefox to be as fast as Chrome :)
Thanks.

Flags: needinfo?(nn1436401)

The severity field is not set for this bug.
:jgilbert, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(jgilbert)

Do you have a specific testcase that's slower in Firefox than Chrome?

Severity: -- → S4
Flags: needinfo?(jgilbert) → needinfo?(nn1436401)
Priority: -- → P3

https://web.basemark.com/
Chrome has 1.5 higher result than Firefox.

Flags: needinfo?(nn1436401)
You need to log in before you can comment on or make changes to this bug.