|
|
@@ -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,
|