diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index b0235163..ba373dde 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -21,39 +21,12 @@ namespace dxvk { = (devInfo.vk11.subgroupSupportedStages & VK_SHADER_STAGE_COMPUTE_BIT) && (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT); - supportsTypedUavLoadR32 = true; - supportsTypedUavLoadExtended = true; + VkFormatFeatureFlags2 r32Features + = device->getFormatFeatures(VK_FORMAT_R32_SFLOAT).optimal + & device->getFormatFeatures(VK_FORMAT_R32_UINT).optimal + & device->getFormatFeatures(VK_FORMAT_R32_SINT).optimal; - static const std::array, 18> s_typedUavFormats = { - std::make_pair(VK_FORMAT_R32_SFLOAT, false), - std::make_pair(VK_FORMAT_R32_UINT, false), - std::make_pair(VK_FORMAT_R32_SINT, false), - std::make_pair(VK_FORMAT_R32G32B32A32_SFLOAT, true), - std::make_pair(VK_FORMAT_R32G32B32A32_UINT, true), - std::make_pair(VK_FORMAT_R32G32B32A32_SINT, true), - std::make_pair(VK_FORMAT_R16G16B16A16_SFLOAT, true), - std::make_pair(VK_FORMAT_R16G16B16A16_UINT, true), - std::make_pair(VK_FORMAT_R16G16B16A16_SINT, true), - std::make_pair(VK_FORMAT_R8G8B8A8_UNORM, true), - std::make_pair(VK_FORMAT_R8G8B8A8_UINT, true), - std::make_pair(VK_FORMAT_R8G8B8A8_SINT, true), - std::make_pair(VK_FORMAT_R16_SFLOAT, true), - std::make_pair(VK_FORMAT_R16_UINT, true), - std::make_pair(VK_FORMAT_R16_SINT, true), - std::make_pair(VK_FORMAT_R8_UNORM, true), - std::make_pair(VK_FORMAT_R8_UINT, true), - std::make_pair(VK_FORMAT_R8_SINT, true), - }; - - for (const auto& f : s_typedUavFormats) { - DxvkFormatFeatures features = device->getFormatFeatures(f.first); - VkFormatFeatureFlags2 imgFeatures = features.optimal | features.linear; - - if (!(imgFeatures & VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT)) { - supportsTypedUavLoadR32 &= f.second; - supportsTypedUavLoadExtended = false; - } - } + supportsTypedUavLoadR32 = (r32Features & VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT); switch (device->config().useRawSsbo) { case Tristate::Auto: minSsboAlignment = devInfo.core.properties.limits.minStorageBufferOffsetAlignment; break; diff --git a/src/dxbc/dxbc_options.h b/src/dxbc/dxbc_options.h index 336526da..d472b358 100644 --- a/src/dxbc/dxbc_options.h +++ b/src/dxbc/dxbc_options.h @@ -26,7 +26,6 @@ namespace dxvk { /// Determines whether format qualifiers /// on typed UAV loads are required bool supportsTypedUavLoadR32 = false; - bool supportsTypedUavLoadExtended = false; /// Use subgroup operations to reduce the number of /// atomic operations for append/consume buffers.