radv: advertise VK_EXT_shader_atomic_float
No hw support for float atomic add for buffer and (sparse) images. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6000>
This commit is contained in:
@@ -1340,6 +1340,24 @@ void radv_GetPhysicalDeviceFeatures2(
|
||||
features->robustImageAccess = true;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: {
|
||||
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *features =
|
||||
(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *)ext;
|
||||
features->shaderBufferFloat32Atomics = true;
|
||||
features->shaderBufferFloat32AtomicAdd = false;
|
||||
features->shaderBufferFloat64Atomics = true;
|
||||
features->shaderBufferFloat64AtomicAdd = false;
|
||||
features->shaderSharedFloat32Atomics = true;
|
||||
features->shaderSharedFloat32AtomicAdd = pdevice->rad_info.chip_class >= GFX8 &&
|
||||
(!pdevice->use_llvm || LLVM_VERSION_MAJOR >= 10);
|
||||
features->shaderSharedFloat64Atomics = true;
|
||||
features->shaderSharedFloat64AtomicAdd = false;
|
||||
features->shaderImageFloat32Atomics = true;
|
||||
features->shaderImageFloat32AtomicAdd = false;
|
||||
features->sparseImageFloat32Atomics = false;
|
||||
features->sparseImageFloat32AtomicAdd = false;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@@ -153,6 +153,7 @@ EXTENSIONS = [
|
||||
Extension('VK_EXT_sample_locations', 1, 'device->rad_info.chip_class < GFX10'),
|
||||
Extension('VK_EXT_sampler_filter_minmax', 1, True),
|
||||
Extension('VK_EXT_scalar_block_layout', 1, 'device->rad_info.chip_class >= GFX7'),
|
||||
Extension('VK_EXT_shader_atomic_float', 1, True),
|
||||
Extension('VK_EXT_shader_demote_to_helper_invocation',1, 'LLVM_VERSION_MAJOR >= 9 || !device->use_llvm'),
|
||||
Extension('VK_EXT_shader_viewport_index_layer', 1, True),
|
||||
Extension('VK_EXT_shader_stencil_export', 1, True),
|
||||
|
@@ -749,7 +749,9 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
}
|
||||
|
||||
if (format == VK_FORMAT_R32_UINT || format == VK_FORMAT_R32_SINT) {
|
||||
if (format == VK_FORMAT_R32_UINT ||
|
||||
format == VK_FORMAT_R32_SINT ||
|
||||
format == VK_FORMAT_R32_SFLOAT) {
|
||||
buffer |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
|
@@ -377,6 +377,7 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
.draw_parameters = true,
|
||||
.float_controls = true,
|
||||
.float16 = device->physical_device->rad_info.has_packed_math_16bit,
|
||||
.float32_atomic_add = true,
|
||||
.float64 = true,
|
||||
.geometry_streams = true,
|
||||
.image_ms_array = true,
|
||||
|
Reference in New Issue
Block a user