From 1e59af159248ceaad49043d9ac573ab691ca46d3 Mon Sep 17 00:00:00 2001 From: cryvosh Date: Thu, 1 May 2025 21:59:32 +0100 Subject: [PATCH 1/2] Fix shaderf16 support on vulkan/nvidia --- wgpu-hal/src/vulkan/adapter.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/wgpu-hal/src/vulkan/adapter.rs b/wgpu-hal/src/vulkan/adapter.rs index 419f8eee50..38e3c78991 100644 --- a/wgpu-hal/src/vulkan/adapter.rs +++ b/wgpu-hal/src/vulkan/adapter.rs @@ -387,12 +387,22 @@ impl PhysicalDeviceFeatures { None }, shader_float16: if requested_features.contains(wgt::Features::SHADER_F16) { + let supported_f16_features = _phd_features.shader_float16.map(|(_, s)| s) + .unwrap_or_default(); + Some(( vk::PhysicalDeviceShaderFloat16Int8Features::default().shader_float16(true), + // Only enable the 16bit storage features that are actually supported by the hardware vk::PhysicalDevice16BitStorageFeatures::default() - .storage_buffer16_bit_access(true) - .storage_input_output16(true) - .uniform_and_storage_buffer16_bit_access(true), + .storage_buffer16_bit_access( + supported_f16_features.storage_buffer16_bit_access != 0 + ) + .uniform_and_storage_buffer16_bit_access( + supported_f16_features.uniform_and_storage_buffer16_bit_access != 0 + ) + .storage_input_output16( + supported_f16_features.storage_input_output16 != 0 + ), )) } else { None @@ -723,7 +733,6 @@ impl PhysicalDeviceFeatures { f16_i8.shader_float16 != 0 && bit16.storage_buffer16_bit_access != 0 && bit16.uniform_and_storage_buffer16_bit_access != 0 - && bit16.storage_input_output16 != 0, ); } From 3e0ee6c40fae5d0f76f1d4448cb19c598c6065e7 Mon Sep 17 00:00:00 2001 From: cryvosh Date: Thu, 1 May 2025 22:16:54 +0100 Subject: [PATCH 2/2] fmt --- wgpu-hal/src/vulkan/adapter.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/wgpu-hal/src/vulkan/adapter.rs b/wgpu-hal/src/vulkan/adapter.rs index 38e3c78991..c4e7319c26 100644 --- a/wgpu-hal/src/vulkan/adapter.rs +++ b/wgpu-hal/src/vulkan/adapter.rs @@ -387,7 +387,9 @@ impl PhysicalDeviceFeatures { None }, shader_float16: if requested_features.contains(wgt::Features::SHADER_F16) { - let supported_f16_features = _phd_features.shader_float16.map(|(_, s)| s) + let supported_f16_features = _phd_features + .shader_float16 + .map(|(_, s)| s) .unwrap_or_default(); Some(( @@ -395,14 +397,12 @@ impl PhysicalDeviceFeatures { // Only enable the 16bit storage features that are actually supported by the hardware vk::PhysicalDevice16BitStorageFeatures::default() .storage_buffer16_bit_access( - supported_f16_features.storage_buffer16_bit_access != 0 + supported_f16_features.storage_buffer16_bit_access != 0, ) .uniform_and_storage_buffer16_bit_access( - supported_f16_features.uniform_and_storage_buffer16_bit_access != 0 + supported_f16_features.uniform_and_storage_buffer16_bit_access != 0, ) - .storage_input_output16( - supported_f16_features.storage_input_output16 != 0 - ), + .storage_input_output16(supported_f16_features.storage_input_output16 != 0), )) } else { None @@ -732,7 +732,7 @@ impl PhysicalDeviceFeatures { F::SHADER_F16, f16_i8.shader_float16 != 0 && bit16.storage_buffer16_bit_access != 0 - && bit16.uniform_and_storage_buffer16_bit_access != 0 + && bit16.uniform_and_storage_buffer16_bit_access != 0, ); }