|
|
|
@ -191,78 +191,77 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR |
|
|
|
const vk::InstanceDispatch& dld_) |
|
|
|
: instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()}, |
|
|
|
format_properties{GetFormatProperties(physical)} { |
|
|
|
CheckSuitability(); |
|
|
|
CheckSuitability(surface != nullptr); |
|
|
|
SetupFamilies(surface); |
|
|
|
SetupFeatures(); |
|
|
|
|
|
|
|
const auto queue_cis = GetDeviceQueueCreateInfos(); |
|
|
|
const std::vector extensions = LoadExtensions(); |
|
|
|
const std::vector extensions = LoadExtensions(surface != nullptr); |
|
|
|
|
|
|
|
VkPhysicalDeviceFeatures2 features2{ |
|
|
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, |
|
|
|
.pNext = nullptr, |
|
|
|
.features{}, |
|
|
|
.features{ |
|
|
|
.robustBufferAccess = false, |
|
|
|
.fullDrawIndexUint32 = false, |
|
|
|
.imageCubeArray = true, |
|
|
|
.independentBlend = true, |
|
|
|
.geometryShader = true, |
|
|
|
.tessellationShader = true, |
|
|
|
.sampleRateShading = false, |
|
|
|
.dualSrcBlend = false, |
|
|
|
.logicOp = false, |
|
|
|
.multiDrawIndirect = false, |
|
|
|
.drawIndirectFirstInstance = false, |
|
|
|
.depthClamp = true, |
|
|
|
.depthBiasClamp = true, |
|
|
|
.fillModeNonSolid = false, |
|
|
|
.depthBounds = false, |
|
|
|
.wideLines = false, |
|
|
|
.largePoints = true, |
|
|
|
.alphaToOne = false, |
|
|
|
.multiViewport = true, |
|
|
|
.samplerAnisotropy = true, |
|
|
|
.textureCompressionETC2 = false, |
|
|
|
.textureCompressionASTC_LDR = is_optimal_astc_supported, |
|
|
|
.textureCompressionBC = false, |
|
|
|
.occlusionQueryPrecise = true, |
|
|
|
.pipelineStatisticsQuery = false, |
|
|
|
.vertexPipelineStoresAndAtomics = true, |
|
|
|
.fragmentStoresAndAtomics = true, |
|
|
|
.shaderTessellationAndGeometryPointSize = false, |
|
|
|
.shaderImageGatherExtended = true, |
|
|
|
.shaderStorageImageExtendedFormats = false, |
|
|
|
.shaderStorageImageMultisample = is_shader_storage_image_multisample, |
|
|
|
.shaderStorageImageReadWithoutFormat = is_formatless_image_load_supported, |
|
|
|
.shaderStorageImageWriteWithoutFormat = true, |
|
|
|
.shaderUniformBufferArrayDynamicIndexing = false, |
|
|
|
.shaderSampledImageArrayDynamicIndexing = false, |
|
|
|
.shaderStorageBufferArrayDynamicIndexing = false, |
|
|
|
.shaderStorageImageArrayDynamicIndexing = false, |
|
|
|
.shaderClipDistance = false, |
|
|
|
.shaderCullDistance = false, |
|
|
|
.shaderFloat64 = false, |
|
|
|
.shaderInt64 = false, |
|
|
|
.shaderInt16 = false, |
|
|
|
.shaderResourceResidency = false, |
|
|
|
.shaderResourceMinLod = false, |
|
|
|
.sparseBinding = false, |
|
|
|
.sparseResidencyBuffer = false, |
|
|
|
.sparseResidencyImage2D = false, |
|
|
|
.sparseResidencyImage3D = false, |
|
|
|
.sparseResidency2Samples = false, |
|
|
|
.sparseResidency4Samples = false, |
|
|
|
.sparseResidency8Samples = false, |
|
|
|
.sparseResidency16Samples = false, |
|
|
|
.sparseResidencyAliased = false, |
|
|
|
.variableMultisampleRate = false, |
|
|
|
.inheritedQueries = false, |
|
|
|
}, |
|
|
|
}; |
|
|
|
const void* first_next = &features2; |
|
|
|
void** next = &features2.pNext; |
|
|
|
|
|
|
|
features2.features = { |
|
|
|
.robustBufferAccess = false, |
|
|
|
.fullDrawIndexUint32 = false, |
|
|
|
.imageCubeArray = true, |
|
|
|
.independentBlend = true, |
|
|
|
.geometryShader = true, |
|
|
|
.tessellationShader = true, |
|
|
|
.sampleRateShading = false, |
|
|
|
.dualSrcBlend = false, |
|
|
|
.logicOp = false, |
|
|
|
.multiDrawIndirect = false, |
|
|
|
.drawIndirectFirstInstance = false, |
|
|
|
.depthClamp = true, |
|
|
|
.depthBiasClamp = true, |
|
|
|
.fillModeNonSolid = false, |
|
|
|
.depthBounds = false, |
|
|
|
.wideLines = false, |
|
|
|
.largePoints = true, |
|
|
|
.alphaToOne = false, |
|
|
|
.multiViewport = true, |
|
|
|
.samplerAnisotropy = true, |
|
|
|
.textureCompressionETC2 = false, |
|
|
|
.textureCompressionASTC_LDR = is_optimal_astc_supported, |
|
|
|
.textureCompressionBC = false, |
|
|
|
.occlusionQueryPrecise = true, |
|
|
|
.pipelineStatisticsQuery = false, |
|
|
|
.vertexPipelineStoresAndAtomics = true, |
|
|
|
.fragmentStoresAndAtomics = true, |
|
|
|
.shaderTessellationAndGeometryPointSize = false, |
|
|
|
.shaderImageGatherExtended = true, |
|
|
|
.shaderStorageImageExtendedFormats = false, |
|
|
|
.shaderStorageImageMultisample = is_shader_storage_image_multisample, |
|
|
|
.shaderStorageImageReadWithoutFormat = is_formatless_image_load_supported, |
|
|
|
.shaderStorageImageWriteWithoutFormat = true, |
|
|
|
.shaderUniformBufferArrayDynamicIndexing = false, |
|
|
|
.shaderSampledImageArrayDynamicIndexing = false, |
|
|
|
.shaderStorageBufferArrayDynamicIndexing = false, |
|
|
|
.shaderStorageImageArrayDynamicIndexing = false, |
|
|
|
.shaderClipDistance = false, |
|
|
|
.shaderCullDistance = false, |
|
|
|
.shaderFloat64 = false, |
|
|
|
.shaderInt64 = false, |
|
|
|
.shaderInt16 = false, |
|
|
|
.shaderResourceResidency = false, |
|
|
|
.shaderResourceMinLod = false, |
|
|
|
.sparseBinding = false, |
|
|
|
.sparseResidencyBuffer = false, |
|
|
|
.sparseResidencyImage2D = false, |
|
|
|
.sparseResidencyImage3D = false, |
|
|
|
.sparseResidency2Samples = false, |
|
|
|
.sparseResidency4Samples = false, |
|
|
|
.sparseResidency8Samples = false, |
|
|
|
.sparseResidency16Samples = false, |
|
|
|
.sparseResidencyAliased = false, |
|
|
|
.variableMultisampleRate = false, |
|
|
|
.inheritedQueries = false, |
|
|
|
}; |
|
|
|
VkPhysicalDeviceTimelineSemaphoreFeaturesKHR timeline_semaphore{ |
|
|
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, |
|
|
|
.pNext = nullptr, |
|
|
|
|