Józef Kucia : vkd3d: Add initial checks for feature levels 12_0+.
Module: vkd3d Branch: master Commit: 068851b159db40209b78e78bbebbde93ec6596af URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=068851b159db40209b78e78b... Author: Józef Kucia <jkucia(a)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(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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);
participants (1)
-
Alexandre Julliard