=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Add initial checks for feature levels 12_0+.
Alexandre Julliard
julliard at winehq.org
Wed Jun 5 15:56:23 CDT 2019
Module: vkd3d
Branch: master
Commit: 068851b159db40209b78e78bbebbde93ec6596af
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=068851b159db40209b78e78bbebbde93ec6596af
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Wed Jun 5 13:02:24 2019 +0200
vkd3d: Add initial checks for feature levels 12_0+.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
libs/vkd3d/device.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 06b5821..a9610ff 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1090,7 +1090,8 @@ static void vkd3d_trace_physical_device_features(const VkPhysicalDeviceFeatures2
}
static void vkd3d_init_feature_level(struct vkd3d_vulkan_info *vk_info,
- const VkPhysicalDeviceFeatures *features)
+ const VkPhysicalDeviceFeatures *features,
+ const D3D12_FEATURE_DATA_D3D12_OPTIONS *d3d12_options)
{
bool have_11_0 = true;
@@ -1158,12 +1159,24 @@ static void vkd3d_init_feature_level(struct vkd3d_vulkan_info *vk_info,
vk_info->max_feature_level = D3D_FEATURE_LEVEL_11_0;
if (have_11_0
- && features->logicOp
+ && d3d12_options->OutputMergerLogicOp
&& features->vertexPipelineStoresAndAtomics
&& vk_info->device_limits.maxPerStageDescriptorStorageBuffers >= D3D12_UAV_SLOT_COUNT
&& vk_info->device_limits.maxPerStageDescriptorStorageImages >= D3D12_UAV_SLOT_COUNT)
vk_info->max_feature_level = D3D_FEATURE_LEVEL_11_1;
+ /* TODO: MinMaxFiltering */
+ if (vk_info->max_feature_level >= D3D_FEATURE_LEVEL_11_1
+ && d3d12_options->TiledResourcesTier >= D3D12_TILED_RESOURCES_TIER_2
+ && d3d12_options->ResourceBindingTier >= D3D12_RESOURCE_BINDING_TIER_2
+ && d3d12_options->TypedUAVLoadAdditionalFormats)
+ vk_info->max_feature_level = D3D_FEATURE_LEVEL_12_0;
+
+ if (vk_info->max_feature_level >= D3D_FEATURE_LEVEL_12_0
+ && d3d12_options->ROVsSupported
+ && d3d12_options->ConservativeRasterizationTier >= D3D12_CONSERVATIVE_RASTERIZATION_TIER_1)
+ vk_info->max_feature_level = D3D_FEATURE_LEVEL_12_1;
+
TRACE("Max feature level: %#x.\n", vk_info->max_feature_level);
}
@@ -1333,7 +1346,7 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
vkd3d_free(vk_extensions);
- vkd3d_init_feature_level(vulkan_info, features);
+ vkd3d_init_feature_level(vulkan_info, features, &device->feature_options);
if (vulkan_info->max_feature_level < create_info->minimum_feature_level)
{
WARN("Feature level %#x is not supported.\n", create_info->minimum_feature_level);
More information about the wine-cvs
mailing list