Banding effect with transmission property

Hi guys. I’m experimenting a strange banding effect when I apply transmission property to some materials. Works ok with opacity. Any idea?

r131 (I can’t update for now)
Using postprocessing with AdaptiveToneMappingPass, RenderPass and WebGLMultisampleRenderTarget

EDIT: Tested with r141 and the problem persists.

Thanks in advance, J!

Image:

Video:

WebGLMultisampleRenderTarget config

{
    minFilter: LinearFilter,
    magFilter: LinearFilter,
    format: RGBAFormat,
    encoding: sRGBEncoding,
    stencilBuffer: true,
    samples: 6,
  }

GLTF material:

{
            "name": "MATERIAL_01",
            "pbrMetallicRoughness": {
                "baseColorFactor": [
                    0.8,
                    0.8,
                    0.5,
                    1
                ],
                "metallicFactor": 0,
                "roughnessFactor": 0
            },
            "extensions": {
                "KHR_materials_transmission": {
                    "transmissionFactor": 1
                },
                "KHR_materials_volume": {
                    "thicknessFactor": 0.01,
                    "attenuationDistance": 0,
                    "attenuationColor": [
                        1,
                        1,
                        1
                    ]
                },
                "KHR_materials_clearcoat": {
                    "clearcoatFactor": 0,
                    "clearcoatRoughnessFactor": 0
                },
                "KHR_materials_iridescence": {
                    "iridescenceFactor": 0,
                    "iridescenceIor": 1,
                    "iridescenceThicknessMinimum": 100,
                    "iridescenceThicknessMaximum": 0
                }
            }
        }

Doe the artifacts disappear of you use no multisampling?

Nop, still there. Just did a simple test in the editor and I can still see the problem. You can take a look to the exported scene and the video. Its only happening if the camera is far from the models

Video:

Editor scene:

scene (2).gltf (39.0 KB)

I’m guessing here but looks like its something related to the deepTest/deepWrite. If I turn off the deepWrite/deepTest of the materials that are behind the transmission one on both the simple example and the complex scene there is no more artefacts/flickers

I can’t reproduce the issue with the provided JSON and the editor on my iMac. Maybe it’s a device related problem.

Do you mind sharing more information about your hardware? Probably best to share the chrome://gpu/ report.

2 Likes

Thanks for cool link.

1 Like

@Mugen87

You are right! I’m in Mac OSX 11.6 (Big Sur) with Chrome v102 and when I switch to firefox the problem disappear.

Here the GPU info. Look the log message at the bottom… Maybe is related?

Graphics Feature Status
Canvas: Hardware accelerated
Canvas out-of-process rasterization: Disabled
Direct Rendering Display Compositor: Disabled
Compositing: Hardware accelerated
Metal: Disabled
Multiple Raster Threads: Enabled
OpenGL: Enabled
Rasterization: Hardware accelerated
Raw Draw: Disabled
Skia Renderer: Enabled
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
Vulkan: Disabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
WebGPU: Hardware accelerated
Driver Bug Workarounds
adjust_src_dst_region_for_blitframebuffer
clamp_texture_base_level_and_max_level
decode_encode_srgb_for_generatemipmap
disable_2d_canvas_auto_flush
dont_use_loops_to_initialize_variables
enable_webgl_timer_query_extensions
flush_on_framebuffer_change
force_enable_color_buffer_float
get_frag_data_info_bug
pack_parameters_workaround_with_pack_buffer
regenerate_struct_names
remove_dynamic_indexing_of_swizzled_vector
remove_invariant_and_centroid_for_essl3
set_zero_level_before_generating_mipmap
unfold_short_circuit_as_ternary_operation
unpack_alignment_workaround_with_unpack_buffer
use_intermediary_for_copy_texture_image
use_unused_standard_shared_blocks
disabled_extension_GL_KHR_blend_equation_advanced
disabled_extension_GL_KHR_blend_equation_advanced_coherent
Problems Detected
Unfold short circuit on Mac OS X: 307751
Applied Workarounds: unfold_short_circuit_as_ternary_operation
Mac drivers handle struct scopes incorrectly: 403957
Applied Workarounds: regenerate_struct_names
glGenerateMipmap fails if the zero texture level is not set on some Mac drivers: 560499
Applied Workarounds: set_zero_level_before_generating_mipmap
Pack parameters work incorrectly with pack buffer bound: 563714
Applied Workarounds: pack_parameters_workaround_with_pack_buffer
Alignment works incorrectly with unpack buffer bound: 563714
Applied Workarounds: unpack_alignment_workaround_with_unpack_buffer
copyTexImage2D fails when reading from IOSurface on multiple GPU types.: 581777
Applied Workarounds: use_intermediary_for_copy_texture_image
glGetFragData{Location|Index} works incorrectly on Max: 638340
Applied Workarounds: get_frag_data_info_bug
Decode and encode before generateMipmap for srgb format textures on macosx: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmap
Insert statements to reference all members in unused std140/shared blocks on Mac: 618464
Applied Workarounds: use_unused_standard_shared_blocks
adjust src/dst region if blitting pixels outside framebuffer on Mac: 644740
Applied Workarounds: adjust_src_dst_region_for_blitframebuffer
Mac driver GL 4.1 requires invariant and centroid to match between shaders: 639760, 641129
Applied Workarounds: remove_invariant_and_centroid_for_essl3
Disable KHR_blend_equation_advanced until cc shaders are updated: 661715
Applied Workarounds: disable(GL_KHR_blend_equation_advanced), disable(GL_KHR_blend_equation_advanced_coherent)
Switching framebuffers without a flush can lead to crashes on Intel 9th Generation GPU Macs.: 783979
Applied Workarounds: flush_on_framebuffer_change
Expose WebGL's disjoint_timer_query extensions on platforms with site isolation: 808744, 870491
Applied Workarounds: enable_webgl_timer_query_extensions
Shader variable initialization in a loop caused perf regression on Mac Intel.: 809422
Applied Workarounds: dont_use_loops_to_initialize_variables
glFlush error on Mac: 841755
Applied Workarounds: disable_2d_canvas_auto_flush
Clamp texture's BASE_LEVEL/MAX_LEVEL for GenerateMipmap: 913301
Applied Workarounds: clamp_texture_base_level_and_max_level
Remove dynamic indexing for swizzled vectors on Mac: 709351
Applied Workarounds: remove_dynamic_indexing_of_swizzled_vector
Always assume float formats are renderable on Mac AMD: 1127387
Applied Workarounds: force_enable_color_buffer_float
ANGLE Features
allow_compressed_formats (Frontend workarounds): Enabled: true
Allow compressed formats
disable_anisotropic_filtering (Frontend workarounds): Disabled
Disable support for anisotropic filtering
disable_program_binary (Frontend features) anglebug:5007: Disabled: IsPowerVrRogue(functions)
Disable support for GL_OES_get_program_binary
disable_program_caching_for_transform_feedback (Frontend workarounds): Disabled: IsAndroid() && isQualcomm
On some GPUs, program binaries don't contain transform feedback varyings
enableCompressingPipelineCacheInThreadPool (Frontend workarounds) anglebug:4722: Disabled: false
Enable compressing pipeline cache in thread pool.
enableProgramBinaryForCapture (Frontend features) anglebug:5658: Disabled
Even if FrameCapture is enabled, enable GL_OES_get_program_binary
enable_capture_limits (Frontend features) anglebug:5750: Disabled
Set the context limits like frame capturing was enabled
forceInitShaderVariables (Frontend features): Disabled
Force-enable shader variable initialization
forceRobustResourceInit (Frontend features) anglebug:6041: Disabled
Force-enable robust resource init
lose_context_on_out_of_memory (Frontend workarounds): Enabled: true
Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error occurs
scalarize_vec_and_mat_constructor_args (Frontend workarounds) 1165751: Disabled: false
Always rewrite vec/mat constructors to be consistent
add_and_true_to_loop_condition (OpenGL workarounds): Disabled: IsApple() && isIntel
Calculation of loop conditions in for and while loop has bug
adjust_src_dst_region_for_blitframebuffer (OpenGL workarounds) 830046: Disabled: IsLinux() || (IsAndroid() && isNvidia) || (IsWindows() && isNvidia) || (IsApple() && functions->standard == STANDARD_GL_ES)
Many platforms have issues with blitFramebuffer when the parameters are large.
allow_clear_for_robust_resource_init (OpenGL workarounds) 848952: Enabled: 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.
allow_etc_formats (OpenGL workarounds): Disabled: isIntel && !IsSandyBridge(device) && !IsIvyBridge(device) && !IsHaswell(device)
Enable ETC2/EAC on desktop OpenGL
always_call_use_program_after_link (OpenGL workarounds) 110263: Enabled: true
Always call useProgram after a successful link to avoid a driver bug
always_unbind_framebuffer_texture_2d (OpenGL workarounds) anglebug:5536: Disabled: isNvidia && (IsWindows() || IsLinux())
Force unbind framebufferTexture2D before binding renderbuffer to work around driver bug.
avoid_1_bit_alpha_texture_formats (OpenGL workarounds): Enabled: functions->standard == STANDARD_GL_DESKTOP && isAMD
Issue with 1-bit alpha framebuffer formats
bind_transform_feedback_buffer_before_bind_buffer_range (OpenGL workarounds) anglebug:5140: Enabled: IsApple()
Bind transform feedback buffers to the generic binding point before calling glBindBufferBase or glBindBufferRange.
chunked_texture_upload (OpenGL workarounds) 1181068: Enabled: IsApple()
Upload texture data in <120kb chunks to work around Mac driver hangs and crashes.
clamp_array_access (OpenGL workarounds) anglebug:2978: Enabled: IsAndroid() || isAMD || !functions->hasExtension("GL_KHR_robust_buffer_access_behavior")
Clamp uniform array access to avoid reading invalid memory.
clamp_frag_depth (OpenGL workarounds): Disabled: isNvidia
gl_FragDepth is not clamped correctly when rendering to a floating point depth buffer
clamp_msc_rate (OpenGL workarounds) 1042393: Disabled: IsLinux() && IsWayland()
Some drivers return bogus values for GetMscRate, so we clamp it to 30Hz
clamp_point_size (OpenGL workarounds): Disabled: IsAndroid() || isNvidia
The point size range reported from the API is inconsistent with the actual behavior
clear_to_zero_or_one_broken (OpenGL workarounds) 710443: Disabled: IsApple() && isIntel && GetMacOSVersion() < OSVersion(10, 12, 6)
Clears when the clear color is all zeros or ones do not work.
clip_src_region_for_blitframebuffer (OpenGL workarounds) 830046: Enabled: IsApple() || (IsLinux() && isAMD)
Issues with blitFramebuffer when the parameters don't match the framebuffer size.
decode_encode_srgb_for_generatemipmap (OpenGL workarounds) anglebug:4646: Enabled: IsApple()
Decode and encode before generateMipmap for srgb format textures.
disable_blend_func_extended (OpenGL workarounds) anglebug:1085: Enabled: isAMD || isIntel
ARB_blend_func_extended does not pass the tests
disable_draw_buffers_indexed (OpenGL workarounds): Disabled: IsWindows() && isAMD
Disable OES_draw_buffers_indexed extension.
disable_gpu_switching_support (OpenGL workarounds) 1091824: Disabled: isDualGPUMacWithNVIDIA
Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.
disable_mutlisampled_render_to_texture (OpenGL workarounds) anglebug:2894: Disabled: isAdreno4xxOnAndroidLessThan51 || isAdreno4xxOnAndroid70 || isAdreno5xxOnAndroidLessThan70 || isAdreno5xxOnAndroid71 || isLinuxVivante
Many drivers have bugs when using GL_EXT_multisampled_render_to_texture
disable_native_parallel_compile (OpenGL workarounds) 1094869: Disabled: isTSANBuild && IsLinux() && isNvidia
Do not use native KHR_parallel_shader_compile even when available.
disable_semaphore_fd (OpenGL workarounds) 1046462: Disabled: IsLinux() && isAMD && isMesa && mesaVersion < (std::array<int, 3>{19, 3, 5})
Disable GL_EXT_semaphore_fd extension
disable_sync_control_support (OpenGL workarounds) 1137851: Disabled: IsLinux() && isIntel && isMesa && mesaVersion[0] == 20
Speculative fix for issues on Linux/Wayland where exposing GLX_OML_sync_control renders Chrome unusable
disable_timestamp_queries (OpenGL workarounds) 811661: Disabled: (IsLinux() && isVMWare) || (IsAndroid() && isNvidia) || (IsAndroid() && GetAndroidSdkLevel() < 27 && IsAdreno5xxOrOlder(functions)) || (IsAndroid() && IsMaliT8xxOrOlder(functions)) || (IsAndroid() && IsMaliG31OrOlder(functions))
Disable GL_EXT_disjoint_timer_query extension
disable_worker_contexts (OpenGL workarounds) 849576: Disabled: (IsWindows() && (isIntel || isAMD)) || (IsLinux() && isNvidia) || IsIOS() || IsAndroid() || IsAndroidEmulator(functions)
Some tests have been seen to fail using worker contexts
do_while_glsl_causes_gpu_hang (OpenGL workarounds) 644669: Disabled: IsApple() && functions->standard == STANDARD_GL_DESKTOP && GetMacOSVersion() < OSVersion(10, 11, 0)
Some GLSL constructs involving do-while loops cause GPU hangs
does_srgb_clears_on_linear_framebuffer_attachments (OpenGL workarounds): Enabled: isIntel || isAMD
Issue clearing framebuffers with linear attachments when GL_FRAMEBUFFER_SRGB is enabled
dont_initialize_uninitialized_locals (OpenGL workarounds) anglebug:2046: Disabled: IsAndroid() && isQualcomm
Initializing uninitialized locals caused odd behavior in a few WebGL 2 tests
dont_relink_programs_in_parallel (OpenGL workarounds) anglebug:3045: Disabled: IsAndroid() || (IsWindows() && isIntel)
Relinking a program in parallel is buggy
dont_use_loops_to_initialize_variables (OpenGL workarounds) 809422: Disabled: (IsAndroid() && isQualcomm) || (isIntel && IsApple())
For loops used to initialize variables hit native GLSL compiler bugs
emulate_abs_int_function (OpenGL workarounds) 642227: Disabled: IsApple() && isIntel
abs(i) where i is an integer returns unexpected result
emulate_atan_2_float (OpenGL workarounds) 672380: Disabled: isNvidia
atan(y, x) may return a wrong answer
emulate_copyteximage2d_from_renderbuffers (OpenGL workarounds) anglebug:4674: Disabled: IsApple() && functions->standard == STANDARD_GL_ES && !(isAMD && IsWindows())
CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.
emulate_immutable_compressed_texture_3d (OpenGL workarounds) 1060012: Disabled: isQualcomm
Use non-immutable texture allocation to work around a driver bug.
emulate_isnan_float (OpenGL workarounds) 650547: Disabled: isIntel && IsApple() && IsSkylake(device) && GetMacOSVersion() < OSVersion(10, 13, 2)
Using isnan() on highp float will get wrong answer
emulate_max_vertex_attrib_stride (OpenGL workarounds) anglebug:1936: Disabled: IsLinux() && functions->standard == STANDARD_GL_DESKTOP && isAMD
Some drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried
emulate_pack_skip_rows_and_pack_skip_pixels (OpenGL workarounds) anglebug:4849: Enabled: IsApple() && (isAMD || isIntel || isNvidia)
GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored in Apple's OpenGL driver.
emulate_primitive_restart_fixed_index (OpenGL workarounds) anglebug:3997: Enabled: 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.
emulate_rgb10 (OpenGL workarounds) 1300575: Enabled: functions->standard == STANDARD_GL_DESKTOP
Emulate RGB10 support using RGB10_A2.
finish_does_not_cause_queries_to_be_available (OpenGL workarounds): Disabled: functions->standard == STANDARD_GL_DESKTOP && isNvidia
glFinish doesn't cause all queries to report available result
flush_before_delete_texture_if_copied_to (OpenGL workarounds) anglebug:4267: Disabled: IsApple() && isIntel
Some drivers track CopyTex{Sub}Image texture dependencies incorrectly. Flush before glDeleteTextures in this case
flush_on_framebuffer_change (OpenGL workarounds) 1181068: Disabled: IsApple() && Has9thGenIntelGPU(systemInfo)
Switching framebuffers without a flush can lead to crashes on Intel 9th Generation GPU Macs.
init_fragment_output_variables (OpenGL workarounds) 1171371: Disabled: IsAdreno42xOr3xx(functions)
No init gl_FragColor causes context lost
initialize_current_vertex_attributes (OpenGL workarounds): Disabled: isNvidia
During initialization, assign the current vertex attributes to the spec-mandated defaults
keep_buffer_shadow_copy (OpenGL workarounds): Disabled: !CanMapBufferForRead(functions)
Maintain a shadow copy of buffer data when the GL API does not permit reading data back.
max_3d_array_texture_size_1024 (OpenGL workarounds) 927470: Disabled: limitMaxTextureSize
Limit max 3d texture size and max array texture layers to 1024 to avoid system hang
max_msaa_sample_count_4 (OpenGL workarounds) 797243: Enabled: IsAndroid() || (IsApple() && (isIntel || isAMD || isNvidia))
Various rendering bugs have been observed when using higher MSAA counts
max_texture_size_limit_4096 (OpenGL workarounds) 927470: Disabled: IsAndroid() || limitMaxTextureSize
Limit max texture size to 4096 to avoid frequent out-of-memory errors
pack_last_row_separately_for_padding_inclusion (OpenGL workarounds) anglebug:1512: Enabled: IsApple() || isNvidia
When uploading textures from an pack buffer, some drivers count an extra row padding
pack_overlapping_rows_separately_pack_buffer (OpenGL workarounds): Disabled: isNvidia
In the case of packing to a pixel pack buffer, pack overlapping rows row by row
pre_add_texel_fetch_offsets (OpenGL workarounds) 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).
promote_packed_formats_to_8_bit_per_channel (OpenGL workarounds) anglebug:5469: Enabled: IsApple() && hasAMD
Packed color formats are buggy on Macs with AMD GPUs
query_counter_bits_generates_errors (OpenGL workarounds) anglebug:3027: Disabled: IsNexus5X(vendor, device)
Drivers generate errors when querying the number of bits in timer queries
read_pixels_using_implementation_color_read_format (OpenGL workarounds) anglebug: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
reapply_ubo_bindings_after_using_binary_program (OpenGL workarounds) anglebug:1637: Enabled: isAMD || IsAndroid()
Some drivers forget about UBO bindings when using program binaries
regenerate_struct_names (OpenGL workarounds) 403957: Enabled: IsApple()
All Mac drivers do not handle struct scopes correctly. This workaround overwrites a structname with a unique prefix.
remove_dynamic_indexing_of_swizzled_vector (OpenGL workarounds) 709351: Enabled: IsApple() || IsAndroid() || IsWindows()
Dynamic indexing of swizzled l-values doesn't work correctly on various platforms.
remove_invarient_and_centroid_for_essl3 (OpenGL workarounds): Enabled: functions->isAtMostGL(gl::Version(4, 1)) || (functions->standard == STANDARD_GL_DESKTOP && isAMD)
Fix spec difference between GLSL 4.1 or lower and ESSL3
reset_teximage2d_base_level (OpenGL workarounds) 705865: Disabled: IsApple() && isIntel && GetMacOSVersion() >= OSVersion(10, 12, 4)
Reset texture base level before calling glTexImage2D to work around pixel comparison failure.
rewrite_float_unary_minus_operator (OpenGL workarounds) 308366: Disabled: IsApple() && isIntel && GetMacOSVersion() < OSVersion(10, 12, 0)
Using '-<float>' will get wrong answer
rewrite_repeated_assign_to_swizzled (OpenGL workarounds): Disabled: isNvidia
Repeated assignment to swizzled values inside a GLSL user-defined function have incorrect results
rewrite_row_major_matrices (OpenGL workarounds) anglebug:2273: Disabled: false
Rewrite row major matrices in shaders as column major as a driver bug workaround
rgb_dxt1_textures_sample_zero_alpha (OpenGL workarounds) anglebug:3729: Enabled: IsApple()
Sampling BLACK texels from RGB DXT1 textures returns transparent black on Mac.
rgba4_is_not_supported_for_color_rendering (OpenGL workarounds): Disabled: functions->standard == STANDARD_GL_DESKTOP && isIntel
GL_RGBA4 is not color renderable
sanitize_amdgpu_renderer_string (OpenGL workarounds) 1181193: Disabled: IsLinux() && hasAMD
Strip precise kernel and DRM version information from amdgpu renderer strings.
set_primitive_restart_fixed_index_for_draw_arrays (OpenGL workarounds) anglebug: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.
set_zero_level_before_generating_mipmap (OpenGL workarounds): Enabled: IsApple()
glGenerateMipmap fails if the zero texture level is not set on some Mac drivers.
shift_instanced_array_data_with_offset (OpenGL workarounds) 1144207: Disabled: IsApple() && IsIntel(vendor) && !IsHaswell(device)
glDrawArraysInstanced is buggy on certain new Mac Intel GPUs
sync_vertex_arrays_to_default (OpenGL workarounds) anglebug:5577: Disabled: !nativegl::SupportsVertexArrayObjects(functions)
Only use the default VAO because of missing support or driver bugs
unbind_fbo_before_switching_context (OpenGL workarounds) 1181193: Disabled: IsPowerVR(vendor)
Imagination GL drivers are buggy with context switching.
unfold_short_circuits (OpenGL workarounds) anglebug:482: Enabled: IsApple()
Mac incorrectly executes both sides of && and || expressions when they should short-circuit.
unpack_last_row_separately_for_padding_inclusion (OpenGL workarounds) anglebug:1512: Enabled: IsApple() || isNvidia
When uploading textures from an unpack buffer, some drivers count an extra row padding
unpack_overlapping_rows_separately_unpack_buffer (OpenGL workarounds): Disabled: isNvidia
In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row
unsized_srgb_read_pixels_doesnt_transform (OpenGL workarounds) 550292: Disabled: IsAndroid() && isQualcomm
Drivers returning raw sRGB values instead of linearized values when calling glReadPixels on unsized sRGB texture formats
use_unused_blocks_with_standard_or_shared_layout (OpenGL workarounds): Enabled: (IsApple() && functions->standard == STANDARD_GL_DESKTOP) || (IsLinux() && isAMD)
Unused std140 or shared uniform blocks will be treated as inactive
vertex_id_does_not_include_base_vertex (OpenGL workarounds): Enabled: IsApple() && isAMD
gl_VertexID in GLSL vertex shader doesn't include base vertex value
DAWN Info

<Discrete GPU> Metal backend - AMD Radeon Pro 5500M
[Default Toggle Names]
always_resolve_into_zero_level_and_layer: https://crbug.com/dawn/56: When the resolve target is a texture view that is created on the non-zero level or layer of a texture, we first resolve into a temporarily 2D texture with only one mipmap level and one array layer, and copy the result of MSAA resolve into the true resolve target. This workaround is enabled by default on the Metal drivers that have bugs when setting non-zero resolveLevel or resolveSlice.
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.
metal_enable_vertex_pulling: https://crbug.com/dawn/480: Uses vertex pulling to protect out-of-bounds reads on Metal
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
[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
depth-clamping
depth24unorm-stencil8
depth32float-stencil8
dawn-internal-usages
multiplanar-formats
dawn-native

<Integrated GPU> Metal backend - Intel(R) UHD Graphics 630
[Default Toggle Names]
always_resolve_into_zero_level_and_layer: https://crbug.com/dawn/56: When the resolve target is a texture view that is created on the non-zero level or layer of a texture, we first resolve into a temporarily 2D texture with only one mipmap level and one array layer, and copy the result of MSAA resolve into the true resolve target. This workaround is enabled by default on the Metal drivers that have bugs when setting non-zero resolveLevel or resolveSlice.
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.
metal_use_shared_mode_for_counter_sample_buffer: https://crbug.com/dawn/434: The query set on Metal need to create MTLCounterSampleBuffer which storage mode must be either MTLStorageModeShared or MTLStorageModePrivate. But the private mode does not work properly on Intel platforms. The workaround is use shared mode instead.
metal_enable_vertex_pulling: https://crbug.com/dawn/480: Uses vertex pulling to protect out-of-bounds reads on Metal
disallow_unsafe_apis: http://crbug.com/1138528: Produces validation errors on API entry points or parameter combinations that aren't considered secure yet.
disable_r8_rg8_mipmaps: https://crbug.com/dawn/1071: Disables mipmaps for r8unorm and rg8unorm textures, which are known on some drivers to not clear correctly.
use_dummy_fragment_in_vertex_only_pipeline: https://crbug.com/dawn/136: Use a dummy empty fragment shader in vertex only render pipeline. This toggle must be enabled for OpenGL ES backend, and serves as a workaround by default enabled on some Metal devices with Intel GPU to ensure the depth result is correct.
[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
depth-clamping
depth32float-stencil8
dawn-internal-usages
multiplanar-formats
dawn-native
Version Information
Data exported	2022-06-03T10:43:24.765Z
Chrome version	Chrome/102.0.5005.61
Operating system	Mac OS X 11.6.0
Software rendering list URL	https://chromium.googlesource.com/chromium/src/+/0e59bcc00cc4985ce39ad31c150065f159d95ad3/gpu/config/software_rendering_list.json
Driver bug list URL	https://chromium.googlesource.com/chromium/src/+/0e59bcc00cc4985ce39ad31c150065f159d95ad3/gpu/config/gpu_driver_bug_list.json
ANGLE commit id	6661eb4900da
2D graphics backend	Skia/102 3338e90707323d2cd3a150276acb9f39933deee2
Command Line	/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --flag-switches-begin --flag-switches-end
Driver Information
Initialization time	383
In-process GPU	false
Passthrough Command Decoder	true
Sandboxed	true
GPU0	VENDOR= 0x1002, DEVICE=0x7340 *ACTIVE*
GPU1	VENDOR= 0x8086, DEVICE=0x3e9b
Optimus	false
AMD switchable	true
Driver vendor	ATI
Driver version	4.6.20
GPU CUDA compute capability major version	0
Pixel shader version	1.00
Vertex shader version	1.00
Max. MSAA samples	4
Machine model name	MacBookPro
Machine model version	16.1
GL_VENDOR	Google Inc. (ATI Technologies Inc.)
GL_RENDERER	ANGLE (ATI Technologies Inc., AMD Radeon Pro 5500M OpenGL Engine, OpenGL 4.1 ATI-4.6.20)
GL_VERSION	OpenGL ES 2.0.0 (ANGLE 2.1.18359 git hash: 6661eb4900da)
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_memory_size GL_ANGLE_multi_draw 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_blend_minmax GL_EXT_color_buffer_half_float GL_EXT_debug_label GL_EXT_debug_marker 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_multi_draw_indirect GL_EXT_multisample_compatibility GL_EXT_occlusion_query_boolean GL_EXT_read_format_bgra GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_shader_texture_lod GL_EXT_shadow_samplers 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_rg 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_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_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_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_texture_stencil8 GL_OES_vertex_array_object
Disabled Extensions	GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Disabled WebGL Extensions	
Window system binding vendor	
Window system binding version	
Window system binding extensions	
Direct rendering version	unknown
Reset notification strategy	0x0000
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, P010: not supported
Compositor Information
Tile Update Mode	Zero-copy
Partial Raster	Enabled
GpuMemoryBuffers Status
R_8	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
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	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
BGRX_8888	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
BGRA_1010102	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
RGBA_1010102	Software only
BGRA_8888	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
RGBA_F16	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
YVU_420	Software only
YUV_420_BIPLANAR	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
P010	GPU_READ, SCANOUT, SCANOUT_CPU_READ_WRITE, GPU_READ_CPU_READ_WRITE, SCANOUT_VEA_CPU_READ, SCANOUT_FRONT_RENDERING
Display(s) Information
Info	Display[69734662] bounds=[0,0 1792x1120], workarea=[0,0 1792x1120], scale=2, rotation=0, panel_rotation=0 internal.
Color space (SDR)	{primaries_d50_referred: [[0.6818, 0.3196], [0.2846, 0.6747], [0.1562, 0.0554]], transfer:0.0777*x + 0.0000 if x < 0.0450 else (0.9495*x + 0.0495)**2.3955 + 0.0003, matrix:RGB, range:FULL}
Buffer format (SDR)	RGBA_8888
Color space (HDR)	{primaries:BT709, transfer:SRGB_HDR, matrix:RGB, range:FULL}
Buffer format (HDR)	RGBA_F16
SDR white level in nits	100
HDR relative maximum luminance	1.0625
Bits per color component	10
Bits per pixel	30
Refresh Rate in Hz	59
Info	Display[188943067] bounds=[1792,-54 1920x1080], workarea=[1792,-54 1920x1080], scale=1, rotation=0, panel_rotation=0 external.
Color space (all)	{primaries_d50_referred: [[0.6517, 0.3364], [0.3465, 0.6056], [0.1509, 0.0603]], transfer:BT709_APPLE, matrix:RGB, range:FULL}
Buffer format (all)	RGBA_8888
SDR white level in nits	100
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 extended	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
Decode vp9 profile2	16x16 to 4096x4096 pixels
Encoding	
Encode h264 baseline	0x0 to 4096x2160 pixels, and/or 30.000 fps
Encode h264 main	0x0 to 4096x2160 pixels, and/or 30.000 fps
Encode h264 high	0x0 to 4096x2160 pixels, and/or 30.000 fps
Vulkan Information
Device Performance Information
Log Messages
[8059:259:0603/101734.361391:ERROR:shared_image_manager.cc(277)] : SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[8059:259:0603/101734.361488:ERROR:skia_output_device_buffer_queue.cc(354)] : Invalid mailbox.
[8059:259:0603/101734.361502:ERROR:shared_image_manager.cc(277)] : SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.

Does updating macOS to the latest version solve the issue?

I can understand if you don’t want to test this since a OS upgrade can be problematic for various reasons. However, if this issue is in some way related to the GPU driver, only a OS upgrade is going to fix it.

Alternatively, you can try if using Chrome Canary fixes the issue.

@Mugen87 Thanks for all your help man. I’m worry about the users who will access the final public version of the project. I will try to find a workaround maybe identify something (webgl context properties?) problem programatically and fallback to alpha.

By the way, it also happens in Safari with the same OS/Hardware configuration.

Cheers, J!

Update: Testing with various Chrome versions and deep write problem only happen in versions >= 100

Hi Still seeing the same depth test/write problem. Wondering if this is a chromium problem and if is possible to do a workaround in three. Any ideas?

You can see a video here: Banding effect with transmission property - #3 by JuanP

Hey @JuanP I had the same Problem and found a workaround for transmission since it doesnt work with mac os you can simply use a png with no color and a low opacity then set metalic to 1 and roughness to 0 to get similar results as transmission. Hope it helps. :slight_smile: