mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 04:00:10 +01:00
lavapipe: export VK_KHR_shader_atomic_float
Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18636>
This commit is contained in:
parent
64845cdfed
commit
31695f81c9
3 changed files with 39 additions and 1 deletions
|
|
@ -173,6 +173,8 @@ static const struct vk_device_extension_table lvp_device_extensions_supported =
|
|||
.EXT_sampler_filter_minmax = true,
|
||||
.EXT_scalar_block_layout = true,
|
||||
.EXT_separate_stencil_usage = true,
|
||||
.EXT_shader_atomic_float = true,
|
||||
.EXT_shader_atomic_float2 = true,
|
||||
.EXT_shader_demote_to_helper_invocation= true,
|
||||
.EXT_shader_stencil_export = true,
|
||||
.EXT_shader_subgroup_ballot = true,
|
||||
|
|
@ -979,6 +981,38 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures2(
|
|||
features->graphicsPipelineLibrary = VK_TRUE;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: {
|
||||
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *features = (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *)ext;
|
||||
features->shaderBufferFloat32Atomics = true;
|
||||
features->shaderBufferFloat32AtomicAdd = true;
|
||||
features->shaderBufferFloat64Atomics = false;
|
||||
features->shaderBufferFloat64AtomicAdd = false;
|
||||
features->shaderSharedFloat32Atomics = true;
|
||||
features->shaderSharedFloat32AtomicAdd = true;
|
||||
features->shaderSharedFloat64Atomics = false;
|
||||
features->shaderSharedFloat64AtomicAdd = false;
|
||||
features->shaderImageFloat32Atomics = true;
|
||||
features->shaderImageFloat32AtomicAdd = true;
|
||||
features->sparseImageFloat32Atomics = false;
|
||||
features->sparseImageFloat32AtomicAdd = false;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: {
|
||||
VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *features = (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *)ext;
|
||||
features->shaderBufferFloat16Atomics = false;
|
||||
features->shaderBufferFloat16AtomicAdd = false;
|
||||
features->shaderBufferFloat16AtomicMinMax = false;
|
||||
features->shaderBufferFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
|
||||
features->shaderBufferFloat64AtomicMinMax = false;
|
||||
features->shaderSharedFloat16Atomics = false;
|
||||
features->shaderSharedFloat16AtomicAdd = false;
|
||||
features->shaderSharedFloat16AtomicMinMax = false;
|
||||
features->shaderSharedFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
|
||||
features->shaderSharedFloat64AtomicMinMax = false;
|
||||
features->shaderImageFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
|
||||
features->sparseImageFloat32AtomicMinMax = false;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d
|
|||
features |= VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT;
|
||||
}
|
||||
|
||||
if (pformat == PIPE_FORMAT_R32_UINT || pformat == PIPE_FORMAT_R32_SINT) {
|
||||
if (pformat == PIPE_FORMAT_R32_UINT || pformat == PIPE_FORMAT_R32_SINT || pformat == PIPE_FORMAT_R32_FLOAT) {
|
||||
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
buffer_features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -374,6 +374,10 @@ lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline,
|
|||
.int64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_INT64) == 1),
|
||||
.tessellation = true,
|
||||
.float_controls = true,
|
||||
.float32_atomic_add = true,
|
||||
#if LLVM_VERSION_MAJOR >= 15
|
||||
.float32_atomic_minmax = true,
|
||||
#endif
|
||||
.image_ms_array = true,
|
||||
.image_read_without_format = true,
|
||||
.image_write_without_format = true,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue