Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardware acceleration broken on Wayland Ozone #162

Closed
Cir-0 opened this issue Jun 3, 2023 · 40 comments
Closed

Hardware acceleration broken on Wayland Ozone #162

Cir-0 opened this issue Jun 3, 2023 · 40 comments

Comments

@Cir-0
Copy link

Cir-0 commented Jun 3, 2023

System Details

  • OS: CachyOS (Based on Arch Linux, using kernel 6.3.5-1-cachyos-pds-lto)
  • Thorium Version 113.0.5672.134
  • GPU: AMD Radeon RX 6650 XT (Navi 23), Driver: amdgpu
  • CPU: Intel Core i5 36000k (Raptor Lake)
  • Software Versions: X.org server v21.1.8-1.1, Xwayland v23.1.1-1.1, Mesa v23.1.1-2, Wayland v1.22.0-1.1, Hyprland v0.26.0-1.1

Problem
I am running Hyprland (v0.26.0-1.1), a tiling Wayland compositor. By default, Thorium launches using Xwayland.
When manually setting the "Preferred Ozone platform" to "Wayland" in the flags, I noticed that it takes about 15 seconds to launch. When launched from a terminal, it outputs:

[5539:1:0603/020635.231510:ERROR:command_buffer_proxy_impl.cc(128)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.
[5434:5434:0603/020635.232068:ERROR:gpu_process_host.cc(953)] GPU process exited unexpectedly: exit_code=7
[5434:5434:0603/020640.385249:ERROR:gpu_process_host.cc(953)] GPU process exited unexpectedly: exit_code=7
[5434:5434:0603/020645.528644:ERROR:gpu_process_host.cc(953)] GPU process exited unexpectedly: exit_code=7
[5539:7:0603/020645.568771:ERROR:command_buffer_proxy_impl.cc(128)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.
[5540:7:0603/020645.568827:ERROR:command_buffer_proxy_impl.cc(128)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.

When disabling hardware acceleration in the settings, or launching with the parameters "--disable-gpu" or "--disable-gpu-compositing", it launches immediately, of course, with hardware acceleration disabled, but I would like it to be enabled and not running through Xwayland.

Additional Notes
If launched with the parameter "--disable-gpu-process-crash-limit", it will output
GPU process exited unexpectedly: exit_code=7
indefinitely. I tried to look in the "Chromium code search" documentation, but could not find what exit code 7 means (I am not a programmer).

I had this same issue with Thorium v112, on Hyprland v0.25 as well.

Regular Chromium (Version 114.0.5735.90 (Official Build) Arch Linux (64-bit)) does not have this issue and launches without error when "Preferred Ozone platform" is set to "Wayland", with hardware acceleration enabled.

@archerallstars
Copy link

@oksakhartman

On stock chromium everything works fine for a long time without any patches with --enable-features=VaapiVideoDecodeLinuxGL

I believe this flag only works on X11, not Wayland.

However, I am here to say that hardware acceleration doesn't work on Wayland (not XWayland). I am running on openSUSE Tumbleweed, Intel iGPU - UHD Graphics 620 (KBL GT2).

@Alex313031
Copy link
Owner

@kreaninw @oksakhartman @Cir-0 The patches related to HW decoding and acceleration are not outdated, and are either made by me, or from ungoogled chromium which keeps them up to date. I have forced VaapiVideoDecodeLinuxGL to true in source code, so setting that from the cmdline will not help anything.

I could make a beta build without any of the HW accel patches for ya'll to test. I could also look at what modifications that AUR package uses. I used to use the chromium-vaapi AUR package (made by the same maintainer, similar patches, just for X11) and it worked well.

Continuous, stable, easy (no manual fiddeling) hardware acceleration has been a shitshow on linux for a while now, on anything but a X11 + intel graphics system.

@Alex313031
Copy link
Owner

@oksakhartman Yeah then it must be my patches. Might have to remove some or all of them, or refactor them.

@Alex313031
Copy link
Owner

Alex313031 commented Jun 7, 2023

@oksakhartman @Cir-0 I'm pretty sure its this patch I use > https://github.com/ungoogled-software/ungoogled-chromium-archlinux/blob/master/ozone-add-va-api-support-to-wayland.patch It hasn't been updated since last year! I have simply been rebasing the files by adding/deleting lines as needed by comparing my current one with upstream's one.

It is probably breaking it. Instead I will use the patch from the wayland-vaapi AUR package.

Although I will add this to the repo soon, this will not come to users (you) until M114. I sometimes will rebuild to fix major crashes, but in general, I don't update, rebuild, and re-release a major Thorium version.

@Alex313031
Copy link
Owner

@kreaninw @oksakhartman @Cir-0 Please try the M114 version, and see if it fixes some or all of y'alls problems.

@archerallstars
Copy link

archerallstars commented Jun 24, 2023

@kreaninw @oksakhartman @Cir-0 Please try the M114 version, and see if it fixes some or all of y'alls problems.

Thanks, I tried it, but it doesn't fix the issue. Here's some log that's occurred as soon as I played the video:

ERR: Display.cpp:1023 (initialize): ANGLE Display::initialize error 12289: Could not make the initialization pbuffer current.
ERR: Display.cpp:1023 (initialize): ANGLE Display::initialize error 12289: Could not make the initialization pbuffer current.
[8306:8306:0623/212217.690441:ERROR:gl_display.cc(520)] EGL Driver message (Critical) eglInitialize: Could not make the initialization pbuffer current.
ERR: Display.cpp:1023 (initialize): ANGLE Display::initialize error 12289: Could not make the initialization pbuffer current.
ERR: Display.cpp:1023 (initialize): ANGLE Display::initialize error 12289: Could not make the initialization pbuffer current.
[8306:8306:0623/212217.692660:ERROR:gl_display.cc(520)] EGL Driver message (Critical) eglInitialize: Could not make the initialization pbuffer current.

Note: I already blocked AV1 which is not HWA supported on my GPU.

Note 2: There's an upstream bug opening: https://bugs.chromium.org/p/chromium/issues/detail?id=1326754

@Cir-0
Copy link
Author

Cir-0 commented Jun 26, 2023

@kreaninw @oksakhartman @Cir-0 Please try the M114 version, and see if it fixes some or all of y'alls problems.

v114 seems to have fixed the issue for me. I ran it right from the .zip's binary (I typically have it installed from the AUR but it hasn't been updated there yet), and with ozone hinting set to Wayland and hardware acceleration enabled, it launches right away in Wayland mode (not Xwayland), without the previous issues or terminal output.

Looking at "chrome://gpu", it has the same feature status as regular Chromium, except Thorium has "Video Encode" set to "Hardware accelerated", while regular Chomium has "Video Encode" set to "Software only. Hardware acceleration disabled".

Here's the "Video Acceleration Information" in Thorium from chrome://gpu:

Decode h264 baseline
16x16 to 4096x4096 pixels
Decode h264 main
16x16 to 4096x4096 pixels
Decode h264 high
16x16 to 4096x4096 pixels
Decode vp9 profile0
16x16 to 8192x4352 pixels
Encode h264 baseline
321x241 to 4096x2160 pixels, and/or 30.000 fps.
Encode h264 main
321x241 to 4096x2160 pixels, and/or 30.000 fps.
Encode h264 high
321x241 to 4096x2160 pixels, and/or 30.000 fps.

I'm not sure if other codecs, like AV1, are supposed to be here.

It might be worth noting that viewing a 4k video on Youtube uses ~15% CPU usage with Thorium, ~10% CPU usage in regular Chromium, and less than 1% CPU usage with Firefox Developer Edition (in Wayland mode with hardware acceleration enabled), which tells me that either hardware acceleration isn't working with youtube videos (VP9 codec) in Thorium/Chromium, or not as well as it should. Most video content I watch is through Youtube, so I will be sticking with Firefox for now until Thorium/Chromium can get CPU usage on par with Firefox. (I use Firefox instead of Mercury because Firefox is more stable for me, and Mercury is too out of date for me to comfortably use.)

@ariankordi
Copy link

Chiming in myself here, I noticed that decoding and encoding actually worked pretty well by ENABLING UseChromeOSDirectVideoDecoder up until 114. (i5-6300U, Intel(R) HD Graphics 520 (SKL GT2))
113 looked like this:
image
Then 114 started doing this???
image

The VDA decoder never worked for me personally, it has always shown hardware acceleration on with H.264 encoding and decoding in the Video Acceleration Information, but I always see logs like this:

[4389:4389:0729/130008.904971:ERROR:gl_display.cc(520)] : EGL Driver message (Critical) eglInitialize: Could not make the initialization pbuffer current.
[4389:4389:0729/130008.909743:ERROR:gl_display.cc(520)] : EGL Driver message (Critical) eglInitialize: Could not make the initialization pbuffer current.

Let me know if more information is needed from me, I'm on Debian 12 using the intel-media-va-driver-non-free. Using the free one causes nothing to show up in Video Acceleration Information, with video encode and decode still being hardware accelerated at the top of the page???

@Alex313031
Copy link
Owner

@kreaninw @ariankordi @oksakhartman @Cir-0 I have once again tried to fix this in the M115 release. Can ya'll please test and report back.

@konradmb
Copy link

Not working for me, although I have a different GPU (Intel 4th gen Haswell HD 4400). Tried with a lot of different flags combination.

@ariankordi
Copy link

Same here, now the entire Video Acceleration Information section is blank for me 😕 with ChromeOSDirectVideoEncoder on or off, using intel-media-va-driver-non-free and free, on a fresh profile...

@gz83
Copy link
Collaborator

gz83 commented Aug 13, 2023

Please provide the full content of the chrome://gpu page and upload it here

@konradmb @ariankordi

@konradmb
Copy link

chrome://gpu/ without any flags
Graphics Feature Status
Canvas: Hardware accelerated
Canvas out-of-process rasterization: Disabled
Direct Rendering Display Compositor: Disabled
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
OpenGL: Enabled
Rasterization: Hardware accelerated
Raw Draw: Disabled
Skia Graphite: Disabled
Video Decode: Hardware accelerated
Video Encode: Software only. Hardware acceleration disabled
Vulkan: Disabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
WebGPU: Disabled
Driver Bug Workarounds
adjust_src_dst_region_for_blitframebuffer
clear_uniforms_before_first_program_use
count_all_in_varyings_packing
disable_post_sub_buffers_for_onscreen_surfaces
enable_webgl_timer_query_extensions
exit_on_context_lost
msaa_is_slow
msaa_is_slow_2
rely_on_implicit_sync_for_swap_buffers
disabled_extension_GL_KHR_blend_equation_advanced
disabled_extension_GL_KHR_blend_equation_advanced_coherent
disabled_extension_GL_MESA_framebuffer_flip_y
Problems Detected
WebGPU has been disabled via blocklist or the command line.
Disabled Features: webgpu
Accelerated video encode has been disabled, either via blocklist, about:flags or the command line.
Disabled Features: video_encode
Clear uniforms before first program use on all platforms: [124764](http://crbug.com/124764), [349137](http://crbug.com/349137)
Applied Workarounds: clear_uniforms_before_first_program_use
Mesa drivers in Linux handle varyings without static use incorrectly: [333885](http://crbug.com/333885)
Applied Workarounds: count_all_in_varyings_packing
Disable partial swaps on Mesa drivers (detected with GL_RENDERER): [339493](http://crbug.com/339493)
Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfaces
On Intel GPUs MSAA performance is not acceptable for GPU rasterization: [527565](http://crbug.com/527565), [1298585](http://crbug.com/1298585)
Applied Workarounds: msaa_is_slow
Disable partial swaps on Mesa drivers (detected with GL_VERSION): [339493](http://crbug.com/339493)
Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfaces
adjust src/dst region if blitting pixels outside framebuffer on Linux Intel: [664740](http://crbug.com/664740)
Applied Workarounds: adjust_src_dst_region_for_blitframebuffer
Disable KHR_blend_equation_advanced until cc shaders are updated: [661715](http://crbug.com/661715)
Applied Workarounds: disable(GL_KHR_blend_equation_advanced), disable(GL_KHR_blend_equation_advanced_coherent)
Expose WebGL's disjoint_timer_query extensions on platforms with site isolation: [808744](http://crbug.com/808744), [870491](http://crbug.com/870491)
Applied Workarounds: enable_webgl_timer_query_extensions
Some drivers can't recover after OUT_OF_MEM and context lost: [893177](http://crbug.com/893177)
Applied Workarounds: exit_on_context_lost
Avoid waiting on a egl fence before swapping buffers and rely on implicit sync on Intel GPUs: [938286](http://crbug.com/938286)
Applied Workarounds: rely_on_implicit_sync_for_swap_buffers
Disable GL_MESA_framebuffer_flip_y for desktop GL: [964010](http://crbug.com/964010)
Applied Workarounds: disable(GL_MESA_framebuffer_flip_y)
On pre-Ice Lake Intel GPUs MSAA performance is not acceptable for GPU rasterization: [527565](http://crbug.com/527565), [1298585](http://crbug.com/1298585), [1341830](http://crbug.com/1341830)
Applied Workarounds: msaa_is_slow_2
ANGLE Features
allowCompressedFormats (Frontend workarounds): Enabled: true
Allow compressed formats
cacheCompiledShader (Frontend features) [anglebug:7036](http://anglebug.com/7036): Disabled
Enable to cache compiled shaders
disableAnisotropicFiltering (Frontend workarounds): Disabled
Disable support for anisotropic filtering
disableDrawBuffersIndexed (Frontend features) [anglebug:7724](http://anglebug.com/7724): Disabled
Disable support for OES_draw_buffers_indexed and EXT_draw_buffers_indexed
disableProgramBinary (Frontend features) [anglebug:5007](http://anglebug.com/5007): Disabled: IsPowerVrRogue(functions)
Disable support for GL_OES_get_program_binary
disableProgramCaching (Frontend features) [anglebug:1423136](http://anglebug.com/1423136): Disabled
Disables saving programs to the cache
disableProgramCachingForTransformFeedback (Frontend workarounds): Disabled: !isMesa && isQualcomm
On some GPUs, program binaries don't contain transform feedback varyings
dumpShaderSource (Frontend features) [anglebug:7760](http://anglebug.com/7760): Disabled
Write shader source to temp directory
emulatePixelLocalStorage (Frontend features) [anglebug:7279](http://anglebug.com/7279): Enabled: true
Emulate ANGLE_shader_pixel_local_storage using shader images
enableCaptureLimits (Frontend features) [anglebug:5750](http://anglebug.com/5750): Disabled
Set the context limits like frame capturing was enabled
enableProgramBinaryForCapture (Frontend features) [anglebug:5658](http://anglebug.com/5658): Disabled
Even if FrameCapture is enabled, enable GL_OES_get_program_binary
enableShaderSubstitution (Frontend workarounds) [anglebug:7761](http://anglebug.com/7761): Disabled
Check the filesystem for shaders to use instead of those provided through glShaderSource
forceDepthAttachmentInitOnClear (Frontend workarounds) [anglebug:7246](https://anglebug.com/7246): Disabled
Force depth attachment initialization on clear ops
forceGlErrorChecking (Frontend features) https://issuetracker.google.com/220069903: Disabled
Force GL error checking (i.e. prevent applications from disabling error checking
forceInitShaderVariables (Frontend features): Disabled
Force-enable shader variable initialization
forceRobustResourceInit (Frontend features) [anglebug:6041](http://anglebug.com/6041): Disabled
Force-enable robust resource init
loseContextOnOutOfMemory (Frontend workarounds): Enabled: true
Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error occurs
singleThreadedTextureDecompression (Frontend workarounds): Disabled
Disables multi-threaded decompression of compressed texture formats
RGBA4IsNotSupportedForColorRendering (OpenGL workarounds): Enabled: functions->standard == STANDARD_GL_DESKTOP && isIntel
GL_RGBA4 is not color renderable
RGBDXT1TexturesSampleZeroAlpha (OpenGL workarounds) [anglebug:3729](http://anglebug.com/3729): Disabled: IsApple()
Sampling BLACK texels from RGB DXT1 textures returns transparent black on Mac.
addAndTrueToLoopCondition (OpenGL workarounds): Disabled: IsApple() && isIntel
Calculation of loop conditions in for and while loop has bug
adjustSrcDstRegionForBlitFramebuffer (OpenGL workarounds) [830046](http://crbug.com/830046): Enabled: IsLinux() || (IsAndroid() && isNvidia) || (IsWindows() && isNvidia) || (IsApple() && functions->standard == STANDARD_GL_ES)
Many platforms have issues with blitFramebuffer when the parameters are large.
allowAstcFormats (OpenGL workarounds): Disabled: !isMesa || isIntel && (Is9thGenIntel(device) || IsGeminiLake(device) || IsCoffeeLake(device) || Is11thGenIntel(device) || Is12thGenIntel(device))
Enable ASTC on desktop OpenGL
allowClearForRobustResourceInit (OpenGL workarounds) [848952](https://crbug.com/848952%20http://crbug.com/883276): Disabled: IsApple()
Using glClear for robust resource initialization is buggy on some drivers and leads to texture corruption. Default to data uploads except on MacOS where it is very slow.
allowETCFormats (OpenGL workarounds): Disabled: isIntel && !IsSandyBridge(device) && !IsIvyBridge(device) && !IsHaswell(device)
Enable ETC2/EAC on desktop OpenGL
alwaysCallUseProgramAfterLink (OpenGL workarounds) [110263](http://crbug.com/110263): Enabled: true
Always call useProgram after a successful link to avoid a driver bug
alwaysUnbindFramebufferTexture2D (OpenGL workarounds) [anglebug:5536](https://anglebug.com/5536): Disabled: isNvidia && (IsWindows() || IsLinux())
Force unbind framebufferTexture2D before binding renderbuffer to work around driver bug.
avoid1BitAlphaTextureFormats (OpenGL workarounds): Disabled: functions->standard == STANDARD_GL_DESKTOP && isAMD
Issue with 1-bit alpha framebuffer formats
bindCompleteFramebufferForTimerQueries (OpenGL workarounds) [1356053](https://crbug.com/1356053): Disabled: IsMali(functions)
Some drivers require a complete framebuffer when beginQuery for TimeElapsed orTimestampis called.
bindTransformFeedbackBufferBeforeBindBufferRange (OpenGL workarounds) [anglebug:5140](https://anglebug.com/5140): Disabled: IsApple()
Bind transform feedback buffers to the generic binding point before calling glBindBufferBase or glBindBufferRange.
clampArrayAccess (OpenGL workarounds) [anglebug:2978](http://anglebug.com/2978): Disabled: IsAndroid() || isAMD || !functions->hasExtension("GL_KHR_robust_buffer_access_behavior")
Clamp uniform array access to avoid reading invalid memory.
clampFragDepth (OpenGL workarounds): Disabled: isNvidia
gl_FragDepth is not clamped correctly when rendering to a floating point depth buffer
clampMscRate (OpenGL workarounds) [1042393](https://crbug.com/1042393): Enabled: IsLinux() && IsWayland()
Some drivers return bogus values for GetMscRate, so we clamp it to 30Hz
clampPointSize (OpenGL workarounds): Disabled: IsAndroid() || isNvidia
The point size range reported from the API is inconsistent with the actual behavior
clearToZeroOrOneBroken (OpenGL workarounds) [710443](https://crbug.com/710443): Disabled: IsApple() && isIntel && GetMacOSVersion() < OSVersion(10, 12, 6)
Clears when the clear color is all zeros or ones do not work.
clipSrcRegionForBlitFramebuffer (OpenGL workarounds) [830046](http://crbug.com/830046): Disabled: IsApple() || (IsLinux() && isAMD)
Issues with blitFramebuffer when the parameters don't match the framebuffer size.
decodeEncodeSRGBForGenerateMipmap (OpenGL workarounds) [anglebug:4646](http://anglebug.com/4646): Disabled: IsApple()
Decode and encode before generateMipmap for srgb format textures.
disableBaseInstanceVertex (OpenGL workarounds) [anglebug:8172](http://anglebug.com/8172): Disabled: IsMaliValhall(functions)
Some drivers have buggy implementations of glDraw*BaseVertex*.
disableBlendFuncExtended (OpenGL workarounds) [anglebug:1085](http://anglebug.com/1085): Disabled: (!isMesa && isQualcomm) || (IsApple() && isIntel && GetMacOSVersion() < OSVersion(10, 14, 0))
ARB_blend_func_extended does not pass the tests
disableClipControl (OpenGL features) [1434317](http://crbug.com/1434317): Disabled: IsMaliG72OrG76(functions)
Some devices genenerate errors when querying the clip control state
disableDrawBuffersIndexed (OpenGL workarounds): Disabled: IsWindows() && isAMD
Disable OES_draw_buffers_indexed extension.
disableGPUSwitchingSupport (OpenGL workarounds) [1091824](https://crbug.com/1091824): Disabled: isDualGPUMacWithNVIDIA
Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.
disableMultisampledRenderToTexture (OpenGL workarounds) [anglebug:2894](http://anglebug.com/2894): Disabled: isAdreno4xxOnAndroidLessThan51 || isAdreno4xxOnAndroid70 || isAdreno5xxOnAndroidLessThan70 || isAdreno5xxOnAndroid71 || isLinuxVivante || IsAndroid()
Many drivers have bugs when using GL_EXT_multisampled_render_to_texture
disableNativeParallelCompile (OpenGL workarounds) [1094869](http://crbug.com/1094869): Disabled: isTSANBuild && IsLinux() && isNvidia
Do not use native KHR_parallel_shader_compile even when available.
disableSemaphoreFd (OpenGL workarounds) [1046462](https://crbug.com/1046462): Disabled: IsLinux() && isAMD && isMesa && mesaVersion < (std::array{19, 3, 5})
Disable GL_EXT_semaphore_fd extension
disableSyncControlSupport (OpenGL workarounds) [1137851](https://crbug.com/1137851): Disabled: IsLinux() && isIntel && isMesa && mesaVersion[0] == 20
Speculative fix for issues on Linux/Wayland where exposing GLX_OML_sync_control renders Chrome unusable
disableTextureClampToBorder (OpenGL workarounds) [anglebug:7405](https://anglebug.com/7405): Disabled: isImagination
Imagination devices generate INVALID_ENUM when setting the texture border color.
disableTimestampQueries (OpenGL workarounds) [811661](https://crbug.com/811661): Disabled: (IsLinux() && isVMWare) || (IsAndroid() && isNvidia) || (IsAndroid() && GetAndroidSdkLevel() < 27 && IsAdreno5xxOrOlder(functions)) || (!isMesa && IsMaliT8xxOrOlder(functions)) || (!isMesa && IsMaliG31OrOlder(functions))
Disable GL_EXT_disjoint_timer_query extension
disableWorkerContexts (OpenGL workarounds) [849576](http://crbug.com/849576): Disabled: (IsWindows() && (isIntel || isAMD)) || (IsLinux() && isNvidia) || IsIOS() || IsAndroid() || IsAndroidEmulator(functions)
Some tests have been seen to fail using worker contexts
doWhileGLSLCausesGPUHang (OpenGL workarounds) [644669](http://crbug.com/644669): Disabled: IsApple() && functions->standard == STANDARD_GL_DESKTOP && GetMacOSVersion() < OSVersion(10, 11, 0)
Some GLSL constructs involving do-while loops cause GPU hangs
doesSRGBClearsOnLinearFramebufferAttachments (OpenGL workarounds): Enabled: isIntel || isAMD
Issue clearing framebuffers with linear attachments when GL_FRAMEBUFFER_SRGB is enabled
dontInitializeUninitializedLocals (OpenGL workarounds) [anglebug:2046](http://anglebug.com/2046): Disabled: !isMesa && isQualcomm
Initializing uninitialized locals caused odd behavior in a few WebGL 2 tests
dontRelinkProgramsInParallel (OpenGL workarounds) [anglebug:3045](http://anglebug.com/3045): Disabled: IsAndroid() || (IsWindows() && isIntel)
Relinking a program in parallel is buggy
dontUseLoopsToInitializeVariables (OpenGL workarounds) [809422](http://crbug.com/809422): Disabled: (!isMesa && isQualcomm) || (isIntel && IsApple())
For loops used to initialize variables hit native GLSL compiler bugs
emulateAbsIntFunction (OpenGL workarounds) [642227](http://crbug.com/642227): Disabled: IsApple() && isIntel
abs(i) where i is an integer returns unexpected result
emulateAtan2Float (OpenGL workarounds) [672380](http://crbug.com/672380): Disabled: isNvidia
atan(y, x) may return a wrong answer
emulateClipDistanceState (OpenGL workarounds): Disabled: isQualcomm
Some drivers ignore GL_CLIP_DISTANCEi_EXT state.
emulateCopyTexImage2D (OpenGL workarounds): Disabled: isApple
Replace CopyTexImage2D with TexImage2D + CopyTexSubImage2D.
emulateCopyTexImage2DFromRenderbuffers (OpenGL workarounds) [anglebug:4674](https://anglebug.com/4674): Disabled: IsApple() && functions->standard == STANDARD_GL_ES && !(isAMD && IsWindows())
CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.
emulateImmutableCompressedTexture3D (OpenGL workarounds) [1060012](https://crbug.com/1060012): Disabled: isQualcomm
Use non-immutable texture allocation to work around a driver bug.
emulateIsnanFloat (OpenGL workarounds) [650547](http://crbug.com/650547): Disabled: isIntel && IsApple() && IsSkylake(device) && GetMacOSVersion() < OSVersion(10, 13, 2)
Using isnan() on highp float will get wrong answer
emulateMaxVertexAttribStride (OpenGL workarounds) [anglebug:1936](http://anglebug.com/1936): Disabled: IsLinux() && functions->standard == STANDARD_GL_DESKTOP && isAMD
Some drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried
emulatePackSkipRowsAndPackSkipPixels (OpenGL workarounds) [anglebug:4849](https://anglebug.com/4849): Disabled: IsApple()
GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored in Apple's OpenGL driver.
emulatePrimitiveRestartFixedIndex (OpenGL workarounds) [anglebug:3997](http://anglebug.com/3997): Disabled: functions->standard == STANDARD_GL_DESKTOP && functions->isAtLeastGL(gl::Version(3, 1)) && !functions->isAtLeastGL(gl::Version(4, 3))
When GL_PRIMITIVE_RESTART_FIXED_INDEX is not available, emulate it with GL_PRIMITIVE_RESTART and glPrimitiveRestartIndex.
emulateRGB10 (OpenGL workarounds) [1300575](https://crbug.com/1300575): Enabled: functions->standard == STANDARD_GL_DESKTOP
Emulate RGB10 support using RGB10_A2.
ensureNonEmptyBufferIsBoundForDraw (OpenGL features) [1456243](http://crbug.com/1456243): Disabled: IsApple() || IsAndroid()
Apple OpenGL drivers crash when drawing with a zero-sized buffer bound using a non-zero divisor.
finishDoesNotCauseQueriesToBeAvailable (OpenGL workarounds): Disabled: functions->standard == STANDARD_GL_DESKTOP && isNvidia
glFinish doesn't cause all queries to report available result
flushBeforeDeleteTextureIfCopiedTo (OpenGL workarounds) [anglebug:4267](http://anglebug.com/4267): Disabled: IsApple() && isIntel
Some drivers track CopyTex{Sub}Image texture dependencies incorrectly. Flush before glDeleteTextures in this case
flushOnFramebufferChange (OpenGL workarounds) [1181068](http://crbug.com/1181068): Disabled: IsApple() && Has9thGenIntelGPU(systemInfo)
Switching framebuffers without a flush can lead to crashes on Intel 9th Generation GPU Macs.
initFragmentOutputVariables (OpenGL workarounds) [1171371](http://crbug.com/1171371): Disabled: IsAdreno42xOr3xx(functions)
No init gl_FragColor causes context lost
initializeCurrentVertexAttributes (OpenGL workarounds): Disabled: isNvidia
During initialization, assign the current vertex attributes to the spec-mandated defaults
keepBufferShadowCopy (OpenGL workarounds): Disabled: !CanMapBufferForRead(functions)
Maintain a shadow copy of buffer data when the GL API does not permit reading data back.
limitMax3dArrayTextureSizeTo1024 (OpenGL workarounds) [927470](http://crbug.com/927470): Disabled: limitMaxTextureSize
Limit max 3d texture size and max array texture layers to 1024 to avoid system hang
limitMaxMSAASamplesTo4 (OpenGL workarounds) [797243](http://crbug.com/797243): Disabled: IsAndroid() || (IsApple() && (isIntel || isAMD || isNvidia))
Various rendering bugs have been observed when using higher MSAA counts
limitWebglMaxTextureSizeTo4096 (OpenGL workarounds) [927470](http://crbug.com/927470): Disabled: IsAndroid() || limitMaxTextureSize
Limit webgl max texture size to 4096 to avoid frequent out-of-memory errors
packLastRowSeparatelyForPaddingInclusion (OpenGL workarounds) [anglebug:1512](http://anglebug.com/1512): Disabled: IsApple() || isNvidia
When uploading textures from an pack buffer, some drivers count an extra row padding
packOverlappingRowsSeparatelyPackBuffer (OpenGL workarounds): Disabled: isNvidia
In the case of packing to a pixel pack buffer, pack overlapping rows row by row
passHighpToPackUnormSnormBuiltins (OpenGL workarounds) [anglebug:7527](http://anglebug.com/7527): Disabled: isQualcomm
packUnorm4x8 fails on Pixel 4 if it is not passed a highp vec4.
preAddTexelFetchOffsets (OpenGL workarounds) [642605](http://crbug.com/642605): Disabled: IsApple() && isIntel
Intel Mac drivers mistakenly consider the parameter position of nagative vaule as invalid even if the sum of position and offset is in range, so we need to add workarounds by rewriting texelFetchOffset(sampler, position, lod, offset) into texelFetch(sampler, position + offset, lod).
promotePackedFormatsTo8BitPerChannel (OpenGL workarounds) [anglebug:5469](http://anglebug.com/5469): Disabled: IsApple() && hasAMD
Packed color formats are buggy on Macs with AMD GPUs
queryCounterBitsGeneratesErrors (OpenGL workarounds) [anglebug:3027](http://anglebug.com/3027): Disabled: IsNexus5X(vendor, device)
Drivers generate errors when querying the number of bits in timer queries
readPixelsUsingImplementationColorReadFormatForNorm16 (OpenGL workarounds) [anglebug:4214](http://anglebug.com/4214): Disabled: !isIntel && functions->standard == STANDARD_GL_ES && functions->isAtLeastGLES(gl::Version(3, 1)) && functions->hasGLESExtension("GL_EXT_texture_norm16")
Quite some OpenGL ES drivers don't implement readPixels for RGBA/UNSIGNED_SHORT from EXT_texture_norm16 correctly
reapplyUBOBindingsAfterUsingBinaryProgram (OpenGL workarounds) [anglebug:1637](http://anglebug.com/1637): Disabled: isAMD || IsAndroid()
Some drivers forget about UBO bindings when using program binaries
regenerateStructNames (OpenGL workarounds) [403957](http://crbug.com/403957): Disabled: IsApple()
All Mac drivers do not handle struct scopes correctly. This workaround overwrites a structname with a unique prefix.
removeDynamicIndexingOfSwizzledVector (OpenGL workarounds) [709351](http://crbug.com/709351): Disabled: IsApple() || IsAndroid() || IsWindows()
Dynamic indexing of swizzled l-values doesn't work correctly on various platforms.
removeInvariantAndCentroidForESSL3 (OpenGL workarounds): Disabled: functions->isAtMostGL(gl::Version(4, 1)) || (functions->standard == STANDARD_GL_DESKTOP && isAMD)
Fix spec difference between GLSL 4.1 or lower and ESSL3
resetTexImage2DBaseLevel (OpenGL workarounds) [705865](https://crbug.com/705865): Disabled: IsApple() && isIntel && GetMacOSVersion() >= OSVersion(10, 12, 4)
Reset texture base level before calling glTexImage2D to work around pixel comparison failure.
rewriteFloatUnaryMinusOperator (OpenGL workarounds) [308366](http://crbug.com/308366): Disabled: IsApple() && isIntel && GetMacOSVersion() < OSVersion(10, 12, 0)
Using '-' will get wrong answer
rewriteRepeatedAssignToSwizzled (OpenGL workarounds): Disabled: isNvidia
Repeated assignment to swizzled values inside a GLSL user-defined function have incorrect results
rewriteRowMajorMatrices (OpenGL workarounds) [anglebug:2273](http://anglebug.com/2273): Disabled: false
Rewrite row major matrices in shaders as column major as a driver bug workaround
sanitizeAMDGPURendererString (OpenGL workarounds) [1181193](http://crbug.com/1181193): Disabled: IsLinux() && hasAMD
Strip precise kernel and DRM version information from amdgpu renderer strings.
scalarizeVecAndMatConstructorArgs (OpenGL workarounds) [1420130](http://crbug.com/1420130): Disabled: IsMali(functions)
Rewrite vec/mat constructors to work around driver bugs
setPrimitiveRestartFixedIndexForDrawArrays (OpenGL workarounds) [anglebug:3997](http://anglebug.com/3997): Disabled: features->emulatePrimitiveRestartFixedIndex.enabled && IsApple() && isIntel
Some drivers discard vertex data in DrawArrays calls when the fixed primitive restart index is within the number of primitives being drawn.
setZeroLevelBeforeGenerateMipmap (OpenGL workarounds): Disabled: IsApple()
glGenerateMipmap fails if the zero texture level is not set on some Mac drivers.
shiftInstancedArrayDataWithOffset (OpenGL workarounds) [1144207](http://crbug.com/1144207): Disabled: IsApple() && IsIntel(vendor) && !IsHaswell(device)
glDrawArraysInstanced is buggy on certain new Mac Intel GPUs
supportsFragmentShaderInterlockARB (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->isAtLeastGL(gl::Version(4, 5)) && functions->hasGLExtension("GL_ARB_fragment_shader_interlock")
Backend GL context supports ARB_fragment_shader_interlock extension
supportsFragmentShaderInterlockNV (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->isAtLeastGL(gl::Version(4, 3)) && functions->hasGLExtension("GL_NV_fragment_shader_interlock")
Backend GL context supports NV_fragment_shader_interlock extension
supportsFragmentShaderOrderingINTEL (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->isAtLeastGL(gl::Version(4, 4)) && functions->hasGLExtension("GL_INTEL_fragment_shader_ordering")
Backend GL context supports GL_INTEL_fragment_shader_ordering extension
supportsShaderFramebufferFetchEXT (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->hasGLESExtension("GL_EXT_shader_framebuffer_fetch")
Backend GL context supports EXT_shader_framebuffer_fetch extension
supportsShaderFramebufferFetchNonCoherentEXT (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->hasGLESExtension("GL_EXT_shader_framebuffer_fetch_non_coherent")
Backend GL context supports EXT_shader_framebuffer_fetch_non_coherent extension
supportsShaderPixelLocalStorageEXT (OpenGL features) [anglebug:7279](http://anglebug.com/7279): Disabled: functions->hasGLESExtension("GL_EXT_shader_pixel_local_storage")
Backend GL context supports EXT_shader_pixel_local_storage extension
syncVertexArraysToDefault (OpenGL workarounds) [anglebug:5577](http://anglebug.com/5577): Disabled: !nativegl::SupportsVertexArrayObjects(functions)
Only use the default VAO because of missing support or driver bugs
unbindFBOBeforeSwitchingContext (OpenGL workarounds) [1181193](http://crbug.com/1181193): Disabled: IsPowerVR(vendor)
Imagination GL drivers are buggy with context switching.
unfoldShortCircuits (OpenGL workarounds) [anglebug:482](http://anglebug.com/482): Disabled: IsApple()
Mac incorrectly executes both sides of && and || expressions when they should short-circuit.
unpackLastRowSeparatelyForPaddingInclusion (OpenGL workarounds) [anglebug:1512](http://anglebug.com/1512): Disabled: IsApple() || isNvidia
When uploading textures from an unpack buffer, some drivers count an extra row padding
unpackOverlappingRowsSeparatelyUnpackBuffer (OpenGL workarounds): Disabled: isNvidia
In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row
unsizedSRGBReadPixelsDoesntTransform (OpenGL workarounds) [550292](http://crbug.com/550292%20http://crbug.com/565179): Disabled: !isMesa && isQualcomm
Drivers returning raw sRGB values instead of linearized values when calling glReadPixels on unsized sRGB texture formats
uploadTextureDataInChunks (OpenGL workarounds) [1181068](http://crbug.com/1181068): Disabled: IsApple()
Upload texture data in <120kb chunks to work around Mac driver hangs and crashes.
useUnusedBlocksWithStandardOrSharedLayout (OpenGL workarounds): Disabled: (IsApple() && functions->standard == STANDARD_GL_DESKTOP) || (IsLinux() && isAMD)
Unused std140 or shared uniform blocks will be treated as inactive
vertexIDDoesNotIncludeBaseVertex (OpenGL workarounds): Disabled: IsApple() && isAMD
gl_VertexID in GLSL vertex shader doesn't include base vertex value
DAWN Info

Vulkan backend - Intel(R) HD Graphics 4400 (HSW GT2)
[WebGPU Status]
Available
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - Intel(R) HD Graphics 4400 (HSW GT2)
[WebGPU Status]
Available
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - llvmpipe (LLVM 16.0.6, 256 bits)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - llvmpipe (LLVM 16.0.6, 256 bits)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - SwiftShader Device (Subzero)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
texture-compression-etc2
texture-compression-astc
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - SwiftShader Device (Subzero)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
texture-compression-etc2
texture-compression-astc
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments
Version Information
Data exported
2023-08-13T04:59:25.779Z
Chrome version
Chrome/115.0.5790.172
Operating system
Linux 6.4.9-cbl1.0.fc38.x86_64
Software rendering list URL
https://chromium.googlesource.com/chromium/src/+/9497f0aa17d3136ec204fd0d0241a44dcbe68003/gpu/config/software_rendering_list.json
Driver bug list URL
https://chromium.googlesource.com/chromium/src/+/9497f0aa17d3136ec204fd0d0241a44dcbe68003/gpu/config/gpu_driver_bug_list.json
ANGLE commit id
dfa3a3070f78
2D graphics backend
Skia/115 d0d16e9faa7fae0d53ca78c8dc966eae446cb130
Command Line
./thorium --flag-switches-begin --flag-switches-end --origin-trial-disabled-features=WebGPU
Driver Information
Initialization time
222
In-process GPU
false
Passthrough Command Decoder
true
Sandboxed
false
GPU0
VENDOR= 0x8086 [Google Inc. (Intel)], DEVICE=0x0a16 [ANGLE (Intel, Mesa Intel(R) HD Graphics 4400 (HSW GT2), OpenGL 4.6 (Core Profile) Mesa 23.1.5)], DRIVER_VENDOR=Mesa, DRIVER_VERSION=23.1.5 ACTIVE
Optimus
false
AMD switchable
false
GPU CUDA compute capability major version
0
Pixel shader version
1.00
Vertex shader version
1.00
Max. MSAA samples
8
Machine model name
Machine model version
GL implementation parts
(gl=egl-angle,angle=opengl)
Display type
ANGLE_OPENGL
GL_VENDOR
Google Inc. (Intel)
GL_RENDERER
ANGLE (Intel, Mesa Intel(R) HD Graphics 4400 (HSW GT2), OpenGL 4.6 (Core Profile) Mesa 23.1.5)
GL_VERSION
OpenGL ES 2.0.0 (ANGLE 2.1.21145 git hash: dfa3a3070f78)
GL_EXTENSIONS
GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_logic_op GL_ANGLE_memory_size GL_ANGLE_multi_draw GL_ANGLE_polygon_mode GL_ANGLE_program_cache_control GL_ANGLE_provoking_vertex GL_ANGLE_request_extension GL_ANGLE_robust_client_memory GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_external_update GL_ANGLE_texture_rectangle GL_ANGLE_translated_shader_source GL_APPLE_clip_distance GL_ARB_sync GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgb GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_texture GL_CHROMIUM_lose_context GL_CHROMIUM_sync_query GL_EXT_base_instance GL_EXT_blend_func_extended GL_EXT_blend_minmax GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_clamp GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_multi_draw_indirect GL_EXT_multisample_compatibility GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_border_clamp GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc_srgb GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_type_2_10_10_10_REV GL_EXT_unpack_subimage GL_KHR_debug GL_KHR_parallel_shader_compile GL_MESA_framebuffer_flip_y GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_polygon_mode GL_NV_read_depth GL_NV_read_stencil GL_OES_compressed_EAC_R11_signed_texture GL_OES_compressed_EAC_R11_unsigned_texture GL_OES_compressed_EAC_RG11_signed_texture GL_OES_compressed_EAC_RG11_unsigned_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_ETC2_RGB8_texture GL_OES_compressed_ETC2_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture GL_OES_compressed_ETC2_sRGB8_alpha8_texture GL_OES_compressed_ETC2_sRGB8_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_border_clamp GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_WEBGL_video_texture
Disabled Extensions
GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_MESA_framebuffer_flip_y
Disabled WebGL Extensions
Window system binding vendor
Google Inc. (Intel)
Window system binding version
1.5 (ANGLE 2.1.21145 git hash: dfa3a3070f78)
Window system binding extensions
EGL_EXT_create_context_robustness EGL_KHR_create_context EGL_KHR_get_all_proc_addresses EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_CHROMIUM_sync_control EGL_ANGLE_sync_control_rate EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANGLE_create_context_backwards_compatible EGL_KHR_create_context_no_error EGL_NOK_texture_from_pixmap EGL_KHR_reusable_sync
XDG_CURRENT_DESKTOP
GNOME
XDG_SESSION_TYPE
wayland
GDMSESSION
gnome
Ozone platform
x11
Direct rendering version
unknown
Reset notification strategy
0x8252
GPU process crash count
0
gfx::BufferFormats supported for allocation and texturing
R_8: not supported, R_16: not supported, RG_88: not supported, RG_1616: not supported, BGR_565: not supported, RGBA_4444: not supported, RGBX_8888: not supported, RGBA_8888: not supported, BGRX_8888: not supported, BGRA_1010102: not supported, RGBA_1010102: not supported, BGRA_8888: not supported, RGBA_F16: not supported, YVU_420: not supported, YUV_420_BIPLANAR: not supported, YUVA_420_TRIPLANAR: not supported, P010: not supported
Compositor Information
Tile Update Mode
One-copy
Partial Raster
Enabled
GpuMemoryBuffers Status
R_8
Software only
R_16
Software only
RG_88
Software only
RG_1616
Software only
BGR_565
Software only
RGBA_4444
Software only
RGBX_8888
Software only
RGBA_8888
Software only
BGRX_8888
Software only
BGRA_1010102
Software only
RGBA_1010102
Software only
BGRA_8888
Software only
RGBA_F16
Software only
YVU_420
Software only
YUV_420_BIPLANAR
Software only
YUVA_420_TRIPLANAR
Software only
P010
Software only
Display(s) Information
Info
Display[33] bounds=[0,0 1920x1080], workarea=[0,32 1920x1016], scale=1, rotation=0, panel_rotation=0 external.
Color space (all)
{primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
Buffer format (all)
BGRA_8888
Color volume
{name:'srgb', r:[0.6400, 0.3300], g:[0.3000, 0.6000], b:[0.1500, 0.3300], w:[0.3127, 0.3290]}
SDR white level in nits
203
HDR relative maximum luminance
1
Bits per color component
8
Bits per pixel
24
Refresh Rate in Hz
59
Video Acceleration Information
Decoding
Decode h264 baseline
16x16 to 4096x4096 pixels
Decode h264 main
16x16 to 4096x4096 pixels
Decode h264 high
16x16 to 4096x4096 pixels
Decode vp9 profile0
16x16 to 4096x4096 pixels
Encoding
Vulkan Information
Device Performance Information
Log Messages
[34083:34083:0813/065920.360653:ERROR:vaapi_wrapper.cc(878)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[34083:34083:0813/065920.360853:ERROR:vaapi_wrapper.cc(878)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[34083:34083:0813/065920.360985:ERROR:vaapi_wrapper.cc(878)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[34083:34083:0813/065920.361089:ERROR:vaapi_wrapper.cc(878)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[34083:34083:0813/065920.366028:WARNING:sandbox_linux.cc(393)] : InitializeSandbox() called with multiple threads in process gpu-process.
[34083:34083:0813/065924.958485:ERROR:gl_surface_presentation_helper.cc(260)] : GetVSyncParametersIfAvailable() failed for 1 times!

chrome://gpu/ with 111 version flags (--disable-features=UseChromeOSDirectVideoDecoder --disable-gpu-memory-buffer-compositor-resources --disable-gpu-memory-buffer-video-frames --enable-hardware-overlays --enable-accelerated-video-decode --enable-features=VaapiVideoDecoder,VaapiVideoEncoder,RawDraw --ozone-platform=wayland --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --disable-gpu-driver-bug-workarounds --enable-native-gpu-memory-buffers --use-cmd-decoder=passthrough --ozone-platform-hint=auto --use-vulkan --use-gl=egl)
Graphics Feature Status
Canvas: Software only, hardware acceleration unavailable
Canvas out-of-process rasterization: Disabled
Direct Rendering Display Compositor: Disabled
Compositing: Software only. Hardware acceleration disabled
Multiple Raster Threads: Enabled
OpenGL: Disabled
Rasterization: Software only. Hardware acceleration disabled
Raw Draw: Enabled
Skia Graphite: Disabled
Video Decode: Software only. Hardware acceleration disabled
Video Encode: Software only. Hardware acceleration disabled
Vulkan: Disabled
WebGL: Software only, hardware acceleration unavailable
WebGL2: Software only, hardware acceleration unavailable
WebGPU: Disabled
Problems Detected
WebGPU has been disabled via blocklist or the command line.
Disabled Features: webgpu
Gpu compositing has been disabled, either via blocklist, about:flags or the command line. The browser will fall back to software compositing and hardware acceleration will be unavailable.
Disabled Features: gpu_compositing
ANGLE Features
allowCompressedFormats (Frontend workarounds): Disabled
Allow compressed formats
cacheCompiledShader (Frontend features) anglebug:7036: Disabled
Enable to cache compiled shaders
disableAnisotropicFiltering (Frontend workarounds): Disabled
Disable support for anisotropic filtering
disableDrawBuffersIndexed (Frontend features) anglebug:7724: Disabled
Disable support for OES_draw_buffers_indexed and EXT_draw_buffers_indexed
disableProgramBinary (Frontend features) anglebug:5007: Disabled
Disable support for GL_OES_get_program_binary
disableProgramCaching (Frontend features) anglebug:1423136: Disabled
Disables saving programs to the cache
disableProgramCachingForTransformFeedback (Frontend workarounds): Disabled
On some GPUs, program binaries don't contain transform feedback varyings
dumpShaderSource (Frontend features) anglebug:7760: Disabled
Write shader source to temp directory
emulatePixelLocalStorage (Frontend features) anglebug:7279: Disabled
Emulate ANGLE_shader_pixel_local_storage using shader images
enableCaptureLimits (Frontend features) anglebug:5750: Disabled
Set the context limits like frame capturing was enabled
enableProgramBinaryForCapture (Frontend features) anglebug:5658: Disabled
Even if FrameCapture is enabled, enable GL_OES_get_program_binary
enableShaderSubstitution (Frontend workarounds) anglebug:7761: Disabled
Check the filesystem for shaders to use instead of those provided through glShaderSource
forceDepthAttachmentInitOnClear (Frontend workarounds) anglebug:7246: Disabled
Force depth attachment initialization on clear ops
forceGlErrorChecking (Frontend features) https://issuetracker.google.com/220069903: Disabled
Force GL error checking (i.e. prevent applications from disabling error checking
forceInitShaderVariables (Frontend features): Disabled
Force-enable shader variable initialization
forceRobustResourceInit (Frontend features) anglebug:6041: Disabled
Force-enable robust resource init
loseContextOnOutOfMemory (Frontend workarounds): Disabled
Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error occurs
singleThreadedTextureDecompression (Frontend workarounds): Disabled
Disables multi-threaded decompression of compressed texture formats
allocateNonZeroMemory (Vulkan features) anglebug:4384: Disabled
Fill new allocations with non-zero values to flush out errors.
allowGenerateMipmapWithCompute (Vulkan features) anglebug:4551: Disabled
Use the compute path to generate mipmaps on devices that meet the minimum requirements, and the performance is better.
appendAliasedMemoryDecorationsToSsbo (Vulkan workarounds) b/266235549: Disabled
Append aliased memory decoration to ssbo in SpirV if the ssbo in GLSL is not declared with restrict memory qualifier
asyncCommandBufferReset (Vulkan features) https://issuetracker.google.com/255411748: Disabled
Reset command buffer in async thread.
asyncCommandQueue (Vulkan features) anglebug:4324: Disabled
Use CommandQueue worker thread to dispatch work to GPU.
bottomLeftOriginPresentRegionRectangles (Vulkan workarounds): Disabled
On some platforms present region rectangles are expected to have a bottom-left origin, instead of top-left origin as from spec
bresenhamLineRasterization (Vulkan features): Disabled
Enable Bresenham line rasterization via VK_EXT_line_rasterization extension
clampPointSize (Vulkan workarounds) anglebug:2970: Disabled
The point size range reported from the API is inconsistent with the actual behavior
compressVertexData (Vulkan workarounds): Disabled
Compress vertex data to smaller data types when possible. Using this feature makes ANGLE non-conformant.
deferFlushUntilEndRenderPass (Vulkan workarounds) https://issuetracker.google.com/issues/166475273: Disabled
Allow glFlush to be deferred until renderpass ends
depthClamping (Vulkan workarounds) anglebug:3970: Disabled
The depth value is not clamped to [0,1] for floating point depth buffers.
disableFlippingBlitWithCommand (Vulkan workarounds) anglebug:3498: Disabled
vkCmdBlitImage with flipped coordinates blits incorrectly.
disallowMixedDepthStencilLoadOpNoneAndLoad (Vulkan workarounds) anglebug:7370: Disabled
Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects of a depth/stencil attachment
doubleDepthBiasConstantFactor (Vulkan workarounds): Disabled
Due to a Vulkan spec ambiguity, some drivers interpret depthBiasConstantFactor as half the expected value
eglColorspaceAttributePassthrough (Vulkan features) anglebug:7319: Disabled
Support passthrough of EGL colorspace attribute values
emulateAdvancedBlendEquations (Vulkan features) anglebug:3586: Disabled
Emulate GL_KHR_blend_equation_advanced
emulateDithering (Vulkan features) anglebug:6755: Disabled
Emulate OpenGL dithering
emulateR32fImageAtomicExchange (Vulkan workarounds) anglebug:5535: Disabled
Emulate r32f images with r32ui to support imageAtomicExchange.
emulateTransformFeedback (Vulkan features) anglebug:3205: Disabled
Emulate transform feedback as the VK_EXT_transform_feedback is not present.
emulatedPrerotation180 (Vulkan features) anglebug:4901: Disabled
Emulate 180-degree prerotation.
emulatedPrerotation270 (Vulkan features) anglebug:4901: Disabled
Emulate 270-degree prerotation.
emulatedPrerotation90 (Vulkan features) anglebug:4901: Disabled
Emulate 90-degree prerotation.
enableAsyncPipelineCacheCompression (Vulkan workarounds) anglebug:4722: Disabled
Enable compressing pipeline cache in a thread.
enableMultisampledRenderToTexture (Vulkan workarounds) anglebug:4937: Disabled
Expose EXT_multisampled_render_to_texture
enablePipelineCacheDataCompression (Vulkan features) https://issuetracker.google.com/258207403: Disabled
enable pipeline cache data compression.
enablePreRotateSurfaces (Vulkan features) anglebug:3502: Disabled
Enable Android pre-rotation for landscape applications
enablePrecisionQualifiers (Vulkan features) anglebug:3078: Disabled
Enable precision qualifiers in shaders
explicitlyCastMediumpFloatTo16Bit (Vulkan workarounds) https://issuetracker.google.com/274859104: Disabled
Explicitly cast mediump floating point values to 16 bit
explicitlyEnablePerSampleShading (Vulkan workarounds) anglebug:6876: Disabled
Explicitly enable per-sample shading if the fragment shader contains the sample qualifier
exposeNonConformantExtensionsAndVersions (Vulkan workarounds) anglebug:5375: Disabled
Expose GLES versions and extensions that are not conformant.
forceContinuousRefreshOnSharedPresent (Vulkan features) https://issuetracker.google.com/229267970: Disabled
Force to create vulkan swapchain with continuous refresh on shared present
forceD16TexFilter (Vulkan workarounds) anglebug:3452: Disabled
VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, which prevents OES_depth_texture from being supported.
forceFallbackFormat (Vulkan workarounds): Disabled
Force a fallback format for angle_end2end_tests
forceFragmentShaderPrecisionHighpToMediump (Vulkan workarounds) https://issuetracker.google.com/184850002: Disabled
Forces highp precision in fragment shader to mediump.
forceMaxUniformBufferSize16KB (Vulkan workarounds) https://issuetracker.google.com/161903006: Disabled
Force max uniform buffer size to 16K on some device due to bug
forceNearestFiltering (Vulkan workarounds): Disabled
Force nearest filtering when sampling.
forceNearestMipFiltering (Vulkan workarounds): Disabled
Force nearest mip filtering when sampling.
forceStaticPrimitiveRestartState (Vulkan workarounds) https://issuetracker.google.com/275210062: Disabled
Force static state for VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE due to driver bugs
forceStaticVertexStrideState (Vulkan workarounds) https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=107106: Disabled
Force static state for VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT due to driver bugs
forceSubmitImmutableTextureUpdates (Vulkan app workarounds) anglebug:6929: Disabled
Force submit updates to immutable textures
forceTextureLodOffset1 (Vulkan workarounds): Disabled
Increase the minimum texture level-of-detail by 1 when sampling.
forceTextureLodOffset2 (Vulkan workarounds): Disabled
Increase the minimum texture level-of-detail by 2 when sampling.
forceTextureLodOffset3 (Vulkan workarounds): Disabled
Increase the minimum texture level-of-detail by 3 when sampling.
forceTextureLodOffset4 (Vulkan workarounds): Disabled
Increase the minimum texture level-of-detail by 4 when sampling.
forceWaitForSubmissionToCompleteForQueryResult (Vulkan workarounds) https://issuetracker.google.com/253522366: Disabled
Force wait for submission to complete before calling getQueryResult(wait).
hasEffectivePipelineCacheSerialization (Vulkan features) anglebug:7369: Disabled
Whether the implementation serializes the Vulkan pipeline cache effectively. On some implementations, pipeline cache serialization returns no data, so there is no benefit to serializing it
limitSampleCountTo2 (Vulkan workarounds) anglebug:8162: Disabled
Limit sample count to 2 to save memory on low end devices.
logMemoryReportCallbacks (Vulkan features): Disabled
Log each callback from VK_EXT_device_memory_report
logMemoryReportStats (Vulkan features): Disabled
Log stats from VK_EXT_device_memory_report each swap
mapUnspecifiedColorSpaceToPassThrough (Vulkan features): Disabled
Use VK_COLOR_SPACE_PASS_THROUGH_EXT for EGL_NONE or unspecifed color spaces
mergeProgramPipelineCachesToGlobalCache (Vulkan workarounds) anglebug:7369: Disabled
Whether it's beneficial to merge the pipeline cache for the shaders subset of the pipeline into the monolithic pipeline cache. Only useful on platforms where monolithic pipelines can reuse blobs from partial pipelines
mutableMipmapTextureUpload (Vulkan features) anglebug:7308: Disabled
Enable uploading the previously defined mutable mipmap texture.
overrideSurfaceFormatRGB8ToRGBA8 (Vulkan workarounds) anglebug:6651: Disabled
Override surface format GL_RGB8 to GL_RGBA8
padBuffersToMaxVertexAttribStride (Vulkan workarounds) anglebug:4428: Disabled
Vulkan considers vertex attribute accesses to count up to the last multiple of the stride. This additional access supports AMD's robust buffer access implementation. AMDVLK in particular will return incorrect values when the vertex access extends into the range that would be the stride padding and the buffer is too small. This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and pads up every buffer allocation size to be a multiple of the maximum stride.
perFrameWindowSizeQuery (Vulkan workarounds) anglebug:3623: Disabled
Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing
permanentlySwitchToFramebufferFetchMode (Vulkan features): Disabled
Whether the context should permanently switch to framebuffer fetch mode on first encounter
persistentlyMappedBuffers (Vulkan features) anglebug:2162: Disabled
Persistently map buffer memory to reduce map/unmap IOCTL overhead.
preferAggregateBarrierCalls (Vulkan workarounds) anglebug:4633: Disabled
Single barrier call is preferred over multiple calls with fine grained pipeline stage dependency information
preferCPUForBufferSubData (Vulkan features) http://issuetracker.google.com/200067929: Disabled
Prefer use CPU to do bufferSubData instead of staged update.
preferDeviceLocalMemoryHostVisible (Vulkan features) anglebug:7047: Disabled
Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking memory types
preferDrawClearOverVkCmdClearAttachments (Vulkan workarounds) https://issuetracker.google.com/166809097: Disabled
On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle of render pass due to bugs
preferDriverUniformOverSpecConst (Vulkan features) anglebug:7406: Disabled
Prefer using driver uniforms instead of specialization constants.
preferLinearFilterForYUV (Vulkan features) anglebug:7382: Disabled
Prefer to use VK_FILTER_LINEAR for VkSamplerYcbcrConversion
preferMonolithicPipelinesOverLibraries (Vulkan workarounds) anglebug:7369: Disabled
Whether monolithic pipelines perform significantly better than libraries
preferSkippingInvalidateForEmulatedFormats (Vulkan workarounds) anglebug:6860: Disabled
Skipping invalidate is preferred for emulated formats that have extra channels over re-clearing the image
preferSubmitAtFBOBoundary (Vulkan workarounds) https://issuetracker.google.com/187425444: Disabled
Submit commands to driver at each FBO boundary for performance improvements.
preferSubmitOnAnySamplesPassedQueryEnd (Vulkan workarounds) https://issuetracker.google.com/250706693: Disabled
Submit commands to driver when last GL_ANY_SAMPLES_PASSED query is made for performance improvements.
provokingVertex (Vulkan features): Disabled
Enable provoking vertex mode via VK_EXT_provoking_vertex extension
retainSPIRVDebugInfo (Vulkan features) anglebug:5901: Disabled
Retain debug info in SPIR-V blob.
roundOutputAfterDithering (Vulkan workarounds) anglebug:6953: Disabled
Round output after dithering to workaround a driver bug that rounds the output up
slowAsyncCommandQueueForTesting (Vulkan workarounds) anglebug:6574: Disabled
Artificially slow down async command queue for threading testing
slowDownMonolithicPipelineCreationForTesting (Vulkan workarounds) anglebug:7369: Disabled
Artificially slow down async monolithic pipeline creation for threading testing
supportsAndroidHardwareBuffer (Vulkan features): Disabled
VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension
supportsAndroidNativeFenceSync (Vulkan features) anglebug:2517: Disabled
VkDevice supports the EGL_ANDROID_native_fence_sync extension
supportsBindMemory2 (Vulkan features) anglebug:4966: Disabled
VkDevice supports the VK_KHR_bind_memory2 extension
supportsBlendOperationAdvanced (Vulkan features) anglebug:3586: Disabled
VkDevice supports VK_EXT_blend_operation_advanced extension.
supportsColorWriteEnable (Vulkan features) anglebug:7161: Disabled
VkDevice supports VK_EXT_color_write_enable extension
supportsComputeTranscodeEtcToBc (Vulkan features): Disabled
supports compute shader transcode etc format to bc format
supportsCustomBorderColor (Vulkan features) anglebug:3577: Disabled
VkDevice supports the VK_EXT_custom_border_color extension
supportsDepthClipControl (Vulkan features) anglebug:5421: Disabled
VkDevice supports VK_EXT_depth_clip_control extension.
supportsDepthClipEnable (Vulkan features) anglebug:3970: Disabled
VkDevice supports the VK_EXT_depth_clip_enable extension.
supportsDepthStencilResolve (Vulkan features) anglebug:4836: Disabled
VkDevice supports the VK_KHR_depth_stencil_resolve extension with the independentResolveNone feature
supportsExtendedDynamicState (Vulkan features) anglebug:5906: Disabled
VkDevice supports VK_EXT_extended_dynamic_state extension
supportsExtendedDynamicState2 (Vulkan features) anglebug:5906: Disabled
VkDevice supports VK_EXT_extended_dynamic_state2 extension
supportsExternalFenceCapabilities (Vulkan features): Enabled: isVulkan11Instance() || ExtensionFound("VK_KHR_external_fence_capabilities", instanceExtensionNames)
VkInstance supports the VK_KHR_external_fence_capabilities extension
supportsExternalFenceFd (Vulkan features) anglebug:2517: Disabled
VkDevice supports the VK_KHR_external_fence_fd extension
supportsExternalMemoryDmaBufAndModifiers (Vulkan features) anglebug:6248: Disabled
VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier extensions
supportsExternalMemoryFd (Vulkan features): Disabled
VkDevice supports the VK_KHR_external_memory_fd extension
supportsExternalMemoryFuchsia (Vulkan features): Disabled
VkDevice supports the VK_FUCHSIA_external_memory extension
supportsExternalMemoryHost (Vulkan features): Disabled
VkDevice supports the VK_EXT_external_memory_host extension
supportsExternalSemaphoreCapabilities (Vulkan features): Enabled: isVulkan11Instance() || ExtensionFound("VK_KHR_external_semaphore_capabilities", instanceExtensionNames)
VkInstance supports the VK_KHR_external_semaphore_capabilities extension
supportsExternalSemaphoreFd (Vulkan features): Disabled
VkDevice supports the VK_KHR_external_semaphore_fd extension
supportsExternalSemaphoreFuchsia (Vulkan features): Disabled
VkDevice supports the VK_FUCHSIA_external_semaphore extension
supportsFilteringPrecision (Vulkan features): Disabled
VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension
supportsFragmentShaderPixelInterlock (Vulkan features): Disabled
VkDevice supports the VK_EXT_fragment_shader_interlock extension and has the fragmentShaderPixelInterlock feature
supportsFragmentShadingRate (Vulkan features) anglebug:7172: Disabled
VkDevice supports VK_KHR_fragment_shading_rate extension
supportsGGPFrameToken (Vulkan features): Disabled
VkDevice supports the VK_GGP_frame_token extension
supportsGeometryStreamsCapability (Vulkan features) anglebug:3206: Disabled
Implementation supports the GeometryStreams SPIR-V capability.
supportsGetMemoryRequirements2 (Vulkan features) anglebug:4830: Disabled
VkDevice supports the VK_KHR_get_memory_requirements2 extension
supportsGraphicsPipelineLibrary (Vulkan features) anglebug:7369: Disabled
VkDevice supports the VK_EXT_graphics_pipeline_library extension
supportsHostQueryReset (Vulkan features) anglebug:6692: Disabled
VkDevice supports VK_EXT_host_query_reset extension
supportsImage2dViewOf3d (Vulkan features) anglebug:7320: Disabled
VkDevice supports VK_EXT_image_2d_view_of_3d
supportsImageCubeArray (Vulkan features) anglebug:3584: Disabled
VkDevice supports the imageCubeArray feature properly
supportsImageFormatList (Vulkan features) anglebug:5281: Disabled
Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs that support VK_KHR_image_format_list
supportsImagelessFramebuffer (Vulkan features) anglebug:7553: Disabled
VkDevice supports VK_KHR_imageless_framebuffer extension
supportsIncrementalPresent (Vulkan features): Disabled
VkDevice supports the VK_KHR_incremental_present extension
supportsIndexTypeUint8 (Vulkan features) anglebug:4405: Disabled
VkDevice supports the VK_EXT_index_type_uint8 extension
supportsLockSurfaceExtension (Vulkan features): Disabled
Surface supports the EGL_KHR_lock_surface3 extension
supportsLogicOpDynamicState (Vulkan features) anglebug:3862: Disabled
VkDevice supports the logicOp feature of VK_EXT_extended_dynamic_state2 extension
supportsMemoryBudget (Vulkan features): Disabled
VkDevice supports the VK_EXT_memory_budget extension.
supportsMixedReadWriteDepthStencilLayouts (Vulkan features) anglebug:7899: Disabled
VkDevice supports the mixed read and write depth/stencil layouts introduced by VK_KHR_maintenance2
supportsMultiDrawIndirect (Vulkan features) anglebug:6439: Disabled
VkDevice supports the multiDrawIndirect extension
supportsMultisampledRenderToSingleSampled (Vulkan features) anglebug:4836: Disabled
VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension
supportsMultisampledRenderToSingleSampledGOOGLEX (Vulkan features) anglebug:4836: Disabled
VkDevice supports the VK_GOOGLEX_multisampled_render_to_single_sampled extension
supportsMultiview (Vulkan features) anglebug:6048: Disabled
VkDevice supports the VK_KHR_multiview extension
supportsNegativeViewport (Vulkan features): Disabled
The driver supports inverting the viewport with a negative height.
supportsPipelineCreationCacheControl (Vulkan features) anglebug:5881: Disabled
VkDevice supports VK_EXT_pipeline_creation_cache_control extension
supportsPipelineCreationFeedback (Vulkan features) anglebug:5881: Disabled
VkDevice supports VK_EXT_pipeline_creation_feedback extension
supportsPipelineProtectedAccess (Vulkan features) anglebug:7714: Disabled
VkDevice supports the VK_EXT_pipeline_protected_access extension
supportsPipelineRobustness (Vulkan features) anglebug:5845: Disabled
VkDevice supports VK_EXT_pipeline_robustness extension
supportsPipelineStatisticsQuery (Vulkan features) anglebug:5430: Disabled
VkDevice supports the pipelineStatisticsQuery feature
supportsPresentation (Vulkan features): Disabled
VkDisplay supports presentation through a present family queue
supportsPrimitiveTopologyListRestart (Vulkan features) anglebug:3832: Disabled
VkDevice supports VK_EXT_primitive_topology_list_restart extension.
supportsPrimitivesGeneratedQuery (Vulkan features) anglebug:5430: Disabled
VkDevice supports VK_EXT_primitives_generated_query extension
supportsProtectedMemory (Vulkan features) anglebug:3965: Disabled
VkDevice supports protected memory
supportsRasterizationOrderAttachmentAccess (Vulkan features) anglebug:7604: Disabled
VkDevice supports VK_EXT_rasterization_order_attachment_access extension
supportsRenderPassLoadStoreOpNone (Vulkan features) anglebug:5371: Disabled
VkDevice supports VK_EXT_load_store_op_none extension.
supportsRenderPassStoreOpNone (Vulkan features) anglebug:5055: Disabled
VkDevice supports VK_QCOM_render_pass_store_ops extension.
supportsRenderpass2 (Vulkan features): Disabled
VkDevice supports the VK_KHR_create_renderpass2 extension
supportsSampler2dViewOf3d (Vulkan features) anglebug:7320: Disabled
VkDevice supports the sampler2DViewOf3D feature of VK_EXT_image_2d_view_of_3d
supportsSamplerMirrorClampToEdge (Vulkan features): Disabled
VkDevice supports the VK_KHR_sampler_mirror_clamp_to_edge extension
supportsShaderFloat16 (Vulkan features) anglebug:4551: Disabled
VkDevice supports the VK_KHR_shader_float16_int8 extension and has the shaderFloat16 feature
supportsShaderFramebufferFetch (Vulkan features): Disabled
Whether the Vulkan backend supports coherent framebuffer fetch
supportsShaderFramebufferFetchNonCoherent (Vulkan features): Disabled
Whether the Vulkan backend supports non-coherent framebuffer fetch
supportsShaderStencilExport (Vulkan features): Disabled
VkDevice supports the VK_EXT_shader_stencil_export extension
supportsSharedPresentableImageExtension (Vulkan features): Disabled
VkSurface supports the VK_KHR_shared_presentable_images extension
supportsSurfaceCapabilities2Extension (Vulkan features): Enabled: ExtensionFound("VK_KHR_get_surface_capabilities2", instanceExtensionNames)
VkInstance supports the VK_KHR_get_surface_capabilities2 extension
supportsSurfaceProtectedCapabilitiesExtension (Vulkan features): Disabled: ExtensionFound("VK_KHR_surface_protected_capabilities", instanceExtensionNames)
VkInstance supports the VK_KHR_surface_protected_capabilities extension
supportsSurfaceProtectedSwapchains (Vulkan features): Disabled
VkSurface supportsProtected for protected swapchains
supportsSurfacelessQueryExtension (Vulkan features): Disabled: ExtensionFound("VK_GOOGLE_surfaceless_query", instanceExtensionNames) && !isMockICDEnabled()
VkInstance supports the VK_GOOGLE_surfaceless_query extension
supportsSwapchainMaintenance1 (Vulkan features) anglebug:7847: Disabled
VkDevice supports the VK_EXT_surface_maintenance1 and VK_EXT_swapchain_maintenance1 extensions
supportsTimestampSurfaceAttribute (Vulkan features) anglebug:7489: Disabled
Platform supports setting frame timestamp surface attribute
supportsTransformFeedbackExtension (Vulkan features) anglebug:3206: Disabled
Transform feedback uses the VK_EXT_transform_feedback extension.
supportsVertexInputDynamicState (Vulkan features) anglebug:7162: Disabled
VkDevice supports VK_EXT_vertex_input_dynamic_state extension
supportsYUVSamplerConversion (Vulkan features): Disabled
VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension
supportsYuvTarget (Vulkan features): Disabled
VkDevice supports VK_ANDROID_render_to_external_format and VK_EXT_ycbcr_attachment
swapbuffersOnFlushOrFinishWithSingleBuffer (Vulkan features) anglebug:6878: Disabled
Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared Present mode
syncMonolithicPipelinesToBlobCache (Vulkan workarounds) anglebug:7369: Disabled
Whether it's beneficial to store monolithic pipelines in the blob cache when VK_EXT_graphics_pipeline_library is in use. Otherwise the libraries are stored only, and monolithic pipelines are recreated on every run
useMultipleDescriptorsForExternalFormats (Vulkan workarounds) anglebug:6141: Disabled
Return a default descriptor count for external formats.
useNonZeroStencilWriteMaskStaticState (Vulkan workarounds) anglebug:7556: Disabled
Work around a driver bug where 0 in stencil write mask static state would make the corresponding dynamic state malfunction in the presence of discard or alpha to coverage
useResetCommandBufferBitForSecondaryPools (Vulkan workarounds): Disabled
Use VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT for initializing SecondaryCommandPools when using VulkanSecondaryCommandBuffer.
useVmaForImageSuballocation (Vulkan features): Disabled
Utilize VMA for image memory suballocation.
varyingsRequireMatchingPrecisionInSpirv (Vulkan workarounds) anglebug:7488: Disabled
Add additional SPIRV instructions to make sure precision between shader stages match with each other
waitIdleBeforeSwapchainRecreation (Vulkan workarounds) anglebug:5061: Disabled
Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.
warmUpPipelineCacheAtLink (Vulkan features) anglebug:5881: Disabled
Warm up the Vulkan pipeline cache at link time
DAWN Info

Vulkan backend - Intel(R) HD Graphics 4400 (HSW GT2)
[WebGPU Status]
Available
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - Intel(R) HD Graphics 4400 (HSW GT2)
[WebGPU Status]
Available
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - llvmpipe (LLVM 16.0.6, 256 bits)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - llvmpipe (LLVM 16.0.6, 256 bits)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
pipeline-statistics-query
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - SwiftShader Device (Subzero)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
texture-compression-etc2
texture-compression-astc
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments

Vulkan backend - SwiftShader Device (Subzero)
[WebGPU Status]
Blocklisted
[Default Toggle Names]
lazy_clear_resource_on_first_use: https://crbug.com/dawn/145: Clears resource to zero on first usage. This initializes the resource so that no dirty bits from recycled memory is present in the new resource.
use_temporary_buffer_in_texture_to_texture_copy: https://crbug.com/dawn/42: Split texture-to-texture copy into two copies: copy from source texture into a temporary buffer, and copy from the temporary buffer into the destination texture when copying between compressed textures that don't have block-aligned sizes. This workaround is enabled by default on all Vulkan drivers to solve an issue in the Vulkan SPEC about the texture-to-texture copies with compressed formats. See #1005 (KhronosGroup/Vulkan-Docs#1005) for more details.
vulkan_use_d32s8: https://crbug.com/dawn/286: Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When available the backend will use D32S8 (toggle to on) but setting the toggle to off will make it use the D24S8 format when possible.
vulkan_use_s8: https://crbug.com/dawn/666: Vulkan has a pure stencil8 format but it is not universally available. When this toggle is on, the backend will use S8 for the stencil8 format, otherwise it will fallback to D32S8 or D24S8.
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
use_placeholder_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a placeholder empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
use_vulkan_zero_initialize_workgroup_memory_extension: https://crbug.com/dawn/1302: Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan extension VK_KHR_zero_initialize_workgroup_memory is supported.
[WebGPU Forced Toggles - enabled]
disallow_spirv: https://crbug.com/1214923: Disallow usage of SPIR-V completely so that only WGSL is used for shader modules. This is useful to prevent a Chromium renderer process from successfully sending SPIR-V code to be compiled in the GPU process.
[Supported Features]
texture-compression-bc
texture-compression-etc2
texture-compression-astc
timestamp-query
timestamp-query-inside-passes
depth-clip-control
depth32float-stencil8
indirect-first-instance
rg11b10ufloat-renderable
bgra8unorm-storage
float32-filterable
dawn-internal-usages
dawn-native
implicit-device-sync
surface-capabilities
transient-attachments
Version Information
Data exported
2023-08-13T05:02:49.643Z
Chrome version
Chrome/115.0.5790.172
Operating system
Linux 6.4.9-cbl1.0.fc38.x86_64
Software rendering list URL
https://chromium.googlesource.com/chromium/src/+/9497f0aa17d3136ec204fd0d0241a44dcbe68003/gpu/config/software_rendering_list.json
Driver bug list URL
https://chromium.googlesource.com/chromium/src/+/9497f0aa17d3136ec204fd0d0241a44dcbe68003/gpu/config/gpu_driver_bug_list.json
ANGLE commit id
dfa3a3070f78
2D graphics backend
Skia/115 d0d16e9faa7fae0d53ca78c8dc966eae446cb130
Command Line
./thorium --disable-features=UseChromeOSDirectVideoDecoder --disable-gpu-memory-buffer-compositor-resources --disable-gpu-memory-buffer-video-frames --enable-hardware-overlays --enable-accelerated-video-decode --enable-features=VaapiVideoDecoder,VaapiVideoEncoder,RawDraw --ozone-platform=wayland --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --disable-gpu-driver-bug-workarounds --enable-native-gpu-memory-buffers --use-cmd-decoder=passthrough --ozone-platform-hint=auto --use-vulkan --use-gl=egl --flag-switches-begin --flag-switches-end --origin-trial-disabled-features=WebGPU
Driver Information
Initialization time
152
In-process GPU
false
Passthrough Command Decoder
true
Sandboxed
false
GPU0
VENDOR= 0xffff [Google Inc. (Google)], DEVICE=0xffff [ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)], DRIVER_VENDOR=SwANGLE, DRIVER_VERSION=5.0.0 ACTIVE
Optimus
false
AMD switchable
false
GPU CUDA compute capability major version
0
Pixel shader version
1.00
Vertex shader version
1.00
Max. MSAA samples
4
Machine model name
Machine model version
GL implementation parts
(gl=egl-angle,angle=swiftshader)
Display type
ANGLE_SWIFTSHADER
GL_VENDOR
Google Inc. (Google)
GL_RENDERER
ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)
GL_VERSION
OpenGL ES 2.0.0 (ANGLE 2.1.21145 git hash: dfa3a3070f78)
GL_EXTENSIONS
GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_image GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_memory_object_flags GL_ANGLE_memory_size GL_ANGLE_multi_draw GL_ANGLE_polygon_mode GL_ANGLE_program_cache_control GL_ANGLE_read_only_depth_stencil_feedback_loops GL_ANGLE_relaxed_vertex_attribute_type GL_ANGLE_request_extension GL_ANGLE_rgbx_internal_format GL_ANGLE_robust_client_memory GL_ANGLE_robust_fragment_shader_output GL_ANGLE_robust_resource_initialization GL_ANGLE_texture_usage GL_ANGLE_vulkan_image GL_APPLE_clip_distance GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgb GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_texture GL_CHROMIUM_lose_context GL_EXT_EGL_image_external_wrap_modes GL_EXT_base_instance GL_EXT_blend_minmax GL_EXT_buffer_storage GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_copy_image GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_multi_draw_indirect GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_semaphore GL_EXT_separate_shader_objects GL_EXT_shader_non_constant_global_initializers GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_type_2_10_10_10_REV GL_EXT_unpack_subimage GL_KHR_debug GL_KHR_robust_buffer_access_behavior GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_polygon_mode GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_primitive_bounding_box GL_OES_rgb8_rgba8 GL_OES_sample_shading GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_OES_vertex_half_float
Disabled Extensions
Disabled WebGL Extensions
Window system binding vendor
Google Inc. (Google)
Window system binding version
1.5 (ANGLE 2.1.21145 git hash: dfa3a3070f78)
Window system binding extensions
EGL_EXT_create_context_robustness EGL_ANGLE_surface_orientation EGL_KHR_create_context EGL_KHR_image EGL_KHR_image_base EGL_KHR_gl_colorspace EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR_get_all_proc_addresses EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANGLE_create_context_backwards_compatible EGL_KHR_no_config_context EGL_IMG_context_priority EGL_KHR_create_context_no_error EGL_KHR_reusable_sync EGL_EXT_buffer_age EGL_ANGLE_create_surface_swap_interval EGL_ANGLE_vulkan_image EGL_KHR_partial_update
XDG_CURRENT_DESKTOP
GNOME
XDG_SESSION_TYPE
wayland
GDMSESSION
gnome
Interfaces exposed by the Wayland compositor
wl_compositor:5 wl_shm:1 wl_output:4 zxdg_output_manager_v1:3 wl_data_device_manager:3 zwp_primary_selection_device_manager_v1:1 wl_subcompositor:1 xdg_wm_base:4 gtk_shell1:5 wp_viewporter:1 wp_fractional_scale_manager_v1:1 zwp_pointer_gestures_v1:3 zwp_tablet_manager_v2:1 wl_seat:8 zwp_relative_pointer_manager_v1:1 zwp_pointer_constraints_v1:1 zxdg_exporter_v2:1 zxdg_importer_v2:1 zxdg_exporter_v1:1 zxdg_importer_v1:1 wp_single_pixel_buffer_manager_v1:1 zwp_keyboard_shortcuts_inhibit_manager_v1:1 zwp_text_input_manager_v3:1 wp_presentation:1 xdg_activation_v1:1 zwp_linux_dmabuf_v1:4 wl_drm:2
Ozone platform
wayland
Direct rendering version
unknown
Reset notification strategy
0x8252
GPU process crash count
6
gfx::BufferFormats supported for allocation and texturing
R_8: not supported, R_16: not supported, RG_88: not supported, RG_1616: not supported, BGR_565: not supported, RGBA_4444: not supported, RGBX_8888: not supported, RGBA_8888: not supported, BGRX_8888: not supported, BGRA_1010102: not supported, RGBA_1010102: not supported, BGRA_8888: not supported, RGBA_F16: not supported, YVU_420: not supported, YUV_420_BIPLANAR: not supported, YUVA_420_TRIPLANAR: not supported, P010: not supported
Compositor Information
Tile Update Mode
Zero-copy
Partial Raster
Disabled
GpuMemoryBuffers Status
R_8
Software only
R_16
Software only
RG_88
Software only
RG_1616
Software only
BGR_565
GPU_READ
RGBA_4444
Software only
RGBX_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRX_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_1010102
SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_1010102
SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_F16
Software only
YVU_420
Software only
YUV_420_BIPLANAR
Software only
YUVA_420_TRIPLANAR
Software only
P010
Software only
Display(s) Information
Info
Display[4] bounds=[0,0 1920x1080], workarea=[0,0 1920x1080], scale=1, rotation=0, panel_rotation=0 external.
Color space (all)
{primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
Buffer format (all)
RGBA_8888
Color volume
{name:'srgb', r:[0.6400, 0.3300], g:[0.3000, 0.6000], b:[0.1500, 0.3300], w:[0.3127, 0.3290]}
SDR white level in nits
203
HDR relative maximum luminance
1
Bits per color component
8
Bits per pixel
24
Video Acceleration Information
Decoding
Encoding
Vulkan Information
Device Performance Information
Log Messages
GpuProcessHost: The GPU process crashed!
GpuProcessHost: The GPU process crashed!
GpuProcessHost: The GPU process crashed!
GpuProcessHost: The GPU process crashed!
GpuProcessHost: The GPU process crashed!
GpuProcessHost: The GPU process crashed!
[35508:35508:0813/070246.148238:ERROR:gl_display.cc(520)] : EGL Driver message (Error) eglCreateContext: Requested GLES version (3.0) is greater than max supported (2, 0).
[35508:35508:0813/070246.153911:WARNING:sandbox_linux.cc(393)] : InitializeSandbox() called with multiple threads in process gpu-process.
[35508:35508:0813/070246.156684:ERROR:gl_display.cc(520)] : EGL Driver message (Error) eglCreateContext: Requested GLES version (3.0) is greater than max supported (2, 0).

chrome://gpu/ from version 111 with above flags (acceleration working, confirmed with intel_gpu_top)

Graphics Feature Status
Canvas: Hardware accelerated
Canvas out-of-process rasterization: Disabled
Direct Rendering Display Compositor: Disabled
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
OpenGL: Enabled
Rasterization: Hardware accelerated on all pages
Raw Draw: Enabled
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
Vulkan: Enabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
WebGPU: Disabled
Problems Detected
WebGPU has been disabled via blocklist or the command line.
Disabled Features: webgpu
Version Information
Data exported
2023-08-13T04:58:28.459Z
Chrome version
Chrome/111.0.5563.111
Operating system
Linux 6.4.9-cbl1.0.fc38.x86_64
Software rendering list URL
https://chromium.googlesource.com/chromium/src/+/72aeebbe4105b516c909fee3067677989fa41e6a/gpu/config/software_rendering_list.json
Driver bug list URL
https://chromium.googlesource.com/chromium/src/+/72aeebbe4105b516c909fee3067677989fa41e6a/gpu/config/gpu_driver_bug_list.json
ANGLE commit id
d74c8f9b2202
2D graphics backend
Skia/111 59932b057f281ddaeb0926ecfac55486270f8c51
Command Line
/usr/bin/thorium-browser --enable-experimental-web-platform-features --new-canvas-2d-api --disable-features=UseChromeOSDirectVideoDecoder --disable-gpu-memory-buffer-compositor-resources --disable-gpu-memory-buffer-video-frames --enable-hardware-overlays --enable-accelerated-video-decode --enable-features=VaapiVideoDecoder,VaapiVideoEncoder,RawDraw --ozone-platform=wayland --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --disable-gpu-driver-bug-workarounds --enable-native-gpu-memory-buffers --use-cmd-decoder=passthrough --ozone-platform-hint=auto --use-vulkan --use-gl=egl --flag-switches-begin --flag-switches-end --origin-trial-disabled-features=WebGPU
Driver Information
Initialization time
192
In-process GPU
false
Passthrough Command Decoder
false
Sandboxed
false
GPU0
VENDOR= 0x8086 [Intel], DEVICE=0x0a16 [Mesa Intel(R) HD Graphics 4400 (HSW GT2)], DRIVER_VENDOR=Mesa, DRIVER_VERSION=23.1.5 ACTIVE
Optimus
false
AMD switchable
false
GPU CUDA compute capability major version
0
Pixel shader version
3.20
Vertex shader version
3.20
Max. MSAA samples
8
Machine model name
Machine model version
GL_VENDOR
Intel
GL_RENDERER
Mesa Intel(R) HD Graphics 4400 (HSW GT2)
GL_VERSION
OpenGL ES 3.2 Mesa 23.1.5
GL_EXTENSIONS
GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_filter_anisotropic GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_draw_instanced GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_AMD_performance_monitor GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_NV_conditional_render GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_NV_pack_subimage GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_OES_viewport_array GL_ANGLE_pack_reverse_row_order GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_occlusion_query_boolean GL_EXT_robustness GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_NV_generate_mipmap_sRGB GL_NV_pixel_buffer_object GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_debug_label GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_group_vote GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_tessellation_point_size GL_EXT_tessellation_shader GL_INTEL_performance_query GL_ANDROID_extension_pack_es31a GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_copy_image GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_gpu_shader5 GL_EXT_polygon_offset_clamp GL_EXT_primitive_bounding_box GL_EXT_render_snorm GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_cube_map_array GL_EXT_texture_norm16 GL_EXT_texture_view GL_KHR_blend_equation_advanced GL_KHR_context_flush_control GL_KHR_robust_buffer_access_behavior GL_NV_image_formats GL_NV_shader_noperspective_interpolation GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_gpu_shader5 GL_OES_primitive_bounding_box GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_io_blocks GL_OES_shader_multisample_interpolation GL_OES_tessellation_point_size GL_OES_tessellation_shader GL_OES_texture_border_clamp GL_OES_texture_buffer GL_OES_texture_cube_map_array GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_texture_view GL_EXT_blend_func_extended GL_EXT_buffer_storage GL_EXT_float_blend GL_EXT_geometry_point_size GL_EXT_geometry_shader GL_EXT_shader_samples_identical GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_OES_geometry_point_size GL_OES_geometry_shader GL_OES_shader_image_atomic GL_EXT_clear_texture GL_EXT_clip_cull_distance GL_EXT_disjoint_timer_query GL_EXT_texture_compression_s3tc_srgb GL_MESA_shader_integer_functions GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_texture_compression_bptc GL_EXT_texture_mirror_clamp_to_edge GL_KHR_parallel_shader_compile GL_NV_alpha_to_coverage_dither_control GL_EXT_EGL_image_storage GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_texture_shadow_lod GL_INTEL_blackhole_render GL_MESA_framebuffer_flip_y GL_NV_compute_shader_derivatives GL_EXT_demote_to_helper_invocation GL_EXT_depth_clamp GL_EXT_texture_query_lod GL_MESA_bgra
Disabled Extensions
Disabled WebGL Extensions
Window system binding vendor
Mesa Project
Window system binding version
1.5
Window system binding extensions
EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_present_opaque EGL_EXT_swap_buffers_with_damage EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display EGL_WL_create_wayland_buffer_from_image
XDG_CURRENT_DESKTOP
GNOME
XDG_SESSION_TYPE
wayland
GDMSESSION
gnome
Interfaces exposed by the Wayland compositor
wl_compositor:5 wl_shm:1 wl_output:4 zxdg_output_manager_v1:3 wl_data_device_manager:3 zwp_primary_selection_device_manager_v1:1 wl_subcompositor:1 xdg_wm_base:4 gtk_shell1:5 wp_viewporter:1 wp_fractional_scale_manager_v1:1 zwp_pointer_gestures_v1:3 zwp_tablet_manager_v2:1 wl_seat:8 zwp_relative_pointer_manager_v1:1 zwp_pointer_constraints_v1:1 zxdg_exporter_v2:1 zxdg_importer_v2:1 zxdg_exporter_v1:1 zxdg_importer_v1:1 wp_single_pixel_buffer_manager_v1:1 zwp_keyboard_shortcuts_inhibit_manager_v1:1 zwp_text_input_manager_v3:1 wp_presentation:1 xdg_activation_v1:1 zwp_linux_dmabuf_v1:4 wl_drm:2
Ozone platform
wayland
Direct rendering version
unknown
Reset notification strategy
0x8252
GPU process crash count
1
gfx::BufferFormats supported for allocation and texturing
R_8: not supported, R_16: not supported, RG_88: not supported, RG_1616: not supported, BGR_565: not supported, RGBA_4444: not supported, RGBX_8888: not supported, RGBA_8888: not supported, BGRX_8888: not supported, BGRA_1010102: not supported, RGBA_1010102: not supported, BGRA_8888: not supported, RGBA_F16: not supported, YVU_420: not supported, YUV_420_BIPLANAR: not supported, YUVA_420_TRIPLANAR: not supported, P010: not supported
Compositor Information
Tile Update Mode
Zero-copy
Partial Raster
Disabled
GpuMemoryBuffers Status
R_8
Software only
R_16
Software only
RG_88
Software only
RG_1616
Software only
BGR_565
GPU_READ
RGBA_4444
Software only
RGBX_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRX_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_1010102
SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_1010102
SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_8888
GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_F16
Software only
YVU_420
Software only
YUV_420_BIPLANAR
Software only
YUVA_420_TRIPLANAR
Software only
P010
Software only
Display(s) Information
Info
Display[4] bounds=[0,0 1920x1080], workarea=[0,0 1920x1080], scale=1, rotation=0, panel_rotation=0 external.
Color space (all)
{primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
Buffer format (all)
RGBA_8888
Color volume
{name:'srgb', r:[0.6400, 0.3300], g:[0.3000, 0.6000], b:[0.1500, 0.3300], w:[0.3127, 0.3290]}
SDR white level in nits
203
HDR relative maximum luminance
1
Bits per color component
8
Bits per pixel
24
Video Acceleration Information
Decoding
Encoding
Vulkan Information
info
{ "apiVersion": "1.3.239", "usedApiVersion": "1.1.0", "instanceExtensions": { "VK_KHR_device_group_creation": 1, "VK_KHR_display": 23, "VK_KHR_external_fence_capabilities": 1, "VK_KHR_external_memory_capabilities": 1, "VK_KHR_external_semaphore_capabilities": 1, "VK_KHR_get_display_properties2": 1, "VK_KHR_get_physical_device_properties2": 2, "VK_KHR_get_surface_capabilities2": 1, "VK_KHR_surface": 25, "VK_KHR_surface_protected_capabilities": 1, "VK_KHR_wayland_surface": 6, "VK_KHR_xcb_surface": 6, "VK_EXT_acquire_drm_display": 1, "VK_EXT_debug_report": 10, "VK_EXT_debug_utils": 2, "VK_EXT_direct_mode_display": 1, "VK_EXT_display_surface_counter": 1, "VK_EXT_swapchain_colorspace": 4, "VK_EXT_surface_maintenance1": 1, "VK_KHR_portability_enumeration": 1 }, "enabledInstanceExtensions": [ "VK_KHR_external_memory_capabilities", "VK_KHR_external_semaphore_capabilities", "VK_EXT_debug_report" ], "instanceLayers": [ { "layerName": "VK_LAYER_OBS_vkcapture_64", "specVersion": 4206813, "implementationVersion": "0.0.1", "description": "OBS Linux game capture" }, { "layerName": "VK_LAYER_MESA_device_select", "specVersion": 4206803, "implementationVersion": "0.0.1", "description": "Linux device selection layer" }, { "layerName": "VK_LAYER_FROG_gamescope_wsi", "specVersion": 4206813, "implementationVersion": "0.0.1", "description": "Gamescope WSI (XWayland Bypass) Layer (x86_64)" } ], "physicalDevices": [ { "properties": { "apiVersion": "1.2.246", "driverVersion": "23.1.5", "vendorID": 32902, "deviceID": 2582, "deviceType": 1, "deviceName": "Intel(R) HD Graphics 4400 (HSW GT2)", "pipelineCacheUUID": "bb064818-f75d-0348-c59c-b72dd3c8e9bf", "limits": { "maxImageDimension1D": 16384, "maxImageDimension2D": 8192, "maxImageDimension3D": 2048, "maxImageDimensionCube": 16384, "maxImageArrayLayers": 2048, "maxTexelBufferElements": 134217728, "maxUniformBufferRange": 134217728, "maxStorageBufferRange": 1073741824, "maxPushConstantsSize": 128, "maxMemoryAllocationCount": 4294967295, "maxSamplerAllocationCount": 65536, "bufferImageGranularity": 1, "sparseAddressSpaceSize": 0, "maxBoundDescriptorSets": 32, "maxPerStageDescriptorSamplers": 128, "maxPerStageDescriptorUniformBuffers": 64, "maxPerStageDescriptorStorageBuffers": 64, "maxPerStageDescriptorSampledImages": 128, "maxPerStageDescriptorStorageImages": 64, "maxPerStageDescriptorInputAttachments": 64, "maxPerStageResources": 231, "maxDescriptorSetSamplers": 768, "maxDescriptorSetUniformBuffers": 384, "maxDescriptorSetUniformBuffersDynamic": 8, "maxDescriptorSetStorageBuffers": 384, "maxDescriptorSetStorageBuffersDynamic": 8, "maxDescriptorSetSampledImages": 768, "maxDescriptorSetStorageImages": 384, "maxDescriptorSetInputAttachments": 256, "maxVertexInputAttributes": 29, "maxVertexInputBindings": 31, "maxVertexInputAttributeOffset": 2047, "maxVertexInputBindingStride": 2048, "maxVertexOutputComponents": 128, "maxTessellationGenerationLevel": 64, "maxTessellationPatchSize": 32, "maxTessellationControlPerVertexInputComponents": 128, "maxTessellationControlPerVertexOutputComponents": 128, "maxTessellationControlPerPatchOutputComponents": 128, "maxTessellationControlTotalOutputComponents": 2048, "maxTessellationEvaluationInputComponents": 128, "maxTessellationEvaluationOutputComponents": 128, "maxGeometryShaderInvocations": 32, "maxGeometryInputComponents": 64, "maxGeometryOutputComponents": 128, "maxGeometryOutputVertices": 256, "maxGeometryTotalOutputComponents": 1024, "maxFragmentInputComponents": 116, "maxFragmentOutputAttachments": 8, "maxFragmentDualSrcAttachments": 1, "maxFragmentCombinedOutputResources": 136, "maxComputeSharedMemorySize": 65536, "maxComputeWorkGroupCount": [ 65535, 65535, 65535 ], "maxComputeWorkGroupInvocations": 1024, "maxComputeWorkGroupSize": [ 1024, 1024, 1024 ], "subPixelPrecisionBits": 8, "subTexelPrecisionBits": 8, "mipmapPrecisionBits": 8, "maxDrawIndexedIndexValue": 4294967295, "maxDrawIndirectCount": 4294967295, "maxSamplerLodBias": 16, "maxSamplerAnisotropy": 16, "maxViewports": 16, "maxViewportDimensions": [ 16384, 16384 ], "viewportBoundsRange": [ -32768, 32767 ], "viewportSubPixelBits": 13, "minMemoryMapAlignment": 4096, "minTexelBufferOffsetAlignment": 1, "minUniformBufferOffsetAlignment": 1, "minStorageBufferOffsetAlignment": 1, "minTexelOffset": -8, "maxTexelOffset": 7, "minTexelGatherOffset": -32, "maxTexelGatherOffset": 31, "minInterpolationOffset": -0.5, "maxInterpolationOffset": 0.4375, "subPixelInterpolationOffsetBits": 4, "maxFramebufferWidth": 16384, "maxFramebufferHeight": 16384, "maxFramebufferLayers": 2048, "framebufferColorSampleCounts": 13, "framebufferDepthSampleCounts": 13, "framebufferStencilSampleCounts": 13, "framebufferNoAttachmentsSampleCounts": 13, "maxColorAttachments": 8, "sampledImageColorSampleCounts": 13, "sampledImageIntegerSampleCounts": 1, "sampledImageDepthSampleCounts": 13, "sampledImageStencilSampleCounts": 13, "storageImageSampleCounts": 1, "maxSampleMaskWords": 1, "timestampComputeAndGraphics": true, "timestampPeriod": 80, "maxClipDistances": 8, "maxCullDistances": 8, "maxCombinedClipAndCullDistances": 8, "discreteQueuePriorities": 2, "pointSizeRange": [ 0.125, 255.875 ], "lineWidthRange": [ 0, 7.9921875 ], "pointSizeGranularity": 0.125, "lineWidthGranularity": 0.0078125, "strictLines": false, "standardSampleLocations": true, "optimalBufferCopyOffsetAlignment": 1, "optimalBufferCopyRowPitchAlignment": 1, "nonCoherentAtomSize": 1 }, "sparseProperties": { "residencyStandard2DBlockShape": false, "residencyStandard2DMultisampleBlockShape": false, "residencyStandard3DBlockShape": false, "residencyAlignedMipSize": false, "residencyNonResidentStrict": false } }, "extensions": { "VK_KHR_bind_memory2": 1, "VK_KHR_copy_commands2": 1, "VK_KHR_create_renderpass2": 1, "VK_KHR_dedicated_allocation": 3, "VK_KHR_deferred_host_operations": 4, "VK_KHR_depth_stencil_resolve": 1, "VK_KHR_descriptor_update_template": 1, "VK_KHR_device_group": 4, "VK_KHR_draw_indirect_count": 1, "VK_KHR_driver_properties": 1, "VK_KHR_dynamic_rendering": 1, "VK_KHR_external_fence": 1, "VK_KHR_external_fence_fd": 1, "VK_KHR_external_memory": 1, "VK_KHR_external_memory_fd": 1, "VK_KHR_external_semaphore": 1, "VK_KHR_external_semaphore_fd": 1, "VK_KHR_format_feature_flags2": 2, "VK_KHR_get_memory_requirements2": 1, "VK_KHR_image_format_list": 1, "VK_KHR_imageless_framebuffer": 1, "VK_KHR_incremental_present": 2, "VK_KHR_maintenance1": 2, "VK_KHR_maintenance2": 1, "VK_KHR_maintenance3": 1, "VK_KHR_maintenance4": 2, "VK_KHR_multiview": 1, "VK_KHR_pipeline_executable_properties": 1, "VK_KHR_push_descriptor": 2, "VK_KHR_relaxed_block_layout": 1, "VK_KHR_sampler_mirror_clamp_to_edge": 3, "VK_KHR_sampler_ycbcr_conversion": 14, "VK_KHR_separate_depth_stencil_layouts": 1, "VK_KHR_shader_clock": 1, "VK_KHR_shader_draw_parameters": 1, "VK_KHR_shader_float_controls": 4, "VK_KHR_shader_integer_dot_product": 1, "VK_KHR_shader_non_semantic_info": 1, "VK_KHR_shader_subgroup_uniform_control_flow": 1, "VK_KHR_shader_terminate_invocation": 1, "VK_KHR_spirv_1_4": 1, "VK_KHR_storage_buffer_storage_class": 1, "VK_KHR_swapchain": 70, "VK_KHR_swapchain_mutable_format": 1, "VK_KHR_synchronization2": 1, "VK_KHR_timeline_semaphore": 2, "VK_KHR_uniform_buffer_standard_layout": 1, "VK_KHR_variable_pointers": 1, "VK_KHR_vulkan_memory_model": 3, "VK_KHR_workgroup_memory_explicit_layout": 1, "VK_KHR_zero_initialize_workgroup_memory": 1, "VK_EXT_4444_formats": 1, "VK_EXT_calibrated_timestamps": 2, "VK_EXT_color_write_enable": 1, "VK_EXT_conditional_rendering": 2, "VK_EXT_depth_clamp_zero_one": 1, "VK_EXT_depth_clip_control": 1, "VK_EXT_depth_clip_enable": 1, "VK_EXT_display_control": 1, "VK_EXT_extended_dynamic_state": 1, "VK_EXT_extended_dynamic_state2": 1, "VK_EXT_external_memory_dma_buf": 1, "VK_EXT_external_memory_host": 1, "VK_EXT_host_query_reset": 1, "VK_EXT_image_2d_view_of_3d": 1, "VK_EXT_image_drm_format_modifier": 2, "VK_EXT_image_robustness": 1, "VK_EXT_image_view_min_lod": 1, "VK_EXT_index_type_uint8": 1, "VK_EXT_inline_uniform_block": 1, "VK_EXT_line_rasterization": 1, "VK_EXT_memory_budget": 1, "VK_EXT_multi_draw": 1, "VK_EXT_non_seamless_cube_map": 1, "VK_EXT_pci_bus_info": 2, "VK_EXT_physical_device_drm": 1, "VK_EXT_pipeline_creation_cache_control": 3, "VK_EXT_pipeline_creation_feedback": 1, "VK_EXT_primitive_topology_list_restart": 1, "VK_EXT_primitives_generated_query": 1, "VK_EXT_private_data": 1, "VK_EXT_provoking_vertex": 1, "VK_EXT_queue_family_foreign": 1, "VK_EXT_robustness2": 1, "VK_EXT_sample_locations": 1, "VK_EXT_scalar_block_layout": 1, "VK_EXT_separate_stencil_usage": 1, "VK_EXT_shader_atomic_float": 1, "VK_EXT_shader_demote_to_helper_invocation": 1, "VK_EXT_shader_module_identifier": 1, "VK_EXT_shader_subgroup_ballot": 1, "VK_EXT_shader_subgroup_vote": 1, "VK_EXT_shader_viewport_index_layer": 1, "VK_EXT_subgroup_size_control": 2, "VK_EXT_texel_buffer_alignment": 1, "VK_EXT_tooling_info": 1, "VK_EXT_transform_feedback": 1, "VK_EXT_vertex_attribute_divisor": 3, "VK_EXT_ycbcr_image_arrays": 1, "VK_GOOGLE_decorate_string": 1, "VK_GOOGLE_hlsl_functionality1": 1, "VK_GOOGLE_user_type": 1, "VK_NV_compute_shader_derivatives": 1, "VK_VALVE_mutable_descriptor_type": 1 }, "features": { "robustBufferAccess": true, "fullDrawIndexUint32": true, "imageCubeArray": true, "independentBlend": true, "geometryShader": true, "tessellationShader": true, "sampleRateShading": true, "dualSrcBlend": true, "logicOp": true, "multiDrawIndirect": true, "drawIndirectFirstInstance": true, "depthClamp": true, "depthBiasClamp": true, "fillModeNonSolid": true, "depthBounds": false, "wideLines": true, "largePoints": true, "alphaToOne": true, "multiViewport": true, "samplerAnisotropy": true, "textureCompressionETC2": false, "textureCompressionASTCLDR": false, "textureCompressionBC": true, "occlusionQueryPrecise": true, "pipelineStatisticsQuery": true, "vertexPipelineStoresAndAtomics": false, "fragmentStoresAndAtomics": true, "shaderTessellationAndGeometryPointSize": true, "shaderImageGatherExtended": true, "shaderStorageImageExtendedFormats": true, "shaderStorageImageMultisample": false, "shaderStorageImageReadWithoutFormat": false, "shaderStorageImageWriteWithoutFormat": true, "shaderUniformBufferArrayDynamicIndexing": true, "shaderSampledImageArrayDynamicIndexing": true, "shaderStorageBufferArrayDynamicIndexing": true, "shaderStorageImageArrayDynamicIndexing": true, "shaderClipDistance": true, "shaderCullDistance": true, "shaderFloat64": false, "shaderInt64": false, "shaderInt16": false, "shaderResourceResidency": false, "shaderResourceMinLod": false, "sparseBinding": false, "sparseResidencyBuffer": false, "sparseResidencyImage2D": false, "sparseResidencyImage3D": false, "sparseResidency2Samples": false, "sparseResidency4Samples": false, "sparseResidency8Samples": false, "sparseResidency16Samples": false, "sparseResidencyAliased": false, "variableMultisampleRate": true, "inheritedQueries": true }, "featureSamplerYcbcrConversion": true, "featureProtectedMemory": false, "queueFamilies": [ { "queueFlags": 7, "queueCount": 1, "timestampValidBits": 36, "minImageTransferGranularity": { "width": 1, "height": 1, "depth": 1 } } ] }, { "properties": { "apiVersion": "1.3.246", "driverVersion": "0.0.1", "vendorID": 65541, "deviceID": 0, "deviceType": 4, "deviceName": "llvmpipe (LLVM 16.0.6, 256 bits)", "pipelineCacheUUID": "32332e31-2e35-6161-6161-616161616161", "limits": { "maxImageDimension1D": 16384, "maxImageDimension2D": 16384, "maxImageDimension3D": 4096, "maxImageDimensionCube": 32768, "maxImageArrayLayers": 2048, "maxTexelBufferElements": 134217728, "maxUniformBufferRange": 65536, "maxStorageBufferRange": 134217728, "maxPushConstantsSize": 128, "maxMemoryAllocationCount": 4294967295, "maxSamplerAllocationCount": 32768, "bufferImageGranularity": 1, "sparseAddressSpaceSize": 0, "maxBoundDescriptorSets": 8, "maxPerStageDescriptorSamplers": 32, "maxPerStageDescriptorUniformBuffers": 15, "maxPerStageDescriptorStorageBuffers": 32, "maxPerStageDescriptorSampledImages": 128, "maxPerStageDescriptorStorageImages": 64, "maxPerStageDescriptorInputAttachments": 8, "maxPerStageResources": 128, "maxDescriptorSetSamplers": 32768, "maxDescriptorSetUniformBuffers": 256, "maxDescriptorSetUniformBuffersDynamic": 256, "maxDescriptorSetStorageBuffers": 256, "maxDescriptorSetStorageBuffersDynamic": 256, "maxDescriptorSetSampledImages": 256, "maxDescriptorSetStorageImages": 256, "maxDescriptorSetInputAttachments": 256, "maxVertexInputAttributes": 32, "maxVertexInputBindings": 32, "maxVertexInputAttributeOffset": 2047, "maxVertexInputBindingStride": 2048, "maxVertexOutputComponents": 128, "maxTessellationGenerationLevel": 64, "maxTessellationPatchSize": 32, "maxTessellationControlPerVertexInputComponents": 128, "maxTessellationControlPerVertexOutputComponents": 128, "maxTessellationControlPerPatchOutputComponents": 128, "maxTessellationControlTotalOutputComponents": 4096, "maxTessellationEvaluationInputComponents": 128, "maxTessellationEvaluationOutputComponents": 128, "maxGeometryShaderInvocations": 32, "maxGeometryInputComponents": 64, "maxGeometryOutputComponents": 128, "maxGeometryOutputVertices": 1024, "maxGeometryTotalOutputComponents": 1024, "maxFragmentInputComponents": 128, "maxFragmentOutputAttachments": 8, "maxFragmentDualSrcAttachments": 2, "maxFragmentCombinedOutputResources": 104, "maxComputeSharedMemorySize": 32768, "maxComputeWorkGroupCount": [ 65535, 65535, 65535 ], "maxComputeWorkGroupInvocations": 1024, "maxComputeWorkGroupSize": [ 1024, 1024, 1024 ], "subPixelPrecisionBits": 8, "subTexelPrecisionBits": 8, "mipmapPrecisionBits": 4, "maxDrawIndexedIndexValue": 4294967295, "maxDrawIndirectCount": 4294967295, "maxSamplerLodBias": 16, "maxSamplerAnisotropy": 16, "maxViewports": 16, "maxViewportDimensions": [ 16384, 16384 ], "viewportBoundsRange": [ -32768, 32768 ], "viewportSubPixelBits": 0, "minMemoryMapAlignment": 64, "minTexelBufferOffsetAlignment": 1, "minUniformBufferOffsetAlignment": 1, "minStorageBufferOffsetAlignment": 1, "minTexelOffset": -32, "maxTexelOffset": 31, "minTexelGatherOffset": -32, "maxTexelGatherOffset": 31, "minInterpolationOffset": -2, "maxInterpolationOffset": 2, "subPixelInterpolationOffsetBits": 8, "maxFramebufferWidth": 16384, "maxFramebufferHeight": 16384, "maxFramebufferLayers": 2048, "framebufferColorSampleCounts": 5, "framebufferDepthSampleCounts": 5, "framebufferStencilSampleCounts": 5, "framebufferNoAttachmentsSampleCounts": 5, "maxColorAttachments": 8, "sampledImageColorSampleCounts": 5, "sampledImageIntegerSampleCounts": 5, "sampledImageDepthSampleCounts": 5, "sampledImageStencilSampleCounts": 5, "storageImageSampleCounts": 5, "maxSampleMaskWords": 1, "timestampComputeAndGraphics": true, "timestampPeriod": 1, "maxClipDistances": 8, "maxCullDistances": 8, "maxCombinedClipAndCullDistances": 8, "discreteQueuePriorities": 2, "pointSizeRange": [ 0, 255 ], "lineWidthRange": [ 1, 255 ], "pointSizeGranularity": 0.125, "lineWidthGranularity": 0.0078125, "strictLines": true, "standardSampleLocations": true, "optimalBufferCopyOffsetAlignment": 1, "optimalBufferCopyRowPitchAlignment": 1, "nonCoherentAtomSize": 1 }, "sparseProperties": { "residencyStandard2DBlockShape": false, "residencyStandard2DMultisampleBlockShape": false, "residencyStandard3DBlockShape": false, "residencyAlignedMipSize": false, "residencyNonResidentStrict": false } }, "extensions": { "VK_KHR_8bit_storage": 1, "VK_KHR_16bit_storage": 1, "VK_KHR_bind_memory2": 1, "VK_KHR_buffer_device_address": 1, "VK_KHR_copy_commands2": 1, "VK_KHR_create_renderpass2": 1, "VK_KHR_dedicated_allocation": 3, "VK_KHR_depth_stencil_resolve": 1, "VK_KHR_descriptor_update_template": 1, "VK_KHR_device_group": 4, "VK_KHR_draw_indirect_count": 1, "VK_KHR_driver_properties": 1, "VK_KHR_dynamic_rendering": 1, "VK_KHR_external_fence": 1, "VK_KHR_external_memory": 1, "VK_KHR_external_memory_fd": 1, "VK_KHR_external_semaphore": 1, "VK_KHR_format_feature_flags2": 2, "VK_KHR_get_memory_requirements2": 1, "VK_KHR_image_format_list": 1, "VK_KHR_imageless_framebuffer": 1, "VK_KHR_incremental_present": 2, "VK_KHR_maintenance1": 2, "VK_KHR_maintenance2": 1, "VK_KHR_maintenance3": 1, "VK_KHR_maintenance4": 2, "VK_KHR_multiview": 1, "VK_KHR_pipeline_library": 1, "VK_KHR_push_descriptor": 2, "VK_KHR_relaxed_block_layout": 1, "VK_KHR_sampler_mirror_clamp_to_edge": 3, "VK_KHR_separate_depth_stencil_layouts": 1, "VK_KHR_shader_atomic_int64": 1, "VK_KHR_shader_clock": 1, "VK_KHR_shader_draw_parameters": 1, "VK_KHR_shader_float16_int8": 1, "VK_KHR_shader_float_controls": 4, "VK_KHR_shader_integer_dot_product": 1, "VK_KHR_shader_non_semantic_info": 1, "VK_KHR_shader_subgroup_extended_types": 1, "VK_KHR_shader_terminate_invocation": 1, "VK_KHR_spirv_1_4": 1, "VK_KHR_storage_buffer_storage_class": 1, "VK_KHR_swapchain": 70, "VK_KHR_swapchain_mutable_format": 1, "VK_KHR_synchronization2": 1, "VK_KHR_timeline_semaphore": 2, "VK_KHR_uniform_buffer_standard_layout": 1, "VK_KHR_variable_pointers": 1, "VK_KHR_vulkan_memory_model": 3, "VK_KHR_zero_initialize_workgroup_memory": 1, "VK_EXT_4444_formats": 1, "VK_EXT_attachment_feedback_loop_layout": 2, "VK_EXT_border_color_swizzle": 1, "VK_EXT_calibrated_timestamps": 2, "VK_EXT_color_write_enable": 1, "VK_EXT_conditional_rendering": 2, "VK_EXT_custom_border_color": 12, "VK_EXT_depth_clip_control": 1, "VK_EXT_depth_clip_enable": 1, "VK_EXT_depth_range_unrestricted": 1, "VK_EXT_extended_dynamic_state": 1, "VK_EXT_extended_dynamic_state2": 1, "VK_EXT_extended_dynamic_state3": 2, "VK_EXT_external_memory_host": 1, "VK_EXT_graphics_pipeline_library": 1, "VK_EXT_host_query_reset": 1, "VK_EXT_image_2d_view_of_3d": 1, "VK_EXT_image_robustness": 1, "VK_EXT_image_sliced_view_of_3d": 1, "VK_EXT_index_type_uint8": 1, "VK_EXT_inline_uniform_block": 1, "VK_EXT_line_rasterization": 1, "VK_EXT_multi_draw": 1, "VK_EXT_multisampled_render_to_single_sampled": 1, "VK_EXT_non_seamless_cube_map": 1, "VK_EXT_pipeline_creation_cache_control": 3, "VK_EXT_pipeline_creation_feedback": 1, "VK_EXT_post_depth_coverage": 1, "VK_EXT_primitive_topology_list_restart": 1, "VK_EXT_primitives_generated_query": 1, "VK_EXT_private_data": 1, "VK_EXT_provoking_vertex": 1, "VK_EXT_rasterization_order_attachment_access": 1, "VK_EXT_robustness2": 1, "VK_EXT_sampler_filter_minmax": 2, "VK_EXT_scalar_block_layout": 1, "VK_EXT_separate_stencil_usage": 1, "VK_EXT_shader_atomic_float": 1, "VK_EXT_shader_atomic_float2": 1, "VK_EXT_shader_demote_to_helper_invocation": 1, "VK_EXT_shader_object": 1, "VK_EXT_shader_stencil_export": 1, "VK_EXT_shader_subgroup_ballot": 1, "VK_EXT_shader_subgroup_vote": 1, "VK_EXT_shader_viewport_index_layer": 1, "VK_EXT_subgroup_size_control": 2, "VK_EXT_texel_buffer_alignment": 1, "VK_EXT_transform_feedback": 1, "VK_EXT_vertex_attribute_divisor": 3, "VK_EXT_vertex_input_dynamic_state": 2, "VK_ARM_rasterization_order_attachment_access": 1, "VK_GOOGLE_decorate_string": 1, "VK_GOOGLE_hlsl_functionality1": 1 }, "features": { "robustBufferAccess": true, "fullDrawIndexUint32": true, "imageCubeArray": true, "independentBlend": true, "geometryShader": true, "tessellationShader": true, "sampleRateShading": true, "dualSrcBlend": true, "logicOp": true, "multiDrawIndirect": true, "drawIndirectFirstInstance": true, "depthClamp": true, "depthBiasClamp": true, "fillModeNonSolid": true, "depthBounds": false, "wideLines": true, "largePoints": true, "alphaToOne": true, "multiViewport": true, "samplerAnisotropy": true, "textureCompressionETC2": false, "textureCompressionASTCLDR": false, "textureCompressionBC": true, "occlusionQueryPrecise": true, "pipelineStatisticsQuery": true, "vertexPipelineStoresAndAtomics": true, "fragmentStoresAndAtomics": true, "shaderTessellationAndGeometryPointSize": true, "shaderImageGatherExtended": true, "shaderStorageImageExtendedFormats": true, "shaderStorageImageMultisample": true, "shaderStorageImageReadWithoutFormat": false, "shaderStorageImageWriteWithoutFormat": true, "shaderUniformBufferArrayDynamicIndexing": true, "shaderSampledImageArrayDynamicIndexing": false, "shaderStorageBufferArrayDynamicIndexing": true, "shaderStorageImageArrayDynamicIndexing": false, "shaderClipDistance": true, "shaderCullDistance": true, "shaderFloat64": true, "shaderInt64": true, "shaderInt16": true, "shaderResourceResidency": false, "shaderResourceMinLod": false, "sparseBinding": false, "sparseResidencyBuffer": false, "sparseResidencyImage2D": false, "sparseResidencyImage3D": false, "sparseResidency2Samples": false, "sparseResidency4Samples": false, "sparseResidency8Samples": false, "sparseResidency16Samples": false, "sparseResidencyAliased": false, "variableMultisampleRate": false, "inheritedQueries": false }, "featureSamplerYcbcrConversion": false, "featureProtectedMemory": false, "queueFamilies": [ { "queueFlags": 7, "queueCount": 1, "timestampValidBits": 64, "minImageTransferGranularity": { "width": 1, "height": 1, "depth": 1 } } ] } ] }
Device Performance Information
Log Messages
[33452:33452:0813/065804.289763:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33452:33452:0813/065804.290193:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33452:33452:0813/065804.290412:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33452:33452:0813/065804.290601:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33452:33452:0813/065804.291591:ERROR:gpu_init.cc(525)] : Passthrough is not supported, GL is egl, ANGLE is
[33452:33452:0813/065804.391084:WARNING:sandbox_linux.cc(393)] : InitializeSandbox() called with multiple threads in process gpu-process.
GpuProcessHost: The GPU process exited with code 256.
[33813:33813:0813/065827.889662:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33813:33813:0813/065827.889931:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33813:33813:0813/065827.890060:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33813:33813:0813/065827.890173:ERROR:vaapi_wrapper.cc(968)] : vaQueryConfigEntrypoints failed, VA error: the requested VAProfile is not supported
[33813:33813:0813/065827.890556:ERROR:gpu_init.cc(525)] : Passthrough is not supported, GL is egl, ANGLE is
[33813:33813:0813/065827.953781:WARNING:sandbox_linux.cc(393)] : InitializeSandbox() called with multiple threads in process gpu-process.
[33813:33827:0813/065828.069732:ERROR:shared_image_manager.cc(312)] : SharedImageManager::ProduceRaster: Trying to Produce a Raster representation from a non-existent mailbox.
[33813:33813:0813/065828.070347:ERROR:shared_image_manager.cc(197)] : SharedImageManager::ProduceSkia: Trying to Produce a Skia representation from a non-existent mailbox.
[33813:33813:0813/065828.125302:ERROR:shared_image_manager.cc(197)] : SharedImageManager::ProduceSkia: Trying to Produce a Skia representation from a non-existent mailbox.
[33813:33827:0813/065828.183962:ERROR:shared_image_manager.cc(312)] : SharedImageManager::ProduceRaster: Trying to Produce a Raster representation from a non-existent mailbox.
[33813:33827:0813/065828.200653:ERROR:shared_image_manager.cc(312)] : SharedImageManager::ProduceRaster: Trying to Produce a Raster representation from a non-existent mailbox.

@konradmb
Copy link

@oksakhartman It has never worked for me on unpatched Chromium, especially on Wayland.

@konradmb
Copy link

konradmb commented Aug 13, 2023

Let me play with toys then.

  • That table is either telling something else than what you imply or is providing false info, because on v111 it's empty and I get acceleration. On v115 it says h264 decode and it's not true.
  • I've just tried your flag on xorg, unpatched Chromium. Table says decode h264, intel_gpu_top says no acceleration.

@gz83
Copy link
Collaborator

gz83 commented Aug 14, 2023

@konradmb @oksakhartman @ariankordi @Cir-0 @kreaninw

Try passing only the following startup parameters

--enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL

If there are corresponding function switches in chrome://flags, they can also be turned on.

If no other hardware acceleration patches are added, the hardware acceleration of the current Linux version should only support VAAPI, and it is best to ensure that the graphics card driver is working properly and is up to date.

Please note that passing the above two startup parameters on the Linux platform may not necessarily enable hardware acceleration, and a soft solution is required for final guarantee.

@Alex313031
Copy link
Owner

Alex313031 commented Aug 14, 2023

@konradmb @kreaninw @ariankordi This is actually expected. I removed the wayland vaapi patch, as it was causing too many bugs. Chromium doesn't have HW video decode acceleration on wayland at all upstream.

Im sorry.

If someone can find an up to date/working patch, then I can add it. The one I was using was from arch linux and was very outdated, not to mention that it changed files that are already changed by the vaapi and vdpau patches.

@gz83
The only patches now are straight from Ubuntu. A patch for older i965 drivers for VA-API, and VDPAU patch for Nvidia cards (only works when libvdpau-va-gl1 is installed).

These patches are:
https://github.com/saiarcot895/chromium-ubuntu-build/blob/master/debian/patches/ihd-support.patch
and
https://github.com/saiarcot895/chromium-ubuntu-build/blob/master/debian/patches/vdpau-support.patch

@richardm1
Copy link

--enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL
yields:
"VaapiVideoDecoder: failed Initialize()ing the frame pool"

This is with Wayland/Polaris10. The good news is at least it's trying now:
image

@Alex313031
Copy link
Owner

@oksakhartman The i965 patch shouldn't interfere with VAAPI for other things, but that doesn't mean it doesn't.

The reason I use those two patches is because Ungoogled Chromium, Debian, and Ubuntu use them and has been well tested. Since Mesa 21, the i965 driver is used for 3rd Gen intel and below, which still makes up a significant portion of users.

@vampywiz17
Copy link

I use vanilla chrome with only this --enable-features=VaapiVideoDecodeLinuxGL

But i affect this bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1467689

thorium fix it ?

@feakuru
Copy link

feakuru commented Oct 18, 2023

same here on Ubuntu 23.04 google-chrome-stable after a switch to Wayland (in flags, #ignore-gpu-blocklist is set to Enabled, #ozone-platform-hint set to Wayland).

GPU report ``` Graphics Feature Status ======================= * Canvas: Software only, hardware acceleration unavailable * Canvas out-of-process rasterization: Disabled * Direct Rendering Display Compositor: Disabled * Compositing: Software only. Hardware acceleration disabled * Multiple Raster Threads: Enabled * OpenGL: Disabled * Rasterization: Software only. Hardware acceleration disabled * Raw Draw: Disabled * Skia Graphite: Disabled * Video Decode: Software only. Hardware acceleration disabled * Video Encode: Software only. Hardware acceleration disabled * Vulkan: Disabled * WebGL: Software only, hardware acceleration unavailable * WebGL2: Software only, hardware acceleration unavailable * WebGPU: Disabled

Problems Detected

  • WebGPU has been disabled via blocklist or the command line.
    Disabled Features: webgpu

  • Accelerated video encode has been disabled, either via blocklist, about:flags or the command line.
    Disabled Features: video_encode

  • Gpu compositing has been disabled, either via blocklist, about:flags or the command line. The browser will fall back to software compositing and hardware acceleration will be unavailable.
    Disabled Features: gpu_compositing

ANGLE Features

  • allowCompressedFormats (Frontend workarounds): Enabled
    condition: true
    Allow compressed formats

  • cacheCompiledShader (Frontend features) (http://anglebug.com/7036): Enabled
    condition: true
    Enable to cache compiled shaders

  • disableAnisotropicFiltering (Frontend workarounds): Disabled
    Disable support for anisotropic filtering

  • disableDrawBuffersIndexed (Frontend features) (http://anglebug.com/7724): Disabled
    Disable support for OES_draw_buffers_indexed and EXT_draw_buffers_indexed

  • disableProgramBinary (Frontend features) (http://anglebug.com/5007): Disabled
    Disable support for GL_OES_get_program_binary

  • disableProgramCaching (Frontend features) (http://anglebug.com/1423136): Disabled
    Disables saving programs to the cache

  • disableProgramCachingForTransformFeedback (Frontend workarounds): Disabled
    On some GPUs, program binaries don't contain transform feedback varyings

  • dumpShaderSource (Frontend features) (http://anglebug.com/7760): Disabled
    Write shader source to temp directory

  • dumpTranslatedShaders (Frontend features) (http://anglebug.com/8280): Disabled
    Write translated shaders to temp directory

  • emulatePixelLocalStorage (Frontend features) (http://anglebug.com/7279): Enabled
    condition: true
    Emulate ANGLE_shader_pixel_local_storage using shader images

  • enableCaptureLimits (Frontend features) (http://anglebug.com/5750): Disabled
    Set the context limits like frame capturing was enabled

  • enableProgramBinaryForCapture (Frontend features) (http://anglebug.com/5658): Disabled
    Even if FrameCapture is enabled, enable GL_OES_get_program_binary

  • enableShaderSubstitution (Frontend workarounds) (http://anglebug.com/7761): Disabled
    Check the filesystem for shaders to use instead of those provided through
    glShaderSource

  • enableTranslatedShaderSubstitution (Frontend workarounds) (http://anglebug.com/8280): Disabled
    Check the filesystem for translated shaders to use instead of the shader
    translator's

  • forceDepthAttachmentInitOnClear (Frontend workarounds) (https://anglebug.com/7246): Disabled
    Force depth attachment initialization on clear ops

  • forceGlErrorChecking (Frontend features) (https://issuetracker.google.com/220069903): Disabled
    condition: (IsAndroid() && isSwiftShader)
    Force GL error checking (i.e. prevent applications from disabling error
    checking

  • forceInitShaderVariables (Frontend features): Disabled
    Force-enable shader variable initialization

  • forceRobustResourceInit (Frontend features) (http://anglebug.com/6041): Disabled
    Force-enable robust resource init

  • loseContextOnOutOfMemory (Frontend workarounds): Enabled
    condition: true
    Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error
    occurs

  • singleThreadedTextureDecompression (Frontend workarounds): Disabled
    Disables multi-threaded decompression of compressed texture formats

  • allocateNonZeroMemory (Vulkan features) (http://anglebug.com/4384): Disabled
    condition: false
    Fill new allocations with non-zero values to flush out errors.

  • allowGenerateMipmapWithCompute (Vulkan features) (http://anglebug.com/4551): Disabled
    condition: supportsSubgroupQuadOpsInComputeShader && mSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes && maxComputeWorkGroupInvocations >= 256 && ((isAMD && !IsWindows()) || isNvidia || isSamsung)
    Use the compute path to generate mipmaps on devices that meet the minimum
    requirements, and the performance is better.

  • allowMultisampledRenderToTextureEmulation (Vulkan workarounds) (http://anglebug.com/8291): Disabled
    condition: isTileBasedRenderer || isSamsung
    Allow emulation of EXT_multisampled_render_to_texture

  • appendAliasedMemoryDecorations (Vulkan workarounds) (b/266235549): Enabled
    condition: true
    Append aliased memory decoration to ssbo and image in SpirV if they are
    not declared with restrict memory qualifier in GLSL

  • asyncCommandBufferReset (Vulkan features) (https://issuetracker.google.com/255411748): Enabled
    condition: true
    Reset command buffer in async thread.

  • asyncCommandQueue (Vulkan features) (http://anglebug.com/4324): Disabled
    condition: false
    Use CommandQueue worker thread to dispatch work to GPU.

  • bottomLeftOriginPresentRegionRectangles (Vulkan workarounds): Disabled
    condition: IsAndroid()
    On some platforms present region rectangles are expected to have a
    bottom-left origin, instead of top-left origin as from spec

  • bresenhamLineRasterization (Vulkan features): Enabled
    condition: mLineRasterizationFeatures.bresenhamLines == 1U
    Enable Bresenham line rasterization via VK_EXT_line_rasterization
    extension

  • clampFragDepth (Vulkan workarounds) (http://anglebug.com/3970): Disabled
    condition: isNvidia && !mFeatures.supportsDepthClampZeroOne.enabled
    gl_FragDepth is not clamped when rendering to a floating point depth
    buffer without VK_EXT_depth_clamp_zero_one

  • clampPointSize (Vulkan workarounds) (http://anglebug.com/2970): Disabled
    condition: isNvidia && nvidiaVersion.major < uint32_t(IsWindows() ? 430 : 421)
    The point size range reported from the API is inconsistent with the actual
    behavior

  • compressVertexData (Vulkan workarounds): Disabled
    Compress vertex data to smaller data types when possible. Using this
    feature makes ANGLE non-conformant.

  • deferFlushUntilEndRenderPass (Vulkan workarounds) (https://issuetracker.google.com/issues/166475273): Enabled
    condition: !isQualcommProprietary
    Allow glFlush to be deferred until renderpass ends

  • disableFlippingBlitWithCommand (Vulkan workarounds) (http://anglebug.com/3498): Disabled
    condition: IsAndroid() && isQualcommProprietary
    vkCmdBlitImage with flipped coordinates blits incorrectly.

  • disallowMixedDepthStencilLoadOpNoneAndLoad (Vulkan workarounds) (http://anglebug.com/7370): Disabled
    condition: isARM && armDriverVersion < ARMDriverVersion(38, 1, 0)
    Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects
    of a depth/stencil attachment

  • doubleDepthBiasConstantFactor (Vulkan workarounds): Disabled
    condition: isIntel && !IsWindows()
    Due to a Vulkan spec ambiguity, some drivers interpret
    depthBiasConstantFactor as half the expected value

  • eglColorspaceAttributePassthrough (Vulkan features) (https://anglebug.com/7319): Disabled
    condition: IsAndroid() && isSamsung
    Support passthrough of EGL colorspace attribute values

  • emulateAdvancedBlendEquations (Vulkan features) (http://anglebug.com/3586): Disabled
    condition: !mFeatures.supportsBlendOperationAdvanced.enabled && (isVenus || !isIntel)
    Emulate GL_KHR_blend_equation_advanced

  • emulateDithering (Vulkan features) (http://anglebug.com/6755): Disabled
    condition: IsAndroid() && !mFeatures.supportsLegacyDithering.enabled
    Emulate OpenGL dithering

  • emulateR32fImageAtomicExchange (Vulkan workarounds) (http://anglebug.com/5535): Enabled
    condition: true
    Emulate r32f images with r32ui to support imageAtomicExchange.

  • emulateTransformFeedback (Vulkan features) (http://anglebug.com/3205): Enabled
    condition: (!mFeatures.supportsTransformFeedbackExtension.enabled && mPhysicalDeviceFeatures.vertexPipelineStoresAndAtomics == 1U)
    Emulate transform feedback as the VK_EXT_transform_feedback is not
    present.

  • emulatedPrerotation180 (Vulkan features) (http://anglebug.com/4901): Disabled
    Emulate 180-degree prerotation.

  • emulatedPrerotation270 (Vulkan features) (http://anglebug.com/4901): Disabled
    Emulate 270-degree prerotation.

  • emulatedPrerotation90 (Vulkan features) (http://anglebug.com/4901): Disabled
    Emulate 90-degree prerotation.

  • enableAsyncPipelineCacheCompression (Vulkan workarounds) (http://anglebug.com/4722): Enabled
    condition: true
    Enable compressing pipeline cache in a thread.

  • enableMultisampledRenderToTexture (Vulkan workarounds) (http://anglebug.com/4937): Disabled
    condition: mFeatures.supportsMultisampledRenderToSingleSampled.enabled || mFeatures.supportsMultisampledRenderToSingleSampledGOOGLEX.enabled || (supportsIndependentDepthStencilResolve && mFeatures.allowMultisampledRenderToTextureEmulation.enabled)
    Expose EXT_multisampled_render_to_texture

  • enableParallelCompileAndLink (Vulkan features) (http://anglebug.com/8297): Disabled
    Expose the GL_KHR_parallel_shader_compile extension

  • enablePipelineCacheDataCompression (Vulkan features) (https://issuetracker.google.com/258207403): Enabled
    condition: true
    enable pipeline cache data compression.

  • enablePortabilityEnumeration (Vulkan workarounds) (http://anglebug.com/8229): Disabled
    condition: mFeatures.supportsPortabilityEnumeration.enabled && IsApple()
    Enable use of VK_KHR_portability_enumeration extension

  • enablePreRotateSurfaces (Vulkan features) (http://anglebug.com/3502): Disabled
    condition: IsAndroid() && supportsNegativeViewport
    Enable Android pre-rotation for landscape applications

  • enablePrecisionQualifiers (Vulkan features) (http://anglebug.com/3078): Enabled
    condition: !(IsPixel2(mPhysicalDeviceProperties.vendorID, mPhysicalDeviceProperties.deviceID) && (mPhysicalDeviceProperties.driverVersion < kPixel2DriverWithRelaxedPrecision)) && !IsPixel4(mPhysicalDeviceProperties.vendorID, mPhysicalDeviceProperties.deviceID)
    Enable precision qualifiers in shaders

  • explicitlyCastMediumpFloatTo16Bit (Vulkan workarounds) (https://issuetracker.google.com/274859104): Disabled
    condition: isARM && !isVenus
    Explicitly cast mediump floating point values to 16 bit

  • explicitlyEnablePerSampleShading (Vulkan workarounds) (http://anglebug.com/6876): Disabled
    condition: isARM
    Explicitly enable per-sample shading if the fragment shader contains the
    sample qualifier

  • exposeNonConformantExtensionsAndVersions (Vulkan workarounds) (http://anglebug.com/5375): Disabled
    condition: kExposeNonConformantExtensionsAndVersions && !isVenus
    Expose GLES versions and extensions that are not conformant.

  • forceContinuousRefreshOnSharedPresent (Vulkan features) (https://issuetracker.google.com/229267970): Disabled
    condition: false
    Force to create vulkan swapchain with continuous refresh on shared present

  • forceD16TexFilter (Vulkan workarounds) (http://anglebug.com/3452): Disabled
    condition: IsAndroid() && isQualcommProprietary
    VK_FORMAT_D16_UNORM does not support
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, which prevents
    OES_depth_texture from being supported.

  • forceDisableFullScreenExclusive (Vulkan workarounds) (http://anglebug.com/8215): Disabled
    Device needs VK_EXT_full_screen_exclusive explicitly disabled

  • forceFallbackFormat (Vulkan workarounds): Disabled
    Force a fallback format for angle_end2end_tests

  • forceFragmentShaderPrecisionHighpToMediump (Vulkan workarounds) (https://issuetracker.google.com/184850002): Disabled
    condition: false
    Forces highp precision in fragment shader to mediump.

  • forceMaxUniformBufferSize16KB (Vulkan workarounds) (https://issuetracker.google.com/161903006): Disabled
    condition: isQualcommProprietary && isAdreno540
    Force max uniform buffer size to 16K on some device due to bug

  • forceNearestFiltering (Vulkan workarounds): Disabled
    Force nearest filtering when sampling.

  • forceNearestMipFiltering (Vulkan workarounds): Disabled
    Force nearest mip filtering when sampling.

  • forceSubmitImmutableTextureUpdates (Vulkan app workarounds) (http://anglebug.com/6929): Disabled
    Force submit updates to immutable textures

  • forceTextureLodOffset1 (Vulkan workarounds): Disabled
    Increase the minimum texture level-of-detail by 1 when sampling.

  • forceTextureLodOffset2 (Vulkan workarounds): Disabled
    Increase the minimum texture level-of-detail by 2 when sampling.

  • forceTextureLodOffset3 (Vulkan workarounds): Disabled
    Increase the minimum texture level-of-detail by 3 when sampling.

  • forceTextureLodOffset4 (Vulkan workarounds): Disabled
    Increase the minimum texture level-of-detail by 4 when sampling.

  • forceWaitForSubmissionToCompleteForQueryResult (Vulkan workarounds) (https://issuetracker.google.com/253522366): Disabled
    condition: isARM || (isNvidia && nvidiaVersion.major < 470u)
    Force wait for submission to complete before calling getQueryResult(wait).

  • hasEffectivePipelineCacheSerialization (Vulkan features) (https://anglebug.com/7369): Disabled
    condition: !isSwiftShader && !nvVersionLessThan520
    Whether the implementation serializes the Vulkan pipeline cache
    effectively. On some implementations, pipeline cache serialization returns
    no data, so there is no benefit to serializing it

  • limitSampleCountTo2 (Vulkan workarounds) (http://anglebug.com/8162): Disabled
    Limit sample count to 2 to save memory on low end devices.

  • logMemoryReportCallbacks (Vulkan features): Disabled
    condition: false
    Log each callback from VK_EXT_device_memory_report

  • logMemoryReportStats (Vulkan features): Disabled
    condition: false
    Log stats from VK_EXT_device_memory_report each swap

  • mapUnspecifiedColorSpaceToPassThrough (Vulkan features): Disabled
    condition: isVenus
    Use VK_COLOR_SPACE_PASS_THROUGH_EXT for EGL_NONE or unspecifed color
    spaces

  • mergeProgramPipelineCachesToGlobalCache (Vulkan workarounds) (https://anglebug.com/7369): Enabled
    condition: !mFeatures.supportsGraphicsPipelineLibrary.enabled || (mFeatures.preferMonolithicPipelinesOverLibraries.enabled && libraryBlobsAreReusedByMonolithicPipelines)
    Whether it's beneficial to merge the pipeline cache for the shaders subset
    of the pipeline into the monolithic pipeline cache. Only useful on
    platforms where monolithic pipelines can reuse blobs from partial
    pipelines

  • mutableMipmapTextureUpload (Vulkan features) (https://anglebug.com/7308): Enabled
    condition: canPreferDeviceLocalMemoryHostVisible(mPhysicalDeviceProperties.deviceType)
    Enable uploading the previously defined mutable mipmap texture.

  • overrideSurfaceFormatRGB8ToRGBA8 (Vulkan workarounds) (http://anglebug.com/6651): Enabled
    condition: true
    Override surface format GL_RGB8 to GL_RGBA8

  • padBuffersToMaxVertexAttribStride (Vulkan workarounds) (http://anglebug.com/4428): Disabled
    condition: isAMD || isSamsung
    Vulkan considers vertex attribute accesses to count up to the last
    multiple of the stride. This additional access supports AMD's robust
    buffer access implementation. AMDVLK in particular will return incorrect
    values when the vertex access extends into the range that would be the
    stride padding and the buffer is too small. This workaround limits
    GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and pads up every buffer
    allocation size to be a multiple of the maximum stride.

  • perFrameWindowSizeQuery (Vulkan workarounds) (http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625): Disabled
    condition: IsAndroid() || isIntel || (IsWindows() && isAMD) || IsFuchsia() || isSamsung || displayVk->isWayland()
    Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window
    resizing

  • permanentlySwitchToFramebufferFetchMode (Vulkan features): Disabled
    condition: isTileBasedRenderer
    Whether the context should permanently switch to framebuffer fetch mode on
    first encounter

  • persistentlyMappedBuffers (Vulkan features) (http://anglebug.com/2162): Enabled
    condition: true
    Persistently map buffer memory to reduce map/unmap IOCTL overhead.

  • preferAggregateBarrierCalls (Vulkan workarounds) (http://anglebug.com/4633): Enabled
    condition: isImmediateModeRenderer
    Single barrier call is preferred over multiple calls with fine grained
    pipeline stage dependency information

  • preferCPUForBufferSubData (Vulkan features) (http://issuetracker.google.com/200067929): Disabled
    condition: isMaliJobManagerBasedGPU
    Prefer use CPU to do bufferSubData instead of staged update.

  • preferDeviceLocalMemoryHostVisible (Vulkan features) (http://anglebug.com/7047): Enabled
    condition: canPreferDeviceLocalMemoryHostVisible(mPhysicalDeviceProperties.deviceType)
    Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking
    memory types

  • preferDrawClearOverVkCmdClearAttachments (Vulkan workarounds) (https://issuetracker.google.com/166809097): Disabled
    condition: isQualcommProprietary
    On some hardware, clear using a draw call instead of vkCmdClearAttachments
    in the middle of render pass due to bugs

  • preferDriverUniformOverSpecConst (Vulkan features) (http://anglebug.com/7406): Enabled
    condition: (isQualcommProprietary && mPhysicalDeviceProperties.driverVersion < kPixel4DriverWithWorkingSpecConstSupport) || isARM || isPowerVR || isSwiftShader
    Prefer using driver uniforms instead of specialization constants.

  • preferLinearFilterForYUV (Vulkan features) (https://anglebug.com/7382): Disabled
    condition: isVenus
    Prefer to use VK_FILTER_LINEAR for VkSamplerYcbcrConversion

  • preferMonolithicPipelinesOverLibraries (Vulkan workarounds) (https://anglebug.com/7369): Enabled
    condition: !mGraphicsPipelineLibraryProperties.graphicsPipelineLibraryFastLinking || isSwiftShader
    Whether monolithic pipelines perform significantly better than libraries

  • preferSkippingInvalidateForEmulatedFormats (Vulkan workarounds) (http://anglebug.com/6860): Enabled
    condition: isImmediateModeRenderer
    Skipping invalidate is preferred for emulated formats that have extra
    channels over re-clearing the image

  • preferSubmitAtFBOBoundary (Vulkan workarounds) (https://issuetracker.google.com/187425444): Enabled
    condition: (isARM || isSwiftShader) && !isVenus
    Submit commands to driver at each FBO boundary for performance
    improvements.

  • preferSubmitOnAnySamplesPassedQueryEnd (Vulkan workarounds) (https://issuetracker.google.com/250706693): Disabled
    condition: isTileBasedRenderer
    Submit commands to driver when last GL_ANY_SAMPLES_PASSED query is made
    for performance improvements.

  • provokingVertex (Vulkan features): Enabled
    condition: mProvokingVertexFeatures.provokingVertexLast == 1U
    Enable provoking vertex mode via VK_EXT_provoking_vertex extension

  • retainSPIRVDebugInfo (Vulkan features) (http://anglebug.com/5901): Disabled
    condition: getEnableValidationLayers()
    Retain debug info in SPIR-V blob.

  • roundOutputAfterDithering (Vulkan workarounds) (http://anglebug.com/6953): Disabled
    condition: isQualcomm
    Round output after dithering to workaround a driver bug that rounds the
    output up

  • slowAsyncCommandQueueForTesting (Vulkan workarounds) (https://anglebug.com/6574): Disabled
    Artificially slow down async command queue for threading testing

  • slowDownMonolithicPipelineCreationForTesting (Vulkan workarounds) (https://anglebug.com/7369): Disabled
    Artificially slow down async monolithic pipeline creation for threading
    testing

  • supportsAndroidHardwareBuffer (Vulkan features): Disabled
    VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer
    extension

  • supportsAndroidNativeFenceSync (Vulkan features) (http://anglebug.com/2517): Disabled
    condition: (mFeatures.supportsExternalFenceFd.enabled && FencePropertiesCompatibleWithAndroid(externalFenceProperties) && mFeatures.supportsExternalSemaphoreFd.enabled && SemaphorePropertiesCompatibleWithAndroid(externalSemaphoreProperties))
    VkDevice supports the EGL_ANDROID_native_fence_sync extension

  • supportsBindMemory2 (Vulkan features) (https://anglebug.com/4966): Enabled
    condition: isVulkan11Device() || ExtensionFound("VK_KHR_bind_memory2", deviceExtensionNames)
    VkDevice supports the VK_KHR_bind_memory2 extension

  • supportsBlendOperationAdvanced (Vulkan features) (http://anglebug.com/3586): Enabled
    condition: ExtensionFound("VK_EXT_blend_operation_advanced", deviceExtensionNames)
    VkDevice supports VK_EXT_blend_operation_advanced extension.

  • supportsColorWriteEnable (Vulkan features) (https://anglebug.com/7161): Disabled
    VkDevice supports VK_EXT_color_write_enable extension

  • supportsComputeTranscodeEtcToBc (Vulkan features): Disabled
    condition: !mPhysicalDeviceFeatures.textureCompressionETC2 && kSupportTranscodeEtcToBc && (mSubgroupProperties.supportedOperations & kRequiredSubgroupOp) == kRequiredSubgroupOp && (limitsVk.maxTexelBufferElements >= kMaxTexelBufferSize)
    supports compute shader transcode etc format to bc format

  • supportsCustomBorderColor (Vulkan features) (http://anglebug.com/3577): Enabled
    condition: mCustomBorderColorFeatures.customBorderColors == 1U && mCustomBorderColorFeatures.customBorderColorWithoutFormat == 1U
    VkDevice supports the VK_EXT_custom_border_color extension

  • supportsDepthClampZeroOne (Vulkan features) (http://anglebug.com/3970): Disabled
    condition: mDepthClampZeroOneFeatures.depthClampZeroOne == 1U
    VkDevice supports the VK_EXT_depth_clamp_zero_one extension

  • supportsDepthClipControl (Vulkan features) (http://anglebug.com/5421): Enabled
    condition: mDepthClipControlFeatures.depthClipControl == 1U
    VkDevice supports VK_EXT_depth_clip_control extension.

  • supportsDepthClipEnable (Vulkan features) (http://anglebug.com/3970): Enabled
    condition: mDepthClipEnableFeatures.depthClipEnable == 1U
    VkDevice supports the VK_EXT_depth_clip_enable extension.

  • supportsDepthStencilResolve (Vulkan features) (http://anglebug.com/4836): Enabled
    condition: mFeatures.supportsRenderpass2.enabled && mDepthStencilResolveProperties.supportedDepthResolveModes != 0
    VkDevice supports the VK_KHR_depth_stencil_resolve extension with the
    independentResolveNone feature

  • supportsExtendedDynamicState (Vulkan features) (http://anglebug.com/5906): Enabled
    condition: mExtendedDynamicStateFeatures.extendedDynamicState == 1U && dynamicStateWorks
    VkDevice supports VK_EXT_extended_dynamic_state extension

  • supportsExtendedDynamicState2 (Vulkan features) (http://anglebug.com/5906): Disabled
    condition: mExtendedDynamicState2Features.extendedDynamicState2 == 1U && dynamicStateWorks
    VkDevice supports VK_EXT_extended_dynamic_state2 extension

  • supportsExternalFenceCapabilities (Vulkan features): Enabled
    condition: isVulkan11Instance() || ExtensionFound("VK_KHR_external_fence_capabilities", instanceExtensionNames)
    VkInstance supports the VK_KHR_external_fence_capabilities extension

  • supportsExternalFenceFd (Vulkan features) (http://anglebug.com/2517): Disabled
    condition: ExtensionFound("VK_KHR_external_fence_fd", deviceExtensionNames)
    VkDevice supports the VK_KHR_external_fence_fd extension

  • supportsExternalMemoryDmaBufAndModifiers (Vulkan features) (http://anglebug.com/6248): Disabled
    condition: ExtensionFound("VK_EXT_external_memory_dma_buf", deviceExtensionNames) && ExtensionFound("VK_EXT_image_drm_format_modifier", deviceExtensionNames)
    VkDevice supports the VK_EXT_external_memory_dma_buf and
    VK_EXT_image_drm_format_modifier extensions

  • supportsExternalMemoryFd (Vulkan features): Enabled
    condition: ExtensionFound("VK_KHR_external_memory_fd", deviceExtensionNames)
    VkDevice supports the VK_KHR_external_memory_fd extension

  • supportsExternalMemoryFuchsia (Vulkan features): Disabled
    condition: ExtensionFound("VK_FUCHSIA_external_memory", deviceExtensionNames)
    VkDevice supports the VK_FUCHSIA_external_memory extension

  • supportsExternalMemoryHost (Vulkan features): Disabled
    VkDevice supports the VK_EXT_external_memory_host extension

  • supportsExternalSemaphoreCapabilities (Vulkan features): Enabled
    condition: isVulkan11Instance() || ExtensionFound("VK_KHR_external_semaphore_capabilities", instanceExtensionNames)
    VkInstance supports the VK_KHR_external_semaphore_capabilities extension

  • supportsExternalSemaphoreFd (Vulkan features): Enabled
    condition: ExtensionFound("VK_KHR_external_semaphore_fd", deviceExtensionNames)
    VkDevice supports the VK_KHR_external_semaphore_fd extension

  • supportsExternalSemaphoreFuchsia (Vulkan features): Disabled
    condition: ExtensionFound("VK_FUCHSIA_external_semaphore", deviceExtensionNames)
    VkDevice supports the VK_FUCHSIA_external_semaphore extension

  • supportsFilteringPrecision (Vulkan features): Enabled
    condition: ExtensionFound("VK_GOOGLE_sampler_filtering_precision", deviceExtensionNames)
    VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension

  • supportsFragmentShaderPixelInterlock (Vulkan features): Disabled
    condition: mFragmentShaderInterlockFeatures.fragmentShaderPixelInterlock == 1U
    VkDevice supports the VK_EXT_fragment_shader_interlock extension and has
    the fragmentShaderPixelInterlock feature

  • supportsFragmentShadingRate (Vulkan features) (http://anglebug.com/7172): Disabled
    condition: canSupportFragmentShadingRate(deviceExtensionNames)
    VkDevice supports VK_KHR_fragment_shading_rate extension

  • supportsFullScreenExclusive (Vulkan features) (http://anglebug.com/8215): Disabled
    VkDevice supports the VK_EXT_full_screen_exclusive extension

  • supportsGGPFrameToken (Vulkan features): Disabled
    VkDevice supports the VK_GGP_frame_token extension

  • supportsGeometryStreamsCapability (Vulkan features) (http://anglebug.com/3206): Disabled
    condition: mFeatures.supportsTransformFeedbackExtension.enabled && mTransformFeedbackFeatures.geometryStreams == 1U
    Implementation supports the GeometryStreams SPIR-V capability.

  • supportsGetMemoryRequirements2 (Vulkan features) (https://anglebug.com/4830): Enabled
    condition: isVulkan11Device() || ExtensionFound("VK_KHR_get_memory_requirements2", deviceExtensionNames)
    VkDevice supports the VK_KHR_get_memory_requirements2 extension

  • supportsGraphicsPipelineLibrary (Vulkan features) (https://anglebug.com/7369): Enabled
    condition: mGraphicsPipelineLibraryFeatures.graphicsPipelineLibrary == 1U && (!isNvidia || nvidiaVersion.major >= 531)
    VkDevice supports the VK_EXT_graphics_pipeline_library extension

  • supportsHostQueryReset (Vulkan features) (http://anglebug.com/6692): Enabled
    condition: mHostQueryResetFeatures.hostQueryReset == 1U
    VkDevice supports VK_EXT_host_query_reset extension

  • supportsImage2dViewOf3d (Vulkan features) (https://anglebug.com/7320): Disabled
    condition: mImage2dViewOf3dFeatures.image2DViewOf3D == 1U
    VkDevice supports VK_EXT_image_2d_view_of_3d

  • supportsImageCubeArray (Vulkan features) (http://anglebug.com/3584): Enabled
    condition: mPhysicalDeviceFeatures.imageCubeArray == 1U
    VkDevice supports the imageCubeArray feature properly

  • supportsImageFormatList (Vulkan features) (http://anglebug.com/5281): Enabled
    condition: ExtensionFound("VK_KHR_image_format_list", deviceExtensionNames)
    Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs that support
    VK_KHR_image_format_list

  • supportsImagelessFramebuffer (Vulkan features) (http://anglebug.com/7553): Enabled
    condition: mImagelessFramebufferFeatures.imagelessFramebuffer == 1U && (vk::RenderPassCommandBuffer::ExecutesInline() || !isSamsung)
    VkDevice supports VK_KHR_imageless_framebuffer extension

  • supportsIncrementalPresent (Vulkan features): Disabled
    condition: ExtensionFound("VK_KHR_incremental_present", deviceExtensionNames)
    VkDevice supports the VK_KHR_incremental_present extension

  • supportsIndexTypeUint8 (Vulkan features) (http://anglebug.com/4405): Disabled
    condition: mIndexTypeUint8Features.indexTypeUint8 == 1U
    VkDevice supports the VK_EXT_index_type_uint8 extension

  • supportsLegacyDithering (Vulkan features) (https://issuetracker.google.com/284462263): Disabled
    condition: mDitheringFeatures.legacyDithering == 1U && !isARM
    VkDevice supports the VK_EXT_legacy_dithering extension

  • supportsLockSurfaceExtension (Vulkan features): Disabled
    condition: IsAndroid()
    Surface supports the EGL_KHR_lock_surface3 extension

  • supportsLogicOpDynamicState (Vulkan features) (http://anglebug.com/3862): Disabled
    condition: mFeatures.supportsExtendedDynamicState2.enabled && mExtendedDynamicState2Features.extendedDynamicState2LogicOp == 1U && !(IsLinux() && isIntel && isMesaLessThan22_2) && !(IsAndroid() && isGalaxyS23)
    VkDevice supports the logicOp feature of VK_EXT_extended_dynamic_state2
    extension

  • supportsMemoryBudget (Vulkan features): Disabled
    condition: ExtensionFound("VK_EXT_memory_budget", deviceExtensionNames)
    VkDevice supports the VK_EXT_memory_budget extension.

  • supportsMixedReadWriteDepthStencilLayouts (Vulkan features) (https://anglebug.com/7899): Enabled
    condition: isVulkan11Device()
    VkDevice supports the mixed read and write depth/stencil layouts
    introduced by VK_KHR_maintenance2

  • supportsMultiDrawIndirect (Vulkan features) (http://anglebug.com/6439): Enabled
    condition: mPhysicalDeviceFeatures.multiDrawIndirect == 1U
    VkDevice supports the multiDrawIndirect extension

  • supportsMultisampledRenderToSingleSampled (Vulkan features) (http://anglebug.com/4836): Disabled
    condition: mFeatures.supportsRenderpass2.enabled && mFeatures.supportsDepthStencilResolve.enabled && mMultisampledRenderToSingleSampledFeatures.multisampledRenderToSingleSampled == 1U
    VkDevice supports the VK_EXT_multisampled_render_to_single_sampled
    extension

  • supportsMultisampledRenderToSingleSampledGOOGLEX (Vulkan features) (http://anglebug.com/4836): Disabled
    condition: !mFeatures.supportsMultisampledRenderToSingleSampled.enabled && mFeatures.supportsRenderpass2.enabled && mFeatures.supportsDepthStencilResolve.enabled && mMultisampledRenderToSingleSampledFeaturesGOOGLEX.multisampledRenderToSingleSampled == 1U
    VkDevice supports the VK_GOOGLEX_multisampled_render_to_single_sampled
    extension

  • supportsMultiview (Vulkan features) (http://anglebug.com/6048): Enabled
    condition: mMultiviewFeatures.multiview == 1U
    VkDevice supports the VK_KHR_multiview extension

  • supportsNegativeViewport (Vulkan features): Enabled
    condition: supportsNegativeViewport
    The driver supports inverting the viewport with a negative height.

  • supportsPipelineCreationCacheControl (Vulkan features) (http://anglebug.com/5881): Disabled
    condition: mPipelineCreationCacheControlFeatures.pipelineCreationCacheControl && !isSwiftShader
    VkDevice supports VK_EXT_pipeline_creation_cache_control extension

  • supportsPipelineCreationFeedback (Vulkan features) (http://anglebug.com/5881): Enabled
    condition: ExtensionFound("VK_EXT_pipeline_creation_feedback", deviceExtensionNames)
    VkDevice supports VK_EXT_pipeline_creation_feedback extension

  • supportsPipelineProtectedAccess (Vulkan features) (https://anglebug.com/7714): Disabled
    condition: mPipelineProtectedAccessFeatures.pipelineProtectedAccess == 1U && mProtectedMemoryFeatures.protectedMemory == 1U
    VkDevice supports the VK_EXT_pipeline_protected_access extension

  • supportsPipelineRobustness (Vulkan features) (https://anglebug.com/5845): Enabled
    condition: mPipelineRobustnessFeatures.pipelineRobustness == 1U && mPhysicalDeviceFeatures.robustBufferAccess
    VkDevice supports VK_EXT_pipeline_robustness extension

  • supportsPipelineStatisticsQuery (Vulkan features) (http://anglebug.com/5430): Disabled
    condition: mPhysicalDeviceFeatures.pipelineStatisticsQuery == 1U
    VkDevice supports the pipelineStatisticsQuery feature

  • supportsPortabilityEnumeration (Vulkan features) (http://anglebug.com/8229): Enabled
    condition: ExtensionFound("VK_KHR_portability_enumeration", instanceExtensionNames)
    Vulkan supports VK_KHR_portability_enumeration extension

  • supportsPresentation (Vulkan features): Enabled
    condition: !displayVk->isGBM()
    VkDisplay supports presentation through a present family queue

  • supportsPrimitiveTopologyListRestart (Vulkan features) (http://anglebug.com/3832): Enabled
    condition: mPrimitiveTopologyListRestartFeatures.primitiveTopologyListRestart == 1U
    VkDevice supports VK_EXT_primitive_topology_list_restart extension.

  • supportsPrimitivesGeneratedQuery (Vulkan features) (http://anglebug.com/5430): Disabled
    condition: mFeatures.supportsTransformFeedbackExtension.enabled && mPrimitivesGeneratedQueryFeatures.primitivesGeneratedQuery == 1U
    VkDevice supports VK_EXT_primitives_generated_query extension

  • supportsProtectedMemory (Vulkan features) (http://anglebug.com/3965): Disabled
    condition: mProtectedMemoryFeatures.protectedMemory == 1U && (!isARM || mPipelineProtectedAccessFeatures.pipelineProtectedAccess == 1U)
    VkDevice supports protected memory

  • supportsRasterizationOrderAttachmentAccess (Vulkan features) (https://anglebug.com/7604): Enabled
    condition: !isQualcomm && mRasterizationOrderAttachmentAccessFeatures.rasterizationOrderColorAttachmentAccess == 1U
    VkDevice supports VK_EXT_rasterization_order_attachment_access extension

  • supportsRenderPassLoadStoreOpNone (Vulkan features) (http://anglebug.com/5371): Enabled
    condition: ExtensionFound("VK_EXT_load_store_op_none", deviceExtensionNames)
    VkDevice supports VK_EXT_load_store_op_none extension.

  • supportsRenderPassStoreOpNone (Vulkan features) (http://anglebug.com/5055): Disabled
    condition: !mFeatures.supportsRenderPassLoadStoreOpNone.enabled && ExtensionFound("VK_QCOM_render_pass_store_ops", deviceExtensionNames)
    VkDevice supports VK_QCOM_render_pass_store_ops extension.

  • supportsRenderpass2 (Vulkan features): Enabled
    condition: ExtensionFound("VK_KHR_create_renderpass2", deviceExtensionNames)
    VkDevice supports the VK_KHR_create_renderpass2 extension

  • supportsSampler2dViewOf3d (Vulkan features) (https://anglebug.com/7320): Disabled
    condition: mFeatures.supportsImage2dViewOf3d.enabled && mImage2dViewOf3dFeatures.sampler2DViewOf3D == 1U
    VkDevice supports the sampler2DViewOf3D feature of
    VK_EXT_image_2d_view_of_3d

  • supportsSamplerMirrorClampToEdge (Vulkan features): Enabled
    condition: ExtensionFound("VK_KHR_sampler_mirror_clamp_to_edge", deviceExtensionNames)
    VkDevice supports the VK_KHR_sampler_mirror_clamp_to_edge extension

  • supportsShaderFloat16 (Vulkan features) (http://anglebug.com/4551): Disabled
    condition: mShaderFloat16Int8Features.shaderFloat16 == 1U
    VkDevice supports the VK_KHR_shader_float16_int8 extension and has the
    shaderFloat16 feature

  • supportsShaderFramebufferFetch (Vulkan features): Enabled
    condition: (IsAndroid() && isARM) || mFeatures.supportsRasterizationOrderAttachmentAccess.enabled
    Whether the Vulkan backend supports coherent framebuffer fetch

  • supportsShaderFramebufferFetchNonCoherent (Vulkan features): Enabled
    condition: (IsAndroid() && !(isARM || isQualcomm)) || isSwiftShader
    Whether the Vulkan backend supports non-coherent framebuffer fetch

  • supportsShaderStencilExport (Vulkan features): Enabled
    condition: ExtensionFound("VK_EXT_shader_stencil_export", deviceExtensionNames)
    VkDevice supports the VK_EXT_shader_stencil_export extension

  • supportsSharedPresentableImageExtension (Vulkan features): Disabled
    condition: ExtensionFound("VK_KHR_shared_presentable_image", deviceExtensionNames)
    VkSurface supports the VK_KHR_shared_presentable_images extension

  • supportsSurfaceCapabilities2Extension (Vulkan features): Enabled
    condition: ExtensionFound("VK_KHR_get_surface_capabilities2", instanceExtensionNames)
    VkInstance supports the VK_KHR_get_surface_capabilities2 extension

  • supportsSurfaceProtectedCapabilitiesExtension (Vulkan features): Disabled
    condition: ExtensionFound("VK_KHR_surface_protected_capabilities", instanceExtensionNames)
    VkInstance supports the VK_KHR_surface_protected_capabilities extension

  • supportsSurfaceProtectedSwapchains (Vulkan features): Disabled
    condition: IsAndroid()
    VkSurface supportsProtected for protected swapchains

  • supportsSurfacelessQueryExtension (Vulkan features): Disabled
    condition: ExtensionFound("VK_GOOGLE_surfaceless_query", instanceExtensionNames) && !isMockICDEnabled()
    VkInstance supports the VK_GOOGLE_surfaceless_query extension

  • supportsSwapchainMaintenance1 (Vulkan features) (https://anglebug.com/7847): Enabled
    condition: mSwapchainMaintenance1Features.swapchainMaintenance1 == 1U
    VkDevice supports the VK_EXT_surface_maintenance1 and
    VK_EXT_swapchain_maintenance1 extensions

  • supportsTimelineSemaphore (Vulkan features): Enabled
    condition: mTimelineSemaphoreFeatures.timelineSemaphore == 1U
    VkDevice supports the VK_KHR_timeline_semaphore extension

  • supportsTimestampSurfaceAttribute (Vulkan features) (https://anglebug.com/7489): Disabled
    condition: IsAndroid() && ExtensionFound("VK_GOOGLE_display_timing", deviceExtensionNames)
    Platform supports setting frame timestamp surface attribute

  • supportsTransformFeedbackExtension (Vulkan features) (http://anglebug.com/3206): Disabled
    condition: mTransformFeedbackFeatures.transformFeedback == 1U
    Transform feedback uses the VK_EXT_transform_feedback extension.

  • supportsVertexInputDynamicState (Vulkan features) (https://anglebug.com/7162): Disabled
    VkDevice supports VK_EXT_vertex_input_dynamic_state extension

  • supportsYUVSamplerConversion (Vulkan features): Enabled
    condition: mSamplerYcbcrConversionFeatures.samplerYcbcrConversion != 0U
    VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension

  • supportsYuvTarget (Vulkan features): Disabled
    VkDevice supports VK_ANDROID_render_to_external_format and
    VK_EXT_ycbcr_attachment

  • swapbuffersOnFlushOrFinishWithSingleBuffer (Vulkan features) (http://anglebug.com/6878): Disabled
    condition: IsAndroid()
    Bypass deferredFlush with calling swapbuffers on flush or finish when in
    Shared Present mode

  • syncMonolithicPipelinesToBlobCache (Vulkan workarounds) (https://anglebug.com/7369): Disabled
    condition: mFeatures.hasEffectivePipelineCacheSerialization.enabled && (hasNoPipelineWarmUp || canSyncLargeMonolithicCache)
    Whether it's beneficial to store monolithic pipelines in the blob cache
    when VK_EXT_graphics_pipeline_library is in use. Otherwise the libraries
    are stored only, and monolithic pipelines are recreated on every run

  • useCullModeDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled && dynamicStateWorks
    Use the Cull Mode dynamic state from VK_EXT_extended_dynamic_state

  • useDepthBiasEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Disabled
    condition: mFeatures.supportsExtendedDynamicState2.enabled
    Use the Depth Bias Enable dynamic state from
    VK_EXT_extended_dynamic_state2

  • useDepthCompareOpDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled
    Use the Depth Compare Op dynamic state from VK_EXT_extended_dynamic_state

  • useDepthTestEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled
    Use the Depth Test Enable dynamic state from VK_EXT_extended_dynamic_state

  • useDepthWriteEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled && dynamicStateWorks
    Use the Depth Write Enable dynamic state from
    VK_EXT_extended_dynamic_state

  • useFrontFaceDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled
    Use the Front Face dynamic state from VK_EXT_extended_dynamic_state

  • useMultipleDescriptorsForExternalFormats (Vulkan workarounds) (http://anglebug.com/6141): Enabled
    condition: true
    Return a default descriptor count for external formats.

  • useNonZeroStencilWriteMaskStaticState (Vulkan workarounds) (http://anglebug.com/7556): Disabled
    condition: isARM && armDriverVersion < ARMDriverVersion(43, 0, 0)
    Work around a driver bug where 0 in stencil write mask static state would
    make the corresponding dynamic state malfunction in the presence of
    discard or alpha to coverage

  • usePrimitiveRestartEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Disabled
    condition: mFeatures.supportsExtendedDynamicState2.enabled && dynamicStateWorks
    Use the Primitive Restart Enable dynamic state from
    VK_EXT_extended_dynamic_state2

  • useRasterizerDiscardEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Disabled
    condition: mFeatures.supportsExtendedDynamicState2.enabled
    Use the Rasterizer Discard Enable dynamic state from
    VK_EXT_extended_dynamic_state2

  • useResetCommandBufferBitForSecondaryPools (Vulkan workarounds): Disabled
    condition: isARM
    Use VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT for initializing
    SecondaryCommandPools when using VulkanSecondaryCommandBuffer.

  • useStencilOpDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled
    Use the Stencil Op dynamic state from VK_EXT_extended_dynamic_state

  • useStencilTestEnableDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled
    Use the Stencil Test Enable dynamic state from
    VK_EXT_extended_dynamic_state

  • useVertexInputBindingStrideDynamicState (Vulkan workarounds) (http://anglebug.com/5906): Enabled
    condition: mFeatures.supportsExtendedDynamicState.enabled && dynamicStateWorks
    Use the Vertex Input Bininding Stride dynamic state from
    VK_EXT_extended_dynamic_state

  • useVmaForImageSuballocation (Vulkan features): Enabled
    condition: true
    Utilize VMA for image memory suballocation.

  • varyingsRequireMatchingPrecisionInSpirv (Vulkan workarounds) (http://anglebug.com/7488): Disabled
    condition: isPowerVR
    Add additional SPIRV instructions to make sure precision between shader
    stages match with each other

  • waitIdleBeforeSwapchainRecreation (Vulkan workarounds) (http://anglebug.com/5061): Disabled
    condition: IsAndroid() && isARM
    Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue
    to be idle. Works around a bug on platforms which destroy oldSwapchain in
    vkCreateSwapchainKHR.

  • warmUpPipelineCacheAtLink (Vulkan features) (http://anglebug.com/5881): Enabled
    condition: libraryBlobsAreReusedByMonolithicPipelines && !isQualcommProprietary && !(IsLinux() && isIntel) && !(IsChromeOS() && isSwiftShader)
    Warm up the Vulkan pipeline cache at link time

DAWN Info

Vulkan backend - NVIDIA GeForce RTX 3060 Ti

[WebGPU Status]

  • Available

[Default Toggle Names]

  • lazy_clear_resource_on_first_use:
    (https://crbug.com/dawn/145):
    Clears resource to zero on first usage. This initializes the resource so
    that no dirty bits from recycled memory is present in the new resource.

  • use_temporary_buffer_in_texture_to_texture_copy:
    (https://crbug.com/dawn/42):
    Split texture-to-texture copy into two copies: copy from source texture
    into a temporary buffer, and copy from the temporary buffer into the
    destination texture when copying between compressed textures that don't
    have block-aligned sizes. This workaround is enabled by default on all
    Vulkan drivers to solve an issue in the Vulkan SPEC about the
    texture-to-texture copies with compressed formats. See #1005
    (Texture-to-texture copy issue with compressed formats KhronosGroup/Vulkan-Docs#1005) for more
    details.

  • vulkan_use_d32s8:
    (https://crbug.com/dawn/286):
    Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When
    available the backend will use D32S8 (toggle to on) but setting the toggle
    to off will make it use the D24S8 format when possible.

  • vulkan_use_s8:
    (https://crbug.com/dawn/666):
    Vulkan has a pure stencil8 format but it is not universally available.
    When this toggle is on, the backend will use S8 for the stencil8 format,
    otherwise it will fallback to D32S8 or D24S8.

  • use_placeholder_fragment_in_vertex_only_pipeline:
    (https://crbug.com/dawn/136):
    Use a placeholder empty fragment shader in vertex only render pipeline.
    This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and
    serves as a workaround by default enabled on some Metal devices with Intel
    GPU to ensure the depth result is correct.

  • use_vulkan_zero_initialize_workgroup_memory_extension:
    (https://crbug.com/dawn/1302):
    Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan
    extension VK_KHR_zero_initialize_workgroup_memory is supported.

  • vulkan_use_image_robust_access_2:
    (https://crbug.com/tint/1890):
    Disable Tint robustness transform on textures when VK_EXT_robustness2 is
    supported and robustImageAccess2 == VK_TRUE.

  • vulkan_use_buffer_robust_access_2:
    (https://crbug.com/tint/1890):
    Disable index clamping on the runtime-sized arrays on buffers in Tint
    robustness transform when VK_EXT_robustness2 is supported and
    robustBufferAccess2 == VK_TRUE.

[WebGPU Forced Toggles - enabled]

  • disallow_spirv:
    (https://crbug.com/1214923):
    Disallow usage of SPIR-V completely so that only WGSL is used for shader
    modules. This is useful to prevent a Chromium renderer process from
    successfully sending SPIR-V code to be compiled in the GPU process.

[Default Supported Features]

  • depth_clip_control
  • depth32_float_stencil8
  • texture_compression_BC
  • indirect_first_instance
  • RG11B10_ufloat_renderable
  • BGRA8_unorm_storage
  • dawn_internal_usages
  • dawn_multi_planar_formats
  • dawn_native
  • implicit_device_synchronization
  • surface_capabilities
  • transient_attachments
  • norm16_texture_formats

Vulkan backend - llvmpipe (LLVM 15.0.7, 256 bits)

[WebGPU Status]

  • Blocklisted

[Default Toggle Names]

  • lazy_clear_resource_on_first_use:
    (https://crbug.com/dawn/145):
    Clears resource to zero on first usage. This initializes the resource so
    that no dirty bits from recycled memory is present in the new resource.

  • use_temporary_buffer_in_texture_to_texture_copy:
    (https://crbug.com/dawn/42):
    Split texture-to-texture copy into two copies: copy from source texture
    into a temporary buffer, and copy from the temporary buffer into the
    destination texture when copying between compressed textures that don't
    have block-aligned sizes. This workaround is enabled by default on all
    Vulkan drivers to solve an issue in the Vulkan SPEC about the
    texture-to-texture copies with compressed formats. See #1005
    (Texture-to-texture copy issue with compressed formats KhronosGroup/Vulkan-Docs#1005) for more
    details.

  • vulkan_use_d32s8:
    (https://crbug.com/dawn/286):
    Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When
    available the backend will use D32S8 (toggle to on) but setting the toggle
    to off will make it use the D24S8 format when possible.

  • vulkan_use_s8:
    (https://crbug.com/dawn/666):
    Vulkan has a pure stencil8 format but it is not universally available.
    When this toggle is on, the backend will use S8 for the stencil8 format,
    otherwise it will fallback to D32S8 or D24S8.

  • use_placeholder_fragment_in_vertex_only_pipeline:
    (https://crbug.com/dawn/136):
    Use a placeholder empty fragment shader in vertex only render pipeline.
    This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and
    serves as a workaround by default enabled on some Metal devices with Intel
    GPU to ensure the depth result is correct.

  • use_vulkan_zero_initialize_workgroup_memory_extension:
    (https://crbug.com/dawn/1302):
    Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan
    extension VK_KHR_zero_initialize_workgroup_memory is supported.

  • vulkan_use_image_robust_access_2:
    (https://crbug.com/tint/1890):
    Disable Tint robustness transform on textures when VK_EXT_robustness2 is
    supported and robustImageAccess2 == VK_TRUE.

  • vulkan_use_buffer_robust_access_2:
    (https://crbug.com/tint/1890):
    Disable index clamping on the runtime-sized arrays on buffers in Tint
    robustness transform when VK_EXT_robustness2 is supported and
    robustBufferAccess2 == VK_TRUE.

[WebGPU Forced Toggles - enabled]

  • disallow_spirv:
    (https://crbug.com/1214923):
    Disallow usage of SPIR-V completely so that only WGSL is used for shader
    modules. This is useful to prevent a Chromium renderer process from
    successfully sending SPIR-V code to be compiled in the GPU process.

[Default Supported Features]

  • depth_clip_control
  • depth32_float_stencil8
  • texture_compression_BC
  • indirect_first_instance
  • RG11B10_ufloat_renderable
  • BGRA8_unorm_storage
  • dawn_internal_usages
  • dawn_native
  • implicit_device_synchronization
  • surface_capabilities
  • transient_attachments

Vulkan backend - SwiftShader Device (Subzero)

[WebGPU Status]

  • Blocklisted

[Default Toggle Names]

  • lazy_clear_resource_on_first_use:
    (https://crbug.com/dawn/145):
    Clears resource to zero on first usage. This initializes the resource so
    that no dirty bits from recycled memory is present in the new resource.

  • use_temporary_buffer_in_texture_to_texture_copy:
    (https://crbug.com/dawn/42):
    Split texture-to-texture copy into two copies: copy from source texture
    into a temporary buffer, and copy from the temporary buffer into the
    destination texture when copying between compressed textures that don't
    have block-aligned sizes. This workaround is enabled by default on all
    Vulkan drivers to solve an issue in the Vulkan SPEC about the
    texture-to-texture copies with compressed formats. See #1005
    (Texture-to-texture copy issue with compressed formats KhronosGroup/Vulkan-Docs#1005) for more
    details.

  • vulkan_use_d32s8:
    (https://crbug.com/dawn/286):
    Vulkan mandates support of either D32_FLOAT_S8 or D24_UNORM_S8. When
    available the backend will use D32S8 (toggle to on) but setting the toggle
    to off will make it use the D24S8 format when possible.

  • vulkan_use_s8:
    (https://crbug.com/dawn/666):
    Vulkan has a pure stencil8 format but it is not universally available.
    When this toggle is on, the backend will use S8 for the stencil8 format,
    otherwise it will fallback to D32S8 or D24S8.

  • use_placeholder_fragment_in_vertex_only_pipeline:
    (https://crbug.com/dawn/136):
    Use a placeholder empty fragment shader in vertex only render pipeline.
    This toggle must be enabled for OpenGL ES backend, the Vulkan Backend, and
    serves as a workaround by default enabled on some Metal devices with Intel
    GPU to ensure the depth result is correct.

  • use_vulkan_zero_initialize_workgroup_memory_extension:
    (https://crbug.com/dawn/1302):
    Initialize workgroup memory with OpConstantNull on Vulkan when the Vulkan
    extension VK_KHR_zero_initialize_workgroup_memory is supported.

[WebGPU Forced Toggles - enabled]

  • disallow_spirv:
    (https://crbug.com/1214923):
    Disallow usage of SPIR-V completely so that only WGSL is used for shader
    modules. This is useful to prevent a Chromium renderer process from
    successfully sending SPIR-V code to be compiled in the GPU process.

[Default Supported Features]

  • depth_clip_control
  • depth32_float_stencil8
  • texture_compression_BC
  • texture_compression_ETC2
  • texture_compression_ASTC
  • indirect_first_instance
  • RG11B10_ufloat_renderable
  • BGRA8_unorm_storage
  • dawn_internal_usages
  • dawn_multi_planar_formats
  • dawn_native
  • implicit_device_synchronization
  • surface_capabilities
  • transient_attachments

Version Information

Data exported : 2023-10-18T08:21:49.845Z
Chrome version : Chrome/118.0.5993.88
Operating system : Linux 6.2.0-34-generic
Software rendering list URL: https://chromium.googlesource.com/chromium/src/+/1d05652f52a55dcf9a7905af94949f2bc3a66306/gpu/config/software_rendering_list.json
Driver bug list URL : https://chromium.googlesource.com/chromium/src/+/1d05652f52a55dcf9a7905af94949f2bc3a66306/gpu/config/gpu_driver_bug_list.json
ANGLE commit id : 05f45adc1473
2D graphics backend : Skia/118 bd56a010b6941116cd1900276bf5201f9a9c73da
Command Line : /usr/bin/google-chrome --enable-features=VaapiVideoDecodeLinuxGL --flag-switches-begin --ignore-gpu-blocklist --ozone-platform-hint=wayland --enable-features=VaapiVideoDecodeLinuxGL,Vulkan --flag-switches-end --ozone-platform=wayland --origin-trial-disabled-features=WebGPU

Driver Information

Initialization time : 84
In-process GPU : false
Passthrough Command Decoder : true
Sandboxed : false
GPU0 : VENDOR= 0xffff [Google Inc. (Google)], DEVICE=0xffff [ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)], DRIVER_VENDOR=SwANGLE, DRIVER_VERSION=5.0.0 ACTIVE
Optimus : false
AMD switchable : false
GPU CUDA compute capability major version: 0
Pixel shader version : 1.00
Vertex shader version : 1.00
Max. MSAA samples : 4
Machine model name :
Machine model version :
GL implementation parts : (gl=egl-angle,angle=swiftshader)
Display type : ANGLE_SWIFTSHADER
GL_VENDOR : Google Inc. (Google)
GL_RENDERER : ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)
GL_VERSION : OpenGL ES 2.0.0 (ANGLE 2.1.21845 git hash: 05f45adc1473)
GL_EXTENSIONS : GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_compressed_texture_etc GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_image GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_memory_object_flags GL_ANGLE_memory_size GL_ANGLE_multi_draw GL_ANGLE_pack_reverse_row_order GL_ANGLE_polygon_mode GL_ANGLE_program_cache_control GL_ANGLE_read_only_depth_stencil_feedback_loops GL_ANGLE_relaxed_vertex_attribute_type GL_ANGLE_request_extension GL_ANGLE_rgbx_internal_format GL_ANGLE_robust_client_memory GL_ANGLE_robust_fragment_shader_output GL_ANGLE_robust_resource_initialization GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_usage GL_ANGLE_vulkan_image GL_APPLE_clip_distance GL_ARM_shader_framebuffer_fetch GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgb GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_compressed_texture GL_CHROMIUM_copy_texture GL_CHROMIUM_lose_context GL_CHROMIUM_texture_filtering_hint GL_EXT_EGL_image_external_wrap_modes GL_EXT_base_instance GL_EXT_blend_minmax GL_EXT_buffer_storage GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_copy_image GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_clamp GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_multi_draw_indirect GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_shader_non_constant_global_initializers GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_border_clamp GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc_srgb GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_type_2_10_10_10_REV GL_EXT_unpack_subimage GL_KHR_blend_equation_advanced GL_KHR_debug GL_KHR_robust_buffer_access_behavior GL_KHR_texture_compression_astc_ldr GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_polygon_mode GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_compressed_EAC_R11_signed_texture GL_OES_compressed_EAC_R11_unsigned_texture GL_OES_compressed_EAC_RG11_signed_texture GL_OES_compressed_EAC_RG11_unsigned_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_ETC2_RGB8_texture GL_OES_compressed_ETC2_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture GL_OES_compressed_ETC2_sRGB8_alpha8_texture GL_OES_compressed_ETC2_sRGB8_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_primitive_bounding_box GL_OES_rgb8_rgba8 GL_OES_sample_shading GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_border_clamp GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_OES_vertex_half_float
Disabled Extensions :
Disabled WebGL Extensions :
Window system binding vendor : Google Inc. (Google)
Window system binding version : 1.5 (ANGLE 2.1.21845 git hash: 05f45adc1473)
Window system binding extensions: EGL_EXT_create_context_robustness EGL_ANGLE_surface_orientation EGL_KHR_create_context EGL_KHR_image EGL_KHR_image_base EGL_EXT_image_gl_colorspace EGL_KHR_gl_colorspace EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR_get_all_proc_addresses EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANGLE_create_context_backwards_compatible EGL_KHR_no_config_context EGL_IMG_context_priority EGL_KHR_create_context_no_error EGL_KHR_reusable_sync EGL_EXT_buffer_age EGL_ANGLE_create_surface_swap_interval EGL_ANGLE_vulkan_image EGL_KHR_partial_update
XDG_CURRENT_DESKTOP : ubuntu:GNOME
XDG_SESSION_TYPE : wayland
GDMSESSION : ubuntu-wayland
Interfaces exposed by the Wayland compositor: wl_compositor:5 wl_eglstream_display:1 wl_shm:1 wl_output:4 zxdg_output_manager_v1:3 wl_data_device_manager:3 zwp_primary_selection_device_manager_v1:1 wl_subcompositor:1 xdg_wm_base:4 gtk_shell1:5 wp_viewporter:1 wp_fractional_scale_manager_v1:1 zwp_pointer_gestures_v1:3 zwp_tablet_manager_v2:1 wl_seat:8 zwp_relative_pointer_manager_v1:1 zwp_pointer_constraints_v1:1 zxdg_exporter_v2:1 zxdg_importer_v2:1 zxdg_exporter_v1:1 zxdg_importer_v1:1 wp_single_pixel_buffer_manager_v1:1 zwp_keyboard_shortcuts_inhibit_manager_v1:1 zwp_text_input_manager_v3:1 wp_presentation:1 xdg_activation_v1:1 zwp_linux_dmabuf_v1:4 wl_drm:2
Ozone platform : wayland
Direct rendering version : unknown
Reset notification strategy : 0x8252
GPU process crash count : 6
gfx::BufferFormats supported for allocation and texturing: R_8: not supported, R_16: not supported, RG_88: not supported, RG_1616: not supported, BGR_565: not supported, RGBA_4444: not supported, RGBX_8888: not supported, RGBA_8888: not supported, BGRX_8888: not supported, BGRA_1010102: not supported, RGBA_1010102: not supported, BGRA_8888: not supported, RGBA_F16: not supported, YVU_420: not supported, YUV_420_BIPLANAR: not supported, YUVA_420_TRIPLANAR: not supported, P010: not supported

Compositor Information

Tile Update Mode: One-copy
Partial Raster : Enabled

GpuMemoryBuffers Status

R_8 : Software only
R_16 : Software only
RG_88 : Software only
RG_1616 : Software only
BGR_565 : GPU_READ
RGBA_4444 : Software only
RGBX_8888 : GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_8888 : GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRX_8888 : GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_1010102 : SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_1010102 : SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
BGRA_8888 : GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, SCANOUT_FRONT_RENDERING
RGBA_F16 : Software only
YVU_420 : Software only
YUV_420_BIPLANAR : Software only
YUVA_420_TRIPLANAR: Software only
P010 : Software only

Display(s) Information

Info : Display[5] bounds=[0,0 2752x1152], workarea=[0,0 2752x1152], scale=1.25, rotation=0, panel_rotation=0 external detected
Color space (all) : {primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
Buffer format (all) : RGBA_8888
Color volume : {name:'srgb', r:[0.6400, 0.3300], g:[0.3000, 0.6000], b:[0.1500, 0.3300], w:[0.3127, 0.3290]}
SDR white level in nits : 203
HDR relative maximum luminance: 1
Bits per color component : 8
Bits per pixel : 24

Video Acceleration Information

Decoding:
Encoding:

Vulkan Information

Device Performance Information

Driver Information for Hardware GPU

Initialization time : 274
In-process GPU : false
Passthrough Command Decoder : true
Sandboxed : true
GPU0 : VENDOR= 0x10de [Google Inc. (NVIDIA Corporation)], DEVICE=0x2489 [ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 3060 Ti/PCIe/SSE2, OpenGL ES 3.2 NVIDIA 525.125.06)], DRIVER_VENDOR=NVIDIA, DRIVER_VERSION=525.125.06 ACTIVE
Optimus : false
AMD switchable : false
GPU CUDA compute capability major version: 0
Pixel shader version : 1.00
Vertex shader version : 1.00
Max. MSAA samples : 8
Machine model name :
Machine model version :
GL implementation parts : (gl=egl-angle,angle=opengl)
Display type : ANGLE_OPENGL
GL_VENDOR : Google Inc. (NVIDIA Corporation)
GL_RENDERER : ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 3060 Ti/PCIe/SSE2, OpenGL ES 3.2 NVIDIA 525.125.06)
GL_VERSION : OpenGL ES 2.0.0 (ANGLE 2.1.21845 git hash: 05f45adc1473)
GL_EXTENSIONS : GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_compressed_texture_etc GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_memory_size GL_ANGLE_multi_draw GL_ANGLE_program_cache_control GL_ANGLE_request_extension GL_ANGLE_robust_client_memory GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_external_update GL_ANGLE_translated_shader_source GL_ARB_sync GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_texture GL_CHROMIUM_framebuffer_mixed_samples GL_CHROMIUM_lose_context GL_CHROMIUM_sync_query GL_EXT_EGL_image_external_wrap_modes GL_EXT_base_instance GL_EXT_blend_func_extended GL_EXT_blend_minmax GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_clamp GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_multi_draw_indirect GL_EXT_multisample_compatibility GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_border_clamp GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc_srgb GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_unpack_subimage GL_KHR_debug GL_KHR_parallel_shader_compile GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_read_depth GL_NV_read_stencil GL_NV_robustness_video_memory_purge GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_compressed_EAC_R11_signed_texture GL_OES_compressed_EAC_R11_unsigned_texture GL_OES_compressed_EAC_RG11_signed_texture GL_OES_compressed_EAC_RG11_unsigned_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_ETC2_RGB8_texture GL_OES_compressed_ETC2_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture GL_OES_compressed_ETC2_sRGB8_alpha8_texture GL_OES_compressed_ETC2_sRGB8_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_border_clamp GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_WEBGL_video_texture
Disabled Extensions : GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Disabled WebGL Extensions :
Window system binding vendor : Google Inc. (NVIDIA Corporation)
Window system binding version : 1.5 (ANGLE 2.1.21845 git hash: 05f45adc1473)
Window system binding extensions: EGL_EXT_create_context_robustness EGL_KHR_create_context EGL_KHR_image EGL_KHR_image_base EGL_KHR_gl_colorspace EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_renderbuffer_image EGL_KHR_get_all_proc_addresses EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANGLE_create_context_backwards_compatible EGL_KHR_no_config_context EGL_KHR_create_context_no_error EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_NV_robustness_video_memory_purge EGL_KHR_reusable_sync EGL_ANGLE_external_context_and_surface EGL_EXT_buffer_age EGL_ANGLE_context_virtualization
XDG_CURRENT_DESKTOP : ubuntu:GNOME
XDG_SESSION_TYPE : wayland
GDMSESSION : ubuntu-wayland
Interfaces exposed by the Wayland compositor: wl_compositor:5 wl_eglstream_display:1 wl_shm:1 wl_output:4 zxdg_output_manager_v1:3 wl_data_device_manager:3 zwp_primary_selection_device_manager_v1:1 wl_subcompositor:1 xdg_wm_base:4 gtk_shell1:5 wp_viewporter:1 wp_fractional_scale_manager_v1:1 zwp_pointer_gestures_v1:3 zwp_tablet_manager_v2:1 wl_seat:8 zwp_relative_pointer_manager_v1:1 zwp_pointer_constraints_v1:1 zxdg_exporter_v2:1 zxdg_importer_v2:1 zxdg_exporter_v1:1 zxdg_importer_v1:1 wp_single_pixel_buffer_manager_v1:1 zwp_keyboard_shortcuts_inhibit_manager_v1:1 zwp_text_input_manager_v3:1 wp_presentation:1 xdg_activation_v1:1 zwp_linux_dmabuf_v1:4 wl_drm:2
Ozone platform : wayland
Direct rendering version : unknown
Reset notification strategy : 0x8252
GPU process crash count : 6
gfx::BufferFormats supported for allocation and texturing: R_8: not supported, R_16: not supported, RG_88: not supported, RG_1616: not supported, BGR_565: supported, RGBA_4444: not supported, RGBX_8888: supported, RGBA_8888: supported, BGRX_8888: supported, BGRA_1010102: supported, RGBA_1010102: supported, BGRA_8888: supported, RGBA_F16: not supported, YVU_420: not supported, YUV_420_BIPLANAR: not supported, YUVA_420_TRIPLANAR: not supported, P010: not supported

Graphics Feature Status for Hardware GPU

  • Canvas: Hardware accelerated
  • Canvas out-of-process rasterization: Disabled
  • Direct Rendering Display Compositor: Disabled
  • Compositing: Hardware accelerated
  • Multiple Raster Threads: Enabled
  • OpenGL: Enabled
  • Rasterization: Hardware accelerated
  • Raw Draw: Disabled
  • Skia Graphite: Disabled
  • Video Decode: Hardware accelerated
  • Video Encode: Software only. Hardware acceleration disabled
  • Vulkan: Enabled
  • WebGL: Hardware accelerated
  • WebGL2: Hardware accelerated
  • WebGPU: Disabled

Driver Bug Workarounds for Hardware GPU

  • adjust_src_dst_region_for_blitframebuffer
  • clear_uniforms_before_first_program_use
  • disable_discard_framebuffer
  • enable_webgl_timer_query_extensions
  • exit_on_context_lost
  • force_cube_complete
  • init_gl_position_in_vertex_shader
  • init_vertex_attributes
  • pack_parameters_workaround_with_pack_buffer
  • reset_base_mipmap_level_before_texstorage
  • unpack_alignment_workaround_with_unpack_buffer
  • unpack_overlapping_rows_separately_unpack_buffer
  • use_virtualized_gl_contexts
  • disabled_extension_GL_KHR_blend_equation_advanced
  • disabled_extension_GL_KHR_blend_equation_advanced_coherent

Problems Detected for Hardware GPU

  • WebGPU has been disabled via blocklist or the command line.
    Disabled Features: webgpu

  • Accelerated video encode has been disabled, either via blocklist, about:flags or the command line.
    Disabled Features: video_encode

  • Program link fails in NVIDIA Linux if gl_Position is not set:
    (http://crbug.com/286468)
    Applied Workarounds: init_gl_position_in_vertex_shader

  • Clear uniforms before first program use on all platforms:
    (http://crbug.com/124764), (http://crbug.com/349137)
    Applied Workarounds: clear_uniforms_before_first_program_use

  • Linux NVIDIA drivers don't have the correct defaults for vertex attributes:
    (http://crbug.com/351528)
    Applied Workarounds: init_vertex_attributes

  • MakeCurrent is slow on Linux with NVIDIA drivers:
    (http://crbug.com/449150), (http://crbug.com/514510)
    Applied Workarounds: use_virtualized_gl_contexts

  • NVIDIA fails glReadPixels from incomplete cube map texture:
    (http://crbug.com/518889)
    Applied Workarounds: force_cube_complete

  • Pack parameters work incorrectly with pack buffer bound:
    (http://crbug.com/563714)
    Applied Workarounds: pack_parameters_workaround_with_pack_buffer

  • Alignment works incorrectly with unpack buffer bound:
    (http://crbug.com/563714)
    Applied Workarounds: unpack_alignment_workaround_with_unpack_buffer

  • Framebuffer discarding not useful on NVIDIA Kepler architecture and later:
    (http://crbug.com/601753)
    Applied Workarounds: disable_discard_framebuffer

  • Unpacking overlapping rows from unpack buffers is unstable on NVIDIA GL driver:
    (http://crbug.com/596774)
    Applied Workarounds: unpack_overlapping_rows_separately_unpack_buffer

  • Disable KHR_blend_equation_advanced until cc shaders are updated:
    (http://crbug.com/661715)
    Applied Workarounds: disable(GL_KHR_blend_equation_advanced),
    disable(GL_KHR_blend_equation_advanced_coherent)

  • Expose WebGL's disjoint_timer_query extensions on platforms with site isolation:
    (http://crbug.com/808744), (http://crbug.com/870491)
    Applied Workarounds: enable_webgl_timer_query_extensions

  • glTexStorage* are buggy when base mipmap level is not 0:
    (http://crbug.com/877874)
    Applied Workarounds: reset_base_mipmap_level_before_texstorage

  • Some drivers can't recover after OUT_OF_MEM and context lost:
    (http://crbug.com/893177)
    Applied Workarounds: exit_on_context_lost

  • adjust src/dst region if blitting pixels outside framebuffer on Linux NVIDIA:
    (http://crbug.com/830046)
    Applied Workarounds: adjust_src_dst_region_for_blitframebuffer

Log Messages

[35541:35541:1018/122127.651423:WARNING:gbm_surfaceless_wayland.cc(150)] : Only solid color overlay planes are allowed to be scheduled without backing.
GpuProcessHost: The GPU process exited with code 8704.
[35734:35734:1018/122128.006527:WARNING:gbm_surfaceless_wayland.cc(150)] : Only solid color overlay planes are allowed to be scheduled without backing.
GpuProcessHost: The GPU process exited with code 8704.
[35761:35761:1018/122128.375677:WARNING:gbm_surfaceless_wayland.cc(150)] : Only solid color overlay planes are allowed to be scheduled without backing.
GpuProcessHost: The GPU process exited with code 8704.
[35796:35796:1018/122128.608398:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35796:35796:1018/122128.608484:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=SCANOUT
[35796:35796:1018/122128.608599:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35796:35796:1018/122128.608636:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=GPU_READ
[35796:35796:1018/122128.608665:ERROR:shared_image_factory.cc(926)] : CreateSharedImage: could not create backing.
[35796:35796:1018/122128.608696:ERROR:shared_image_factory.cc(758)] : DestroySharedImage: Could not find shared image mailbox
GpuProcessHost: The GPU process exited with code 8704.
[35805:35805:1018/122128.834400:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35805:35805:1018/122128.834505:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=SCANOUT
[35805:35805:1018/122128.834614:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35805:35805:1018/122128.834650:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=GPU_READ
[35805:35805:1018/122128.834680:ERROR:shared_image_factory.cc(926)] : CreateSharedImage: could not create backing.
[35805:35805:1018/122128.834713:ERROR:shared_image_factory.cc(758)] : DestroySharedImage: Could not find shared image mailbox
GpuProcessHost: The GPU process exited with code 8704.
[35827:35827:1018/122129.084412:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35827:35827:1018/122129.084495:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=SCANOUT
[35827:35827:1018/122129.084604:ERROR:gbm_wrapper.cc(253)] : Failed to export buffer to dma_buf: No such file or directory (2)
[35827:35827:1018/122129.084640:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= RGBA_8888 and usage=GPU_READ
[35827:35827:1018/122129.084669:ERROR:shared_image_factory.cc(926)] : CreateSharedImage: could not create backing.
[35827:35827:1018/122129.084701:ERROR:shared_image_factory.cc(758)] : DestroySharedImage: Could not find shared image mailbox
GpuProcessHost: The GPU process exited with code 8704.
[35846:35846:1018/122129.186306:WARNING:sandbox_linux.cc(393)] : InitializeSandbox() called with multiple threads in process gpu-process.
[35846:35846:1018/122129.211694:ERROR:gl_utils.cc(402)] : [.WebGL-0xcc0002a3800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[35846:35846:1018/122129.239070:ERROR:gl_utils.cc(402)] : [.RendererMainThread-0xcc0002a1c00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[35846:35846:1018/122129.252685:ERROR:gl_utils.cc(402)] : [.WebGL-0xcc0002a3800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[35846:35846:1018/122129.263584:ERROR:gl_utils.cc(402)] : [.RendererMainThread-0xcc0002a1c00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)

</details>

would be real grateful if someone can give me at least a temporary fix because i tried a ton of flags and none worked. any more info i should provide?

@GrabbenD
Copy link

@feakuru

If you're on NVIDIA, check my post here for flags (I managed to get full hardware acceleration in the past):
https://www.reddit.com/r/wayland/comments/16gcci4/comment/k08acat/

I ended up switching to AMD and here's my updated/current flags:
#207 (comment)

@Digitalone1
Copy link

I saw this reported on Arch Linux forum.

Will it finally improve hardware acceleration on native Wayland from v119?

@gz83
Copy link
Collaborator

gz83 commented Oct 22, 2023

I saw this reported on Arch Linux forum.

Will it finally improve hardware acceleration on native Wayland from v119?

It seems that this patch is only merged in the main branch for the time being, and the corresponding version is 120

@Digitalone1

@vampywiz17
Copy link

I use 119 beta Chrome and it contain the fix. I already tested.

@Digitalone1
Copy link

Digitalone1 commented Oct 22, 2023

I use 119 beta Chrome and it contain the fix. I already tested.

What is your GPU and which flag do you use for the hardware acceleration?

@vampywiz17
Copy link

I use 119 beta Chrome and it contain the fix. I already tested.

What is your GPU and which flag do you use for the hardware acceleration?

Intel® HD Graphics 520

only --enable-features=VaapiVideoDecodeLinuxGL

@archerallstars
Copy link

I use 119 beta Chrome and it contain the fix. I already tested.

What is your GPU and which flag do you use for the hardware acceleration?

Intel® HD Graphics 520

only --enable-features=VaapiVideoDecodeLinuxGL

Are you running Chrome/Chromium using ozone-platform=wayland?

@zakutin
Copy link

zakutin commented Oct 24, 2023

@Alex313031, is there any way to run Thorium with VAAPI under Wayland session with i965 driver for intel HD 4000 graphics?

@Digitalone1
Copy link

And AMDGPU also. Thanks.

@Digitalone1
Copy link

I tried Chromium 119 and still no hardware acceleration on AMDGPU. Tested both ozone Wayland and X11.

@Ilirski
Copy link

Ilirski commented Nov 4, 2023

Looks like Chromium 120 fixed hardware acceleration on ozone Wayland for NVIDIA. VAAPI doesn't seem to work though.

https://bugs.chromium.org/p/chromium/issues/detail?id=1273758#c11

@rabaimor
Copy link

I cant even run Thorium on wayland. It rarely even opens, but even if it does, it crashes under a few minutes

@Fiffian
Copy link

Fiffian commented Jan 20, 2024

@rabaimor i am on wayland (AMD gpu, nobara 39) and have zero issues running it. Post your specs, that'll help a lot.

@Alex313031
Copy link
Owner

@vampywiz17 @archerallstars @feakuru @Fiffian @Cir-0 I will be adding a flag to chrome://flags to control the VaapiVideoDecodeLinuxGL flag, since I have it enabled by default, but there are some instances you would want it disabled.

It might also help y'all to pass the --gtk-version=4 commandline flag

@Alex313031
Copy link
Owner

@vampywiz17 @archerallstars @feakuru @Fiffian @Cir-0 Added a chrome://flags/#vaapi-video-decode-linux-gl flag to M120.

@brauliobo
Copy link

brauliobo commented Aug 3, 2024

I still have this issue with the latest Thorium 124 from AUR. Using Ryzen 5600g's GPU and amdgpu opensource driver. Using latest KDE Plasma.

If I don't switch to Ozone, then Thorium becomes sluggish and laggy from time to time, even to switch tabs.

But then with Ozone=Auto, all WebGL and hardware acceleration is disabled :(
Testing with https://webglsamples.org/aquarium/aquarium.html and chrome://gpu

It seems the same issue reported at https://www.reddit.com/r/wayland/comments/17u282f/google_chrome_freezinglagging/

@gz83
Copy link
Collaborator

gz83 commented Aug 3, 2024

I still have this issue with the latest Thorium 124 from AUR. Using Ryzen 5600g's GPU and amdgpu opensource driver. Using latest KDE Plasma.

If I don't switch to Ozone, then Thorium becomes sluggish and laggy from time to time, even to switch tabs.

But then with Ozone=Auto, all WebGL and hardware acceleration is disabled :( Testing with https://webglsamples.org/aquarium/aquarium.html and chrome://gpu

It seems the same issue reported at https://www.reddit.com/r/wayland/comments/17u282f/google_chrome_freezinglagging/

What graphics card are you using?

@brauliobo

@brauliobo
Copy link

@gz83 onboard Ryzen 5600g GPU

@gz83
Copy link
Collaborator

gz83 commented Aug 3, 2024

@gz83 onboard Ryzen 5600g GPU

The upstream issue may be helpful to you, and comes with a patch. But please note that the patch I have landed in the M129 version, can you test the flags on your device and see if the patch works for you?

If the flags and patch work fine on your device, I will discuss with Alex whether to temporarily port the patch to Thorium.

https://issues.chromium.org/issues/334275637

@brauliobo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

17 participants