Module: vkd3d Branch: master Commit: 068851b159db40209b78e78bbebbde93ec6596af URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=068851b159db40209b78e78b...
Author: Józef Kucia jkucia@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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);