RTX3000系列GPU无浮点原子Min/Max支持的替代方案咨询
关于Vulkan浮点原子操作的问题
- 我的RTX3000系列GPU不支持
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT特性,想了解是否有部分Intel APU支持该ATOMIC_FLOAT_2特性。 - 我需要一种能够对浮点字段进行原子访问和比较的替代方案。令我困惑的是,GPU架构的原生数据格式为浮点,但该功能并未在整个GPU生态中强制支持,求可行的解决思路。
我曾尝试启用该特性,但原子结构体中的所有字段均返回0(表示不支持),相关Vulkan代码如下:
VkPhysicalDeviceFeatures2 features2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; VkPhysicalDeviceVulkan13Features vulkan_1_3_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan_1_2_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES}; VkPhysicalDeviceVulkan11Features vulkan_1_1_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES}; VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR}; VkPhysicalDeviceRayTracingPipelineFeaturesKHR ray_tracing_pipeline_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR}; VkPhysicalDeviceRayQueryFeaturesKHR ray_query_features = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR}; VkPhysicalDeviceShaderAtomicFloatFeaturesEXT shader_atomic_float_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT}; VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT shader_atomic_float2_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT}; features2.pNext = &vulkan_1_3_features; vulkan_1_3_features.pNext = &vulkan_1_2_features; vulkan_1_2_features.pNext = &vulkan_1_1_features; vulkan_1_1_features.pNext = &acceleration_structure_features; acceleration_structure_features.pNext = &ray_tracing_pipeline_features; ray_tracing_pipeline_features.pNext = &ray_query_features; ray_query_features.pNext = &shader_atomic_float_features; shader_atomic_float_features.pNext = &shader_atomic_float2_features; vkGetPhysicalDeviceFeatures2(context->device.physical_device, &features2);
如果尝试使用该特性,设备会丢失,相关GLSL代码如下:
#version 450 #extension GLSL_EXT_shader_atomic_float2: require ... shared float min_distance; main(){ ... atomicMin(min_distance); }
内容的提问来源于stack exchange,提问作者Jaime Sierra
相关产品推荐
相关产品推荐

