gfx-rs / wgpu

A cross-platform, safe, pure-Rust graphics API.
https://wgpu.rs
Apache License 2.0
11.5k stars 857 forks source link

wgpu 0.19.3, bevy 0.13.1 (branch): GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported #5344

Closed flba-eb closed 2 months ago

flba-eb commented 4 months ago

Description Using Bevy, example 3d_shapes.rs, I'm trying to get something in 3D running on a Adreno 640 on a Blackberry QNX (Neutrino) operating system. 2D works fine, but 3D always panics at startup (shader compilation).

The bugfix #5171 is included -- I was hoping it fixes my issue as well. Maybe @cmrschwarz has an idea how I can help working around this issue, or provide more information to find out whats going wrong?

Any hints how to tackle or work around this issue would be much appreciated.

Repro steps Run application

Expected vs observed behavior No panic

Extra materials

2024-03-05T15:32:22.323066Z  INFO bevy_winit::system: Creating new window "App" (0v1)
2024-03-05T15:32:22.371066Z  INFO bevy_render::renderer: AdapterInfo { name: "Adreno (TM) 640", vendor: 20803, device: 0, device_type: IntegratedGpu, driver: "", driver_info: "", backend: Gl }
2024-03-05T15:32:22.771066Z  WARN bevy_app: bevy_pbr::ssao: ScreenSpaceAmbientOcclusionPlugin not loaded. GPU lacks support: TextureFormat::R16Float does not support TextureUsages::STORAGE_BINDING.
2024-03-05T15:32:22.774066Z  WARN bevy_app: log: Unhandled screen event type: NONE    
E/Adreno-SC (0): <CPPShInfoLogMsg:760>: GLSL line 3: Error: extension 'GL_EXT_texture_shadow_lod' is not supported 
2024-03-05T15:32:23.428066Z ERROR system{name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"}: log:  Shader compilation failed: ERROR: 0:3: '' :     GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported
ERROR: 0:474: 'textureLod' : no matching overloaded function found 
ERROR: 0:571: 'textureLod' : no matching overloaded function found 
ERROR: 3 compilation errors.  No code generated.

2024-03-05T15:32:23.429066Z ERROR system{name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"}: log: Device::create_render_pipeline error: Internal error in ShaderStages(FRAGMENT) shader: ERROR: 0:3: '' :     GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported
ERROR: 0:474: 'textureLod' : no matching overloaded function found 
ERROR: 0:571: 'textureLod' : no matching overloaded function found 
ERROR: 3 compilation errors.  No code generated.

2024-03-05T15:32:23.429066Z ERROR system{name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"}: log: Shader translation error for stage ShaderStages(FRAGMENT): ERROR: 0:3: '' :     GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported
ERROR: 0:474: 'textureLod' : no matching overloaded function found 
ERROR: 0:571: 'textureLod' : no matching overloaded function found 
ERROR: 3 compilation errors.  No code generated.

2024-03-05T15:32:23.429066Z ERROR system{name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"}: log: Please report it to https://github.com/gfx-rs/wgpu    
2024-03-05T15:32:23.429066Z ERROR system{name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"}: log: Handling wgpu errors as fatal by default    
   0: bevy_ecs::system::function_system::system
           with name="bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines"
             at /home/flba/src/rust-libs/bevy/crates/bevy_ecs/src/system/function_system.rs:47
thread 'main' panicked at /home/flba/src/rust-libs/wgpu/wgpu/src/backend/wgpu_core.rs:3006:5:
wgpu error: Validation Error

Caused by:
    In Device::create_render_pipeline
      note: label = `pbr_opaque_mesh_pipeline`
    Internal error in ShaderStages(FRAGMENT) shader: ERROR: 0:3: '' :     GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported
ERROR: 0:474: 'textureLod' : no matching overloaded function found 
ERROR: 0:571: 'textureLod' : no matching overloaded function found 
ERROR: 3 compilation errors.  No code generated.

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Encountered a panic in system `bevy_core_pipeline::upscaling::prepare_view_upscaling_pipelines`!
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
2024-03-05T15:32:23.637066Z  WARN bevy_app:winit event_handler:update:sub app{name=RenderApp}: bevy_ecs::system::commands::command_queue: CommandQueue has un-applied commands being dropped.
ERROR: 0:3: '' :     GLSL error: extension 'GL_EXT_texture_shadow_lod' is not supported
ERROR: 0:474: 'textureLod' : no matching overloaded function found 
ERROR: 0:571: 'textureLod' : no matching overloaded function found 
ERROR: 3 compilation errors.  No code generated.

Platform OS: Blackberry QNX (Neutrino) 7.1 GPU: Adreno (TM) 640

Information about your OS, version of wgpu, your tech stack, etc. Bevy 0.13.1 (not yet released, f4df ), app code: example 3d_shapes.rs wgpu: 9f505e730fa4ef62c040aa3f67e730ab2059a1cf plus small changes to support QNX

flba-eb commented 4 months ago

Some debug logs showing the features and extensions supported by the hardware:

2024-03-07T08:02:04.498000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log: Client extensions: []    
2024-03-07T08:02:04.498000Z  WARN Global::new:Init OpenGL (EGL) Backend: log: EGL_MESA_platform_surfaceless not available. Using default platform    
2024-03-07T08:02:04.510000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log: Display vendor "Qualcomm Inc.", version (1, 5)    
2024-03-07T08:02:04.510000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log: Display extensions: [
    "EGL_KHR_image",
    "EGL_KHR_image_base",
    "EGL_QCOM_create_image",
    "EGL_KHR_lock_surface",
    "EGL_KHR_lock_surface2",
    "EGL_KHR_lock_surface3",
    "EGL_KHR_gl_texture_2D_image",
    "EGL_KHR_gl_texture_cubemap_image",
    "EGL_KHR_gl_texture_3D_image",
    "EGL_KHR_gl_renderbuffer_image",
    "EGL_ANDROID_blob_cache",
    "EGL_KHR_create_context",
    "EGL_KHR_surfaceless_context",
    "EGL_KHR_create_context_no_error",
    "EGL_KHR_get_all_proc_addresses",
    "EGL_QCOM_lock_image2",
    "EGL_EXT_protected_content",
    "EGL_KHR_no_config_context",
    "EGL_EXT_surface_SMPTE2086_metadata",
    "EGL_EXT_create_context_robustness",
    "EGL_EXT_yuv_surface",
    "EGL_IMG_context_priority",
    "EGL_QNX_api_trace",
]    
2024-03-07T08:02:04.510000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log:   EGL surface: +srgb    
2024-03-07T08:02:04.511000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log:   Trying native-render    
2024-03-07T08:02:04.512000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log:   EGL context: +debug    
2024-03-07T08:02:04.512000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log:   EGL context: +robust access    
2024-03-07T08:02:04.518000Z DEBUG Global::new:Init OpenGL (EGL) Backend: log:   EGL context: +surfaceless    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Max label length: 256    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Enabling GLES debug output    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Vendor: Qualcomm    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Renderer: Adreno (TM) 640    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Version: OpenGL ES 3.2     
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: SL version: OpenGL ES GLSL ES 3.20    
2024-03-07T08:02:04.522000Z DEBUG Instance::request_adapter: log: Supported GL Extensions: {
    "GL_QCOM_texture_foveated_subsampled_layout",
    "GL_EXT_robustness",
    "GL_OES_EGL_image_external_essl3",
    "GL_OES_EGL_image",
    "GL_EXT_clip_cull_distance",
    "GL_KHR_debug",
    "GL_EXT_memory_object",
    "GL_OES_rgb8_rgba8",
    "GL_OES_vertex_half_float",
    "GL_OES_depth_texture_cube_map",
    "GL_OES_texture_3D",
    "GL_OES_texture_stencil8",
    "GL_QCOM_YUV_texture_gather",
    "GL_OES_texture_half_float",
    "GL_EXT_tessellation_shader",
    "GL_OES_get_program_binary",
    "GL_KHR_texture_compression_astc_ldr",
    "GL_EXT_texture_border_clamp",
    "GL_KHR_robust_buffer_access_behavior",
    "GL_EXT_EGL_image_array",
    "GL_EXT_texture_filter_anisotropic",
    "GL_OES_sample_variables",
    "GL_OES_sample_shading",
    "GL_OVR_multiview",
    "GL_OES_texture_float",
    "GL_EXT_multisampled_render_to_texture2",
    "GL_KHR_no_error",
    "GL_EXT_texture_cube_map_array",
    "GL_EXT_color_buffer_float",
    "GL_EXT_disjoint_timer_query",
    "GL_EXT_blit_framebuffer_params",
    "GL_NV_shader_noperspective_interpolation",
    "GL_OES_standard_derivatives",
    "GL_EXT_texture_format_BGRA8888",
    "GL_EXT_texture_sRGB_R8",
    "GL_EXT_blend_func_extended",
    "GL_OES_texture_view",
    "GL_QCOM_motion_estimation",
    "GL_EXT_debug_label",
    "GL_EXT_sRGB",
    "GL_OES_texture_float_linear",
    "GL_EXT_gpu_shader5",
    "GL_EXT_buffer_storage",
    "GL_OES_packed_depth_stencil",
    "GL_EXT_texture_format_sRGB_override",
    "GL_QCOM_tiled_rendering",
    "GL_EXT_geometry_shader",
    "GL_OES_texture_npot",
    "GL_OES_texture_storage_multisample_2d_array",
    "GL_OES_compressed_ETC1_RGB8_texture",
    "GL_KHR_blend_equation_advanced",
    "GL_KHR_blend_equation_advanced_coherent",
    "GL_KHR_texture_compression_astc_hdr",
    "GL_OES_depth24",
    "GL_ANDROID_extension_pack_es31a",
    "GL_QCOM_shader_framebuffer_fetch_noncoherent",
    "GL_EXT_YUV_target",
    "GL_EXT_read_format_bgra",
    "GL_EXT_texture_norm16",
    "GL_QCOM_shader_framebuffer_fetch_rate",
    "GL_EXT_primitive_bounding_box",
    "GL_OES_vertex_array_object",
    "GL_OES_framebuffer_object",
    "GL_EXT_texture_type_2_10_10_10_REV",
    "GL_EXT_draw_buffers_indexed",
    "GL_EXT_sRGB_write_control",
    "GL_EXT_protected_textures",
    "GL_EXT_debug_marker",
    "GL_QCOM_texture_foveated",
    "GL_EXT_memory_object_fd",
    "GL_OES_EGL_sync",
    "GL_OES_element_index_uint",
    "GL_EXT_copy_image",
    "GL_OES_shader_multisample_interpolation",
    "GL_OVR_multiview_multisampled_render_to_texture",
    "GL_OES_depth_texture",
    "GL_EXT_texture_sRGB_decode",
    "GL_EXT_color_buffer_half_float",
    "GL_EXT_EGL_image_external_wrap_modes",
    "GL_OVR_multiview2",
    "GL_OES_shader_image_atomic",
    "GL_EXT_shader_non_constant_global_initializers",
    "GL_EXT_EGL_image_storage",
    "GL_EXT_shader_io_blocks",
    "GL_EXT_clip_control",
    "GL_EXT_external_buffer",
    "GL_OES_texture_compression_astc",
    "GL_OES_texture_half_float_linear",
    "GL_EXT_multisampled_render_to_texture",
    "GL_OES_EGL_image_external",
    "GL_EXT_texture_buffer",
    "GL_AMD_compressed_ATC_texture",
    "GL_EXT_shader_framebuffer_fetch",
    "GL_EXT_discard_framebuffer",
    "GL_EXT_fragment_invocation_density",
    "GL_QCOM_alpha_test",
    "GL_OES_surfaceless_context",
    "GL_QCOM_validate_shader_binary",
    "GL_ARM_shader_framebuffer_fetch_depth_stencil",
}    
2024-03-07T08:02:04.522000Z  INFO Instance::request_adapter: log: Adapter Gl AdapterInfo { name: "Adreno (TM) 640", vendor: 20803, device: 0, device_type: IntegratedGpu, driver: "", driver_info: "", backend: Gl }    
2024-03-07T08:02:04.522000Z  INFO bevy_render::renderer: AdapterInfo { name: "Adreno (TM) 640", vendor: 20803, device: 0, device_type: IntegratedGpu, driver: "", driver_info: "", backend: Gl }
2024-03-07T08:02:04.556000Z DEBUG bevy_render: Configured wgpu adapter Limits: Limits {
    max_texture_dimension_1d: 16384,
    max_texture_dimension_2d: 16384,
    max_texture_dimension_3d: 2048,
    max_texture_array_layers: 2048,
    max_bind_groups: 8,
    max_bindings_per_bind_group: 65535,
    max_dynamic_uniform_buffers_per_pipeline_layout: 14,
    max_dynamic_storage_buffers_per_pipeline_layout: 4,
    max_sampled_textures_per_shader_stage: 16,
    max_samplers_per_shader_stage: 16,
    max_storage_buffers_per_shader_stage: 4,
    max_storage_textures_per_shader_stage: 4,
    max_uniform_buffers_per_shader_stage: 14,
    max_uniform_buffer_binding_size: 65536,
    max_storage_buffer_binding_size: 536870912,
    max_vertex_buffers: 16,
    max_buffer_size: 2147483647,
    max_vertex_attributes: 16,
    max_vertex_buffer_array_stride: 2147483647,
    min_uniform_buffer_offset_alignment: 32,
    min_storage_buffer_offset_alignment: 64,
    max_inter_stage_shader_components: 124,
    max_compute_workgroup_storage_size: 32768,
    max_compute_invocations_per_workgroup: 1024,
    max_compute_workgroup_size_x: 1024,
    max_compute_workgroup_size_y: 1024,
    max_compute_workgroup_size_z: 64,
    max_compute_workgroups_per_dimension: 65535,
    max_push_constant_size: 256,
    max_non_sampler_bindings: 4294967295,
}
2024-03-07T08:02:04.556000Z DEBUG bevy_render: Configured wgpu adapter Features: Features(
    FLOAT32_FILTERABLE | TEXTURE_COMPRESSION_ETC2 | TEXTURE_COMPRESSION_ASTC | TEXTURE_COMPRESSION_ASTC_HDR | TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES | PUSH_CONSTANTS | ADDRESS_MODE_CLAMP_TO_ZERO | ADDRESS_MODE_CLAMP_TO_BORDER | VERTEX_WRITABLE_STORAGE | CLEAR_TEXTURE | MULTIVIEW | SHADER_UNUSED_VERTEX_OUTPUT | SHADER_PRIMITIVE_INDEX | SHADER_EARLY_DEPTH_TEST | DUAL_SOURCE_BLENDING,
)
teoxoy commented 4 months ago

I don't think we can work around the device not having the GL_EXT_texture_shadow_lod extension when the shader requires it. https://github.com/gfx-rs/wgpu/pull/5171 made it so that we require the extension when necessary (when there are no workarounds available).

We should add a downlevel flag for this to make it more obvious that this functionality is not present.

cc @cmrschwarz

flba-eb commented 2 months ago

Closed issue as caused by the used shader and cannot be resolved in wgpu.