diff options
Diffstat (limited to 'lib/mesa/src/vulkan/util/vk_device.c')
-rw-r--r-- | lib/mesa/src/vulkan/util/vk_device.c | 462 |
1 files changed, 3 insertions, 459 deletions
diff --git a/lib/mesa/src/vulkan/util/vk_device.c b/lib/mesa/src/vulkan/util/vk_device.c index e3617507b..cfaebc58d 100644 --- a/lib/mesa/src/vulkan/util/vk_device.c +++ b/lib/mesa/src/vulkan/util/vk_device.c @@ -25,10 +25,7 @@ #include "vk_common_entrypoints.h" #include "vk_instance.h" -#include "vk_log.h" #include "vk_physical_device.h" -#include "vk_queue.h" -#include "vk_util.h" #include "util/hash_table.h" #include "util/ralloc.h" @@ -63,35 +60,21 @@ vk_device_init(struct vk_device *device, } if (idx >= VK_DEVICE_EXTENSION_COUNT) - return vk_errorf(physical_device, VK_ERROR_EXTENSION_NOT_PRESENT, - "%s not supported", - pCreateInfo->ppEnabledExtensionNames[i]); + return VK_ERROR_EXTENSION_NOT_PRESENT; if (!physical_device->supported_extensions.extensions[idx]) - return vk_errorf(physical_device, VK_ERROR_EXTENSION_NOT_PRESENT, - "%s not supported", - pCreateInfo->ppEnabledExtensionNames[i]); + return VK_ERROR_EXTENSION_NOT_PRESENT; #ifdef ANDROID if (!vk_android_allowed_device_extensions.extensions[idx]) - return vk_errorf(physical_device, VK_ERROR_EXTENSION_NOT_PRESENT, - "%s not supported", - pCreateInfo->ppEnabledExtensionNames[i]); + return VK_ERROR_EXTENSION_NOT_PRESENT; #endif device->enabled_extensions.extensions[idx] = true; } - VkResult result = - vk_physical_device_check_device_features(physical_device, - pCreateInfo); - if (result != VK_SUCCESS) - return result; - p_atomic_set(&device->private_data_next_index, 0); - list_inithead(&device->queues); - #ifdef ANDROID mtx_init(&device->swapchain_private_mtx, mtx_plain); device->swapchain_private = NULL; @@ -103,9 +86,6 @@ vk_device_init(struct vk_device *device, void vk_device_finish(UNUSED struct vk_device *device) { - /* Drivers should tear down their own queues */ - assert(list_is_empty(&device->queues)); - #ifdef ANDROID if (device->swapchain_private) { hash_table_foreach(device->swapchain_private, entry) @@ -167,35 +147,6 @@ vk_common_GetDeviceQueue(VkDevice _device, } VKAPI_ATTR void VKAPI_CALL -vk_common_GetDeviceQueue2(VkDevice _device, - const VkDeviceQueueInfo2 *pQueueInfo, - VkQueue *pQueue) -{ - VK_FROM_HANDLE(vk_device, device, _device); - - struct vk_queue *queue = NULL; - vk_foreach_queue(iter, device) { - if (iter->queue_family_index == pQueueInfo->queueFamilyIndex && - iter->index_in_family == pQueueInfo->queueIndex) { - queue = iter; - break; - } - } - - /* From the Vulkan 1.1.70 spec: - * - * "The queue returned by vkGetDeviceQueue2 must have the same flags - * value from this structure as that used at device creation time in a - * VkDeviceQueueCreateInfo instance. If no matching flags were specified - * at device creation time then pQueue will return VK_NULL_HANDLE." - */ - if (queue && queue->flags == pQueueInfo->flags) - *pQueue = vk_queue_to_handle(queue); - else - *pQueue = VK_NULL_HANDLE; -} - -VKAPI_ATTR void VKAPI_CALL vk_common_GetBufferMemoryRequirements(VkDevice _device, VkBuffer buffer, VkMemoryRequirements *pMemoryRequirements) @@ -268,410 +219,3 @@ vk_common_BindImageMemory(VkDevice _device, return device->dispatch_table.BindImageMemory2(_device, 1, &bind); } - -VKAPI_ATTR void VKAPI_CALL -vk_common_GetImageSparseMemoryRequirements(VkDevice _device, - VkImage image, - uint32_t *pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements *pSparseMemoryRequirements) -{ - VK_FROM_HANDLE(vk_device, device, _device); - - VkImageSparseMemoryRequirementsInfo2 info = { - .sType = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, - .image = image, - }; - - if (!pSparseMemoryRequirements) { - device->dispatch_table.GetImageSparseMemoryRequirements2(_device, - &info, - pSparseMemoryRequirementCount, - NULL); - return; - } - - STACK_ARRAY(VkSparseImageMemoryRequirements2, mem_reqs2, *pSparseMemoryRequirementCount); - - for (unsigned i = 0; i < *pSparseMemoryRequirementCount; ++i) { - mem_reqs2[i].sType = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2; - mem_reqs2[i].pNext = NULL; - } - - device->dispatch_table.GetImageSparseMemoryRequirements2(_device, - &info, - pSparseMemoryRequirementCount, - mem_reqs2); - - for (unsigned i = 0; i < *pSparseMemoryRequirementCount; ++i) - pSparseMemoryRequirements[i] = mem_reqs2[i].memoryRequirements; - - STACK_ARRAY_FINISH(mem_reqs2); -} - -VKAPI_ATTR VkResult VKAPI_CALL -vk_common_DeviceWaitIdle(VkDevice _device) -{ - VK_FROM_HANDLE(vk_device, device, _device); - const struct vk_device_dispatch_table *disp = &device->dispatch_table; - - vk_foreach_queue(queue, device) { - VkResult result = disp->QueueWaitIdle(vk_queue_to_handle(queue)); - if (result != VK_SUCCESS) - return result; - } - - return VK_SUCCESS; -} - -static void -copy_vk_struct_guts(VkBaseOutStructure *dst, VkBaseInStructure *src, size_t struct_size) -{ - STATIC_ASSERT(sizeof(*dst) == sizeof(*src)); - memcpy(dst + 1, src + 1, struct_size - sizeof(VkBaseOutStructure)); -} - -#define CORE_FEATURE(feature) features->feature = core->feature - -bool -vk_get_physical_device_core_1_1_feature_ext(struct VkBaseOutStructure *ext, - const VkPhysicalDeviceVulkan11Features *core) -{ - - switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: { - VkPhysicalDevice16BitStorageFeatures *features = (void *)ext; - CORE_FEATURE(storageBuffer16BitAccess); - CORE_FEATURE(uniformAndStorageBuffer16BitAccess); - CORE_FEATURE(storagePushConstant16); - CORE_FEATURE(storageInputOutput16); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: { - VkPhysicalDeviceMultiviewFeatures *features = (void *)ext; - CORE_FEATURE(multiview); - CORE_FEATURE(multiviewGeometryShader); - CORE_FEATURE(multiviewTessellationShader); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: { - VkPhysicalDeviceProtectedMemoryFeatures *features = (void *)ext; - CORE_FEATURE(protectedMemory); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: { - VkPhysicalDeviceSamplerYcbcrConversionFeatures *features = (void *) ext; - CORE_FEATURE(samplerYcbcrConversion); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: { - VkPhysicalDeviceShaderDrawParametersFeatures *features = (void *)ext; - CORE_FEATURE(shaderDrawParameters); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeatures *features = (void *)ext; - CORE_FEATURE(variablePointersStorageBuffer); - CORE_FEATURE(variablePointers); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: - copy_vk_struct_guts(ext, (void *)core, sizeof(*core)); - return true; - - default: - return false; - } -} - -bool -vk_get_physical_device_core_1_2_feature_ext(struct VkBaseOutStructure *ext, - const VkPhysicalDeviceVulkan12Features *core) -{ - - switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR *features = (void *)ext; - CORE_FEATURE(storageBuffer8BitAccess); - CORE_FEATURE(uniformAndStorageBuffer8BitAccess); - CORE_FEATURE(storagePushConstant8); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR: { - VkPhysicalDeviceBufferDeviceAddressFeaturesKHR *features = (void *)ext; - CORE_FEATURE(bufferDeviceAddress); - CORE_FEATURE(bufferDeviceAddressCaptureReplay); - CORE_FEATURE(bufferDeviceAddressMultiDevice); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT *features = (void *)ext; - CORE_FEATURE(shaderInputAttachmentArrayDynamicIndexing); - CORE_FEATURE(shaderUniformTexelBufferArrayDynamicIndexing); - CORE_FEATURE(shaderStorageTexelBufferArrayDynamicIndexing); - CORE_FEATURE(shaderUniformBufferArrayNonUniformIndexing); - CORE_FEATURE(shaderSampledImageArrayNonUniformIndexing); - CORE_FEATURE(shaderStorageBufferArrayNonUniformIndexing); - CORE_FEATURE(shaderStorageImageArrayNonUniformIndexing); - CORE_FEATURE(shaderInputAttachmentArrayNonUniformIndexing); - CORE_FEATURE(shaderUniformTexelBufferArrayNonUniformIndexing); - CORE_FEATURE(shaderStorageTexelBufferArrayNonUniformIndexing); - CORE_FEATURE(descriptorBindingUniformBufferUpdateAfterBind); - CORE_FEATURE(descriptorBindingSampledImageUpdateAfterBind); - CORE_FEATURE(descriptorBindingStorageImageUpdateAfterBind); - CORE_FEATURE(descriptorBindingStorageBufferUpdateAfterBind); - CORE_FEATURE(descriptorBindingUniformTexelBufferUpdateAfterBind); - CORE_FEATURE(descriptorBindingStorageTexelBufferUpdateAfterBind); - CORE_FEATURE(descriptorBindingUpdateUnusedWhilePending); - CORE_FEATURE(descriptorBindingPartiallyBound); - CORE_FEATURE(descriptorBindingVariableDescriptorCount); - CORE_FEATURE(runtimeDescriptorArray); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: { - VkPhysicalDeviceFloat16Int8FeaturesKHR *features = (void *)ext; - CORE_FEATURE(shaderFloat16); - CORE_FEATURE(shaderInt8); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT *features = (void *)ext; - CORE_FEATURE(hostQueryReset); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR: { - VkPhysicalDeviceImagelessFramebufferFeaturesKHR *features = (void *)ext; - CORE_FEATURE(imagelessFramebuffer); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT *features =(void *)ext; - CORE_FEATURE(scalarBlockLayout); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR: { - VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR *features = (void *)ext; - CORE_FEATURE(separateDepthStencilLayouts); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR: { - VkPhysicalDeviceShaderAtomicInt64FeaturesKHR *features = (void *)ext; - CORE_FEATURE(shaderBufferInt64Atomics); - CORE_FEATURE(shaderSharedInt64Atomics); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR: { - VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR *features = (void *)ext; - CORE_FEATURE(shaderSubgroupExtendedTypes); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: { - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *features = (void *) ext; - CORE_FEATURE(timelineSemaphore); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR *features = (void *)ext; - CORE_FEATURE(uniformBufferStandardLayout); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR: { - VkPhysicalDeviceVulkanMemoryModelFeaturesKHR *features = (void *)ext; - CORE_FEATURE(vulkanMemoryModel); - CORE_FEATURE(vulkanMemoryModelDeviceScope); - CORE_FEATURE(vulkanMemoryModelAvailabilityVisibilityChains); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: - copy_vk_struct_guts(ext, (void *)core, sizeof(*core)); - return true; - - default: - return false; - } -} - -#undef CORE_FEATURE - -#define CORE_RENAMED_PROPERTY(ext_property, core_property) \ - memcpy(&properties->ext_property, &core->core_property, sizeof(core->core_property)) - -#define CORE_PROPERTY(property) CORE_RENAMED_PROPERTY(property, property) - -bool -vk_get_physical_device_core_1_1_property_ext(struct VkBaseOutStructure *ext, - const VkPhysicalDeviceVulkan11Properties *core) -{ - switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: { - VkPhysicalDeviceIDProperties *properties = (void *)ext; - CORE_PROPERTY(deviceUUID); - CORE_PROPERTY(driverUUID); - CORE_PROPERTY(deviceLUID); - CORE_PROPERTY(deviceLUIDValid); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { - VkPhysicalDeviceMaintenance3Properties *properties = (void *)ext; - CORE_PROPERTY(maxPerSetDescriptors); - CORE_PROPERTY(maxMemoryAllocationSize); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: { - VkPhysicalDeviceMultiviewProperties *properties = (void *)ext; - CORE_PROPERTY(maxMultiviewViewCount); - CORE_PROPERTY(maxMultiviewInstanceIndex); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: { - VkPhysicalDevicePointClippingProperties *properties = (void *) ext; - CORE_PROPERTY(pointClippingBehavior); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: { - VkPhysicalDeviceProtectedMemoryProperties *properties = (void *)ext; - CORE_PROPERTY(protectedNoFault); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: { - VkPhysicalDeviceSubgroupProperties *properties = (void *)ext; - CORE_PROPERTY(subgroupSize); - CORE_RENAMED_PROPERTY(supportedStages, - subgroupSupportedStages); - CORE_RENAMED_PROPERTY(supportedOperations, - subgroupSupportedOperations); - CORE_RENAMED_PROPERTY(quadOperationsInAllStages, - subgroupQuadOperationsInAllStages); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: - copy_vk_struct_guts(ext, (void *)core, sizeof(*core)); - return true; - - default: - return false; - } -} - -bool -vk_get_physical_device_core_1_2_property_ext(struct VkBaseOutStructure *ext, - const VkPhysicalDeviceVulkan12Properties *core) -{ - switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR *properties = (void *)ext; - CORE_PROPERTY(supportedDepthResolveModes); - CORE_PROPERTY(supportedStencilResolveModes); - CORE_PROPERTY(independentResolveNone); - CORE_PROPERTY(independentResolve); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT *properties = (void *)ext; - CORE_PROPERTY(maxUpdateAfterBindDescriptorsInAllPools); - CORE_PROPERTY(shaderUniformBufferArrayNonUniformIndexingNative); - CORE_PROPERTY(shaderSampledImageArrayNonUniformIndexingNative); - CORE_PROPERTY(shaderStorageBufferArrayNonUniformIndexingNative); - CORE_PROPERTY(shaderStorageImageArrayNonUniformIndexingNative); - CORE_PROPERTY(shaderInputAttachmentArrayNonUniformIndexingNative); - CORE_PROPERTY(robustBufferAccessUpdateAfterBind); - CORE_PROPERTY(quadDivergentImplicitLod); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindSamplers); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindUniformBuffers); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindStorageBuffers); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindSampledImages); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindStorageImages); - CORE_PROPERTY(maxPerStageDescriptorUpdateAfterBindInputAttachments); - CORE_PROPERTY(maxPerStageUpdateAfterBindResources); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindSamplers); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindUniformBuffers); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindStorageBuffers); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindSampledImages); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindStorageImages); - CORE_PROPERTY(maxDescriptorSetUpdateAfterBindInputAttachments); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR: { - VkPhysicalDeviceDriverPropertiesKHR *properties = (void *) ext; - CORE_PROPERTY(driverID); - CORE_PROPERTY(driverName); - CORE_PROPERTY(driverInfo); - CORE_PROPERTY(conformanceVersion); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT: { - VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT *properties = (void *)ext; - CORE_PROPERTY(filterMinmaxImageComponentMapping); - CORE_PROPERTY(filterMinmaxSingleComponentFormats); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR : { - VkPhysicalDeviceFloatControlsPropertiesKHR *properties = (void *)ext; - CORE_PROPERTY(denormBehaviorIndependence); - CORE_PROPERTY(roundingModeIndependence); - CORE_PROPERTY(shaderDenormFlushToZeroFloat16); - CORE_PROPERTY(shaderDenormPreserveFloat16); - CORE_PROPERTY(shaderRoundingModeRTEFloat16); - CORE_PROPERTY(shaderRoundingModeRTZFloat16); - CORE_PROPERTY(shaderSignedZeroInfNanPreserveFloat16); - CORE_PROPERTY(shaderDenormFlushToZeroFloat32); - CORE_PROPERTY(shaderDenormPreserveFloat32); - CORE_PROPERTY(shaderRoundingModeRTEFloat32); - CORE_PROPERTY(shaderRoundingModeRTZFloat32); - CORE_PROPERTY(shaderSignedZeroInfNanPreserveFloat32); - CORE_PROPERTY(shaderDenormFlushToZeroFloat64); - CORE_PROPERTY(shaderDenormPreserveFloat64); - CORE_PROPERTY(shaderRoundingModeRTEFloat64); - CORE_PROPERTY(shaderRoundingModeRTZFloat64); - CORE_PROPERTY(shaderSignedZeroInfNanPreserveFloat64); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR *properties = (void *) ext; - CORE_PROPERTY(maxTimelineSemaphoreValueDifference); - return true; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: - copy_vk_struct_guts(ext, (void *)core, sizeof(*core)); - return true; - - default: - return false; - } -} - -#undef CORE_RENAMED_PROPERTY -#undef CORE_PROPERTY - |