Mesa (main): dzn: Use core helpers to fill physical device features/properties
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 20 22:53:32 UTC 2022
Module: Mesa
Branch: main
Commit: 6c877cb00f4c5469e78fab73f36478ddfae826c2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c877cb00f4c5469e78fab73f36478ddfae826c2
Author: Boris Brezillon <boris.brezillon at collabora.com>
Date: Mon Apr 4 13:39:19 2022 +0200
dzn: Use core helpers to fill physical device features/properties
The core provide generic helpers to turn Vulkan minor version
features/properties into their KHR counterparts. Let's declare those
core features/properties structs and use those helpers so we get
ready to support newer spec versions without too much pain.
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15911>
---
src/microsoft/vulkan/dzn_device.c | 152 ++++++++++++++++++++++++++++++++++----
1 file changed, 137 insertions(+), 15 deletions(-)
diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c
index d3b12385df3..a5ef670cb69 100644
--- a/src/microsoft/vulkan/dzn_device.c
+++ b/src/microsoft/vulkan/dzn_device.c
@@ -1065,8 +1065,100 @@ dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
.inheritedQueries = false,
};
+ VkPhysicalDeviceVulkan11Features core_1_1 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
+ .storageBuffer16BitAccess = false,
+ .uniformAndStorageBuffer16BitAccess = false,
+ .storagePushConstant16 = false,
+ .storageInputOutput16 = false,
+ .multiview = false,
+ .multiviewGeometryShader = false,
+ .multiviewTessellationShader = false,
+ .variablePointersStorageBuffer = true,
+ .variablePointers = true,
+ .protectedMemory = false,
+ .samplerYcbcrConversion = false,
+ .shaderDrawParameters = false,
+ };
+
+ const VkPhysicalDeviceVulkan12Features core_1_2 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
+ .samplerMirrorClampToEdge = false,
+ .drawIndirectCount = false,
+ .storageBuffer8BitAccess = false,
+ .uniformAndStorageBuffer8BitAccess = false,
+ .storagePushConstant8 = false,
+ .shaderBufferInt64Atomics = false,
+ .shaderSharedInt64Atomics = false,
+ .shaderFloat16 = false,
+ .shaderInt8 = false,
+
+ .descriptorIndexing = false,
+ .shaderInputAttachmentArrayDynamicIndexing = false,
+ .shaderUniformTexelBufferArrayDynamicIndexing = false,
+ .shaderStorageTexelBufferArrayDynamicIndexing = false,
+ .shaderUniformBufferArrayNonUniformIndexing = false,
+ .shaderSampledImageArrayNonUniformIndexing = false,
+ .shaderStorageBufferArrayNonUniformIndexing = false,
+ .shaderStorageImageArrayNonUniformIndexing = false,
+ .shaderInputAttachmentArrayNonUniformIndexing = false,
+ .shaderUniformTexelBufferArrayNonUniformIndexing = false,
+ .shaderStorageTexelBufferArrayNonUniformIndexing = false,
+ .descriptorBindingUniformBufferUpdateAfterBind = false,
+ .descriptorBindingSampledImageUpdateAfterBind = false,
+ .descriptorBindingStorageImageUpdateAfterBind = false,
+ .descriptorBindingStorageBufferUpdateAfterBind = false,
+ .descriptorBindingUniformTexelBufferUpdateAfterBind = false,
+ .descriptorBindingStorageTexelBufferUpdateAfterBind = false,
+ .descriptorBindingUpdateUnusedWhilePending = false,
+ .descriptorBindingPartiallyBound = false,
+ .descriptorBindingVariableDescriptorCount = false,
+ .runtimeDescriptorArray = false,
+
+ .samplerFilterMinmax = false,
+ .scalarBlockLayout = false,
+ .imagelessFramebuffer = false,
+ .uniformBufferStandardLayout = false,
+ .shaderSubgroupExtendedTypes = false,
+ .separateDepthStencilLayouts = false,
+ .hostQueryReset = false,
+ .timelineSemaphore = false,
+ .bufferDeviceAddress = false,
+ .bufferDeviceAddressCaptureReplay = false,
+ .bufferDeviceAddressMultiDevice = false,
+ .vulkanMemoryModel = false,
+ .vulkanMemoryModelDeviceScope = false,
+ .vulkanMemoryModelAvailabilityVisibilityChains = false,
+ .shaderOutputViewportIndex = false,
+ .shaderOutputLayer = false,
+ .subgroupBroadcastDynamicId = false,
+ };
+
+ const VkPhysicalDeviceVulkan13Features core_1_3 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
+ .robustImageAccess = false,
+ .inlineUniformBlock = false,
+ .descriptorBindingInlineUniformBlockUpdateAfterBind = false,
+ .pipelineCreationCacheControl = false,
+ .privateData = true,
+ .shaderDemoteToHelperInvocation = false,
+ .shaderTerminateInvocation = false,
+ .subgroupSizeControl = false,
+ .computeFullSubgroups = false,
+ .synchronization2 = true,
+ .textureCompressionASTC_HDR = false,
+ .shaderZeroInitializeWorkgroupMemory = false,
+ .dynamicRendering = false,
+ .shaderIntegerDotProduct = false,
+ .maintenance4 = false,
+ };
vk_foreach_struct(ext, pFeatures->pNext) {
+ if (vk_get_physical_device_core_1_1_feature_ext(ext, &core_1_1) ||
+ vk_get_physical_device_core_1_2_feature_ext(ext, &core_1_2) ||
+ vk_get_physical_device_core_1_3_feature_ext(ext, &core_1_3))
+ continue;
+
dzn_debug_ignored_stype(ext->sType);
}
}
@@ -1318,25 +1410,55 @@ dzn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
snprintf(pProperties->properties.deviceName,
sizeof(pProperties->properties.deviceName),
"Microsoft Direct3D12 (%S)", desc->Description);
-
memcpy(pProperties->properties.pipelineCacheUUID,
pdevice->pipeline_cache_uuid, VK_UUID_SIZE);
+ VkPhysicalDeviceVulkan11Properties core_1_1 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES,
+ .deviceLUIDValid = true,
+ .pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
+ .maxMultiviewViewCount = 0,
+ .maxMultiviewInstanceIndex = 0,
+ .protectedNoFault = false,
+ /* Maximum number of descriptors in a GPU-visible sampler heap is 2048,
+ * and 1000000 in a CBV/SRV/UAV heap, so let's pick the smallest
+ * limitation factor here. All descriptor sets are merged in a single
+ * heap when descriptor sets are bound to the command buffer, hence the
+ * division by MAX_SETS.
+ */
+ .maxPerSetDescriptors = 2048 / MAX_SETS,
+ /* According to the spec, the maximum D3D12 resource size is
+ * min(max(128MB, 0.25f * (amount of dedicated VRAM)), 2GB),
+ * but the limit actually depends on the max(system_ram, VRAM) not
+ * just the VRAM.
+ */
+ .maxMemoryAllocationSize =
+ CLAMP(MAX2(pdevice->adapter_desc.DedicatedVideoMemory,
+ pdevice->adapter_desc.DedicatedSystemMemory +
+ pdevice->adapter_desc.SharedSystemMemory) / 4,
+ 128ull * 1024 * 1024, 2ull * 1024 * 1024 * 1024),
+ };
+ memcpy(core_1_1.driverUUID, pdevice->driver_uuid, VK_UUID_SIZE);
+ memcpy(core_1_1.deviceUUID, pdevice->device_uuid, VK_UUID_SIZE);
+ memcpy(core_1_1.deviceLUID, &pdevice->adapter_desc.AdapterLuid, VK_LUID_SIZE);
+
+ STATIC_ASSERT(sizeof(pdevice->adapter_desc.AdapterLuid) == sizeof(core_1_1.deviceLUID));
+
+ const VkPhysicalDeviceVulkan12Properties core_1_2 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES,
+ };
+
+ const VkPhysicalDeviceVulkan13Properties core_1_3 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES,
+ };
+
vk_foreach_struct(ext, pProperties->pNext) {
- switch (ext->sType) {
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: {
- VkPhysicalDeviceIDProperties *id_props =
- (VkPhysicalDeviceIDProperties *)ext;
- memcpy(id_props->deviceUUID, pdevice->device_uuid, VK_UUID_SIZE);
- memcpy(id_props->driverUUID, pdevice->driver_uuid, VK_UUID_SIZE);
- /* The LUID is for Windows. */
- id_props->deviceLUIDValid = false;
- break;
- }
- default:
- dzn_debug_ignored_stype(ext->sType);
- break;
- }
+ if (vk_get_physical_device_core_1_1_property_ext(ext, &core_1_1) ||
+ vk_get_physical_device_core_1_2_property_ext(ext, &core_1_2) ||
+ vk_get_physical_device_core_1_3_property_ext(ext, &core_1_3))
+ continue;
+
+ dzn_debug_ignored_stype(ext->sType);
}
}
More information about the mesa-commit
mailing list