/* WARNING: This is auto-generated file. Do not modify, since changes will * be lost! Modify the generating script instead. * This file was generated by /scripts/gen_framework.py */ tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalMemorySciBufFeaturesNV (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExternalMemorySciBufFeaturesNV, sciBufImport), FEATURE_ITEM (VkPhysicalDeviceExternalMemorySciBufFeaturesNV, sciBufExport), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointersStorageBuffer), FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointers), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalSciSyncFeaturesNV (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncFence), FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncSemaphore), FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncImport), FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncExport), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalSciSync2FeaturesNV (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncFence), FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncSemaphore2), FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncImport), FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncExport), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultiviewFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiview), FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewGeometryShader), FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewTessellationShader), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, uniformAndStorageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storagePushConstant16), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageInputOutput16), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, shaderSubgroupExtendedTypes), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSamplerYcbcrConversionFeatures, samplerYcbcrConversion), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceProtectedMemoryFeatures, protectedMemory), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderDrawParametersFeatures, shaderDrawParameters), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderFloat16), FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderInt8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceHostQueryResetFeatures, hostQueryReset), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 20, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTimelineSemaphoreFeatures, timelineSemaphore), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, uniformAndStorageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storagePushConstant8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModel), FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelDeviceScope), FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelAvailabilityVisibilityChains), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderBufferInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderSharedInt64Atomics), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32AtomicAdd), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateDivisor), FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateZeroDivisor), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceASTCDecodeFeaturesEXT, decodeModeSharedExponent), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceScalarBlockLayoutFeatures, scalarBlockLayout), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceUniformBufferStandardLayoutFeatures, uniformBufferStandardLayout), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDepthClipEnableFeaturesEXT, depthClipEnable), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddress), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressMultiDevice), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceImagelessFramebufferFeatures, imagelessFramebuffer), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, textureCompressionASTC_HDR), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, ycbcrImageArrays), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterQueryPools), FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterMultipleQueryPools), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderSubgroupClock), FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderDeviceClock), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceIndexTypeUint8FeaturesEXT, indexTypeUint8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderSampleInterlock), FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderPixelInterlock), FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderShadingRateInterlock), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, separateDepthStencilLayouts), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, shaderDemoteToHelperInvocation), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, texelBufferAlignment), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, subgroupSizeControl), FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, computeFullSubgroups), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, rectangularLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, bresenhamLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, smoothLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledRectangularLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledBresenhamLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledSmoothLines), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 6, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan11Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, uniformAndStorageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storagePushConstant16), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageInputOutput16), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiview), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewGeometryShader), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewTessellationShader), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointersStorageBuffer), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointers), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, protectedMemory), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, samplerYcbcrConversion), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, shaderDrawParameters), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan12Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerMirrorClampToEdge), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, drawIndirectCount), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformAndStorageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storagePushConstant8), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderBufferInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSharedInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderFloat16), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInt8), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSampledImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingSampledImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUpdateUnusedWhilePending), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingPartiallyBound), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingVariableDescriptorCount), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, runtimeDescriptorArray), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerFilterMinmax), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, scalarBlockLayout), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, imagelessFramebuffer), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformBufferStandardLayout), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSubgroupExtendedTypes), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, separateDepthStencilLayouts), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, hostQueryReset), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, timelineSemaphore), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddress), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressMultiDevice), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModel), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelDeviceScope), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelAvailabilityVisibilityChains), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputViewportIndex), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputLayer), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, subgroupBroadcastDynamicId), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 47, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan13Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, robustImageAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, inlineUniformBlock), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, descriptorBindingInlineUniformBlockUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, pipelineCreationCacheControl), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, privateData), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderDemoteToHelperInvocation), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderTerminateInvocation), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, subgroupSizeControl), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, computeFullSubgroups), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, synchronization2), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, textureCompressionASTC_HDR), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderZeroInitializeWorkgroupMemory), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, dynamicRendering), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderIntegerDotProduct), FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, maintenance4), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 15, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColors), FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColorWithoutFormat), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, extendedDynamicState), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2), FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2LogicOp), FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2PatchControlPoints), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustBufferAccess2), FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustImageAccess2), FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, nullDescriptor), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageRobustnessFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceImageRobustnessFeaturesEXT, robustImageAccess), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4R4G4B4), FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4B4G4R4), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, shaderImageInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, sparseImageInt64Atomics), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, pipelineFragmentShadingRate), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, primitiveFragmentShadingRate), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, attachmentFragmentShadingRate), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeaturesKHR (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR, shaderTerminateInvocation), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, vertexInputDynamicState), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceColorWriteEnableFeaturesEXT, colorWriteEnable), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSynchronization2FeaturesKHR (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSynchronization2FeaturesKHR, synchronization2), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkanSC10Features (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkanSC10Features, shaderAtomicInstructions), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, ycbcr2plane444Formats), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalMemoryScreenBufferFeaturesQNX (Context& context) { const PlatformInterface& vkp = context.getPlatformInterface(); tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); const CustomInstance instance (createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true)); const InstanceDriver& instanceDriver (instance.getDriver()); const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; const DeviceFeatures deviceFeaturesAll (context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE); const VkPhysicalDeviceFeatures2 deviceFeatures2 = deviceFeaturesAll.getCoreFeatures2(); int numErrors = 0; bool isSubProcess = context.getTestContext().getCommandLine().isSubProcess(); VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax(); VkPhysicalDeviceFeatures emptyDeviceFeatures; deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures)); // Only non-core extensions will be used when creating the device. const auto& extensionNames = context.getDeviceCreationExtensions(); DE_UNREF(extensionNames); // In some cases this is not used. if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX, screenBufferImport), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion()); } if (numErrors > 0) return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT."); else return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } void addSeparateUnsupportedFeatureTests (tcu::TestCaseGroup* testGroup) { addFunctionCase(testGroup, "external_memory_sci_buf_features_nv", createDeviceWithUnsupportedFeaturesTestExternalMemorySciBufFeaturesNV); addFunctionCase(testGroup, "variable_pointers_features", createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures); addFunctionCase(testGroup, "external_sci_sync_features_nv", createDeviceWithUnsupportedFeaturesTestExternalSciSyncFeaturesNV); addFunctionCase(testGroup, "external_sci_sync2_features_nv", createDeviceWithUnsupportedFeaturesTestExternalSciSync2FeaturesNV); addFunctionCase(testGroup, "multiview_features", createDeviceWithUnsupportedFeaturesTestMultiviewFeatures); addFunctionCase(testGroup, "16_bit_storage_features", createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures); addFunctionCase(testGroup, "shader_subgroup_extended_types_features", createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures); addFunctionCase(testGroup, "sampler_ycbcr_conversion_features", createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures); addFunctionCase(testGroup, "protected_memory_features", createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures); addFunctionCase(testGroup, "blend_operation_advanced_features_ext", createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT); addFunctionCase(testGroup, "shader_draw_parameters_features", createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures); addFunctionCase(testGroup, "shader_float16_int8_features", createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features); addFunctionCase(testGroup, "host_query_reset_features", createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures); addFunctionCase(testGroup, "descriptor_indexing_features", createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures); addFunctionCase(testGroup, "timeline_semaphore_features", createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures); addFunctionCase(testGroup, "8_bit_storage_features", createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures); addFunctionCase(testGroup, "vulkan_memory_model_features", createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures); addFunctionCase(testGroup, "shader_atomic_int64_features", createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features); addFunctionCase(testGroup, "shader_atomic_float_features_ext", createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT); addFunctionCase(testGroup, "vertex_attribute_divisor_features_ext", createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT); addFunctionCase(testGroup, "astc_decode_features_ext", createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT); addFunctionCase(testGroup, "scalar_block_layout_features", createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures); addFunctionCase(testGroup, "uniform_buffer_standard_layout_features", createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures); addFunctionCase(testGroup, "depth_clip_enable_features_ext", createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT); addFunctionCase(testGroup, "buffer_device_address_features", createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures); addFunctionCase(testGroup, "imageless_framebuffer_features", createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures); addFunctionCase(testGroup, "texture_compression_astchdr_features_ext", createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeaturesEXT); addFunctionCase(testGroup, "ycbcr_image_arrays_features_ext", createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT); addFunctionCase(testGroup, "performance_query_features_khr", createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR); addFunctionCase(testGroup, "shader_clock_features_khr", createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR); addFunctionCase(testGroup, "index_type_uint8_features_ext", createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT); addFunctionCase(testGroup, "fragment_shader_interlock_features_ext", createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT); addFunctionCase(testGroup, "separate_depth_stencil_layouts_features", createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures); addFunctionCase(testGroup, "shader_demote_to_helper_invocation_features_ext", createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeaturesEXT); addFunctionCase(testGroup, "texel_buffer_alignment_features_ext", createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT); addFunctionCase(testGroup, "subgroup_size_control_features_ext", createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeaturesEXT); addFunctionCase(testGroup, "line_rasterization_features_ext", createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT); addFunctionCase(testGroup, "vulkan11_features", createDeviceWithUnsupportedFeaturesTestVulkan11Features); addFunctionCase(testGroup, "vulkan12_features", createDeviceWithUnsupportedFeaturesTestVulkan12Features); addFunctionCase(testGroup, "vulkan13_features", createDeviceWithUnsupportedFeaturesTestVulkan13Features); addFunctionCase(testGroup, "custom_border_color_features_ext", createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT); addFunctionCase(testGroup, "extended_dynamic_state_features_ext", createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT); addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT); addFunctionCase(testGroup, "robustness2_features_ext", createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT); addFunctionCase(testGroup, "image_robustness_features_ext", createDeviceWithUnsupportedFeaturesTestImageRobustnessFeaturesEXT); addFunctionCase(testGroup, "4444_formats_features_ext", createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT); addFunctionCase(testGroup, "shader_image_atomic_int64_features_ext", createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT); addFunctionCase(testGroup, "fragment_shading_rate_features_khr", createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR); addFunctionCase(testGroup, "shader_terminate_invocation_features_khr", createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeaturesKHR); addFunctionCase(testGroup, "vertex_input_dynamic_state_features_ext", createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT); addFunctionCase(testGroup, "color_write_enable_features_ext", createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT); addFunctionCase(testGroup, "synchronization2_features_khr", createDeviceWithUnsupportedFeaturesTestSynchronization2FeaturesKHR); addFunctionCase(testGroup, "vulkan_sc10_features", createDeviceWithUnsupportedFeaturesTestVulkanSC10Features); addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT); addFunctionCase(testGroup, "external_memory_screen_buffer_features_qnx", createDeviceWithUnsupportedFeaturesTestExternalMemoryScreenBufferFeaturesQNX); }