mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
libs/vkd3d: Support D3D12_FEATURE_D3D12_OPTIONS in d3d12_device_CheckFeatureSupport().
This commit is contained in:
@@ -445,6 +445,7 @@ static void vkd3d_init_device_caps(struct vkd3d_instance *instance,
|
|||||||
|
|
||||||
VK_CALL(vkGetPhysicalDeviceProperties(physical_device, &device_properties));
|
VK_CALL(vkGetPhysicalDeviceProperties(physical_device, &device_properties));
|
||||||
vulkan_info->device_limits = device_properties.limits;
|
vulkan_info->device_limits = device_properties.limits;
|
||||||
|
vulkan_info->sparse_properties = device_properties.sparseProperties;
|
||||||
|
|
||||||
if ((vr = VK_CALL(vkEnumerateDeviceExtensionProperties(physical_device, NULL,
|
if ((vr = VK_CALL(vkEnumerateDeviceExtensionProperties(physical_device, NULL,
|
||||||
&count, NULL))) < 0)
|
&count, NULL))) < 0)
|
||||||
@@ -628,6 +629,40 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
|||||||
|
|
||||||
/* Create device */
|
/* Create device */
|
||||||
VK_CALL(vkGetPhysicalDeviceFeatures(physical_device, &device_features));
|
VK_CALL(vkGetPhysicalDeviceFeatures(physical_device, &device_features));
|
||||||
|
device->feature_options.DoublePrecisionFloatShaderOps = device_features.shaderFloat64;
|
||||||
|
device->feature_options.OutputMergerLogicOp = device_features.logicOp;
|
||||||
|
/* SPV_KHR_16bit_storage */
|
||||||
|
device->feature_options.MinPrecisionSupport = D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE;
|
||||||
|
|
||||||
|
if (!device_features.sparseBinding)
|
||||||
|
device->feature_options.TiledResourcesTier = D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED;
|
||||||
|
else if (!device->vk_info.sparse_properties.residencyNonResidentStrict)
|
||||||
|
device->feature_options.TiledResourcesTier = D3D12_TILED_RESOURCES_TIER_1;
|
||||||
|
else if (!device_features.sparseResidencyImage3D)
|
||||||
|
device->feature_options.TiledResourcesTier = D3D12_TILED_RESOURCES_TIER_2;
|
||||||
|
else
|
||||||
|
device->feature_options.TiledResourcesTier = D3D12_TILED_RESOURCES_TIER_3;
|
||||||
|
|
||||||
|
if (device->vk_info.device_limits.maxPerStageDescriptorSamplers <= 16)
|
||||||
|
device->feature_options.ResourceBindingTier = D3D12_RESOURCE_BINDING_TIER_1;
|
||||||
|
else if (device->vk_info.device_limits.maxPerStageDescriptorUniformBuffers <= 14)
|
||||||
|
device->feature_options.ResourceBindingTier = D3D12_RESOURCE_BINDING_TIER_2;
|
||||||
|
else
|
||||||
|
device->feature_options.ResourceBindingTier = D3D12_RESOURCE_BINDING_TIER_3;
|
||||||
|
|
||||||
|
device->feature_options.PSSpecifiedStencilRefSupported = FALSE;
|
||||||
|
device->feature_options.TypedUAVLoadAdditionalFormats = device_features.shaderStorageImageExtendedFormats;
|
||||||
|
/* GL_INTEL_fragment_shader_ordering, no Vulkan equivalent. */
|
||||||
|
device->feature_options.ROVsSupported = FALSE;
|
||||||
|
/* GL_INTEL_conservative_rasterization, no Vulkan equivalent. */
|
||||||
|
device->feature_options.ConservativeRasterizationTier = D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED;
|
||||||
|
device->feature_options.MaxGPUVirtualAddressBitsPerResource = sizeof(D3D12_GPU_VIRTUAL_ADDRESS) * 8;
|
||||||
|
device->feature_options.StandardSwizzle64KBSupported = FALSE;
|
||||||
|
device->feature_options.CrossNodeSharingTier = D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED;
|
||||||
|
device->feature_options.CrossAdapterRowMajorTextureSupported = FALSE;
|
||||||
|
/* SPV_EXT_shader_viewport_index_layer */
|
||||||
|
device->feature_options.VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation = FALSE;
|
||||||
|
device->feature_options.ResourceHeapTier = D3D12_RESOURCE_HEAP_TIER_2;
|
||||||
|
|
||||||
device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||||
device_info.pNext = NULL;
|
device_info.pNext = NULL;
|
||||||
@@ -934,6 +969,21 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device *
|
|||||||
|
|
||||||
switch (feature)
|
switch (feature)
|
||||||
{
|
{
|
||||||
|
case D3D12_FEATURE_D3D12_OPTIONS:
|
||||||
|
{
|
||||||
|
D3D12_FEATURE_DATA_D3D12_OPTIONS *data = feature_data;
|
||||||
|
|
||||||
|
if (feature_data_size != sizeof(*data))
|
||||||
|
{
|
||||||
|
WARN("Invalid size %u.\n", feature_data_size);
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
*data = device->feature_options;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
case D3D12_FEATURE_ARCHITECTURE:
|
case D3D12_FEATURE_ARCHITECTURE:
|
||||||
{
|
{
|
||||||
D3D12_FEATURE_DATA_ARCHITECTURE *data = feature_data;
|
D3D12_FEATURE_DATA_ARCHITECTURE *data = feature_data;
|
||||||
|
@@ -509,6 +509,7 @@ struct vkd3d_vulkan_info
|
|||||||
bool KHR_push_descriptor;
|
bool KHR_push_descriptor;
|
||||||
|
|
||||||
VkPhysicalDeviceLimits device_limits;
|
VkPhysicalDeviceLimits device_limits;
|
||||||
|
VkPhysicalDeviceSparseProperties sparse_properties;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ID3D12Device */
|
/* ID3D12Device */
|
||||||
@@ -534,6 +535,8 @@ struct d3d12_device
|
|||||||
uint32_t copy_queue_timestamp_bits;
|
uint32_t copy_queue_timestamp_bits;
|
||||||
uint32_t compute_queue_timestamp_bits;
|
uint32_t compute_queue_timestamp_bits;
|
||||||
|
|
||||||
|
D3D12_FEATURE_DATA_D3D12_OPTIONS feature_options;
|
||||||
|
|
||||||
struct vkd3d_vulkan_info vk_info;
|
struct vkd3d_vulkan_info vk_info;
|
||||||
|
|
||||||
struct vkd3d_instance vkd3d_instance;
|
struct vkd3d_instance vkd3d_instance;
|
||||||
|
Reference in New Issue
Block a user