/* 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 */ bool canUseFeaturesStruct (const vector& deviceExtensions, uint32_t usedApiVersion, const char* extension) { return (isExtensionStructSupported(deviceExtensions, RequiredExtension(extension)) || isCoreDeviceExtension(usedApiVersion, extension)); } bool checkMandatoryFeatures(const vkt::Context& context) { if (!context.isInstanceFunctionalitySupported("VK_KHR_get_physical_device_properties2")) TCU_THROW(NotSupportedError, "Extension VK_KHR_get_physical_device_properties2 is not present"); VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); const InstanceInterface& vki = context.getInstanceInterface(); const vector deviceExtensions = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); const uint32_t usedApiVersion = context.getUsedApiVersion(); tcu::TestLog& log = context.getTestContext().getLog(); vk::VkPhysicalDeviceFeatures2 coreFeatures; deMemset(&coreFeatures, 0, sizeof(coreFeatures)); coreFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; void** nextPtr = &coreFeatures.pNext; vk::VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures; deMemset(&physicalDevice16BitStorageFeatures, 0, sizeof(physicalDevice16BitStorageFeatures)); { physicalDevice16BitStorageFeatures.sType = getStructureType(); *nextPtr = &physicalDevice16BitStorageFeatures; nextPtr = &physicalDevice16BitStorageFeatures.pNext; } vk::VkPhysicalDevice4444FormatsFeaturesEXT physicalDevice4444FormatsFeaturesEXT; deMemset(&physicalDevice4444FormatsFeaturesEXT, 0, sizeof(physicalDevice4444FormatsFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_4444_formats") ) { physicalDevice4444FormatsFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDevice4444FormatsFeaturesEXT; nextPtr = &physicalDevice4444FormatsFeaturesEXT.pNext; } vk::VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures; deMemset(&physicalDevice8BitStorageFeatures, 0, sizeof(physicalDevice8BitStorageFeatures)); { physicalDevice8BitStorageFeatures.sType = getStructureType(); *nextPtr = &physicalDevice8BitStorageFeatures; nextPtr = &physicalDevice8BitStorageFeatures.pNext; } vk::VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures; deMemset(&physicalDeviceBufferDeviceAddressFeatures, 0, sizeof(physicalDeviceBufferDeviceAddressFeatures)); { physicalDeviceBufferDeviceAddressFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceBufferDeviceAddressFeatures; nextPtr = &physicalDeviceBufferDeviceAddressFeatures.pNext; } vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT physicalDeviceColorWriteEnableFeaturesEXT; deMemset(&physicalDeviceColorWriteEnableFeaturesEXT, 0, sizeof(physicalDeviceColorWriteEnableFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_color_write_enable") ) { physicalDeviceColorWriteEnableFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceColorWriteEnableFeaturesEXT; nextPtr = &physicalDeviceColorWriteEnableFeaturesEXT.pNext; } vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT physicalDeviceDepthClipEnableFeaturesEXT; deMemset(&physicalDeviceDepthClipEnableFeaturesEXT, 0, sizeof(physicalDeviceDepthClipEnableFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_clip_enable") ) { physicalDeviceDepthClipEnableFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceDepthClipEnableFeaturesEXT; nextPtr = &physicalDeviceDepthClipEnableFeaturesEXT.pNext; } vk::VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures; deMemset(&physicalDeviceDescriptorIndexingFeatures, 0, sizeof(physicalDeviceDescriptorIndexingFeatures)); { physicalDeviceDescriptorIndexingFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceDescriptorIndexingFeatures; nextPtr = &physicalDeviceDescriptorIndexingFeatures.pNext; } vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT physicalDeviceExtendedDynamicState2FeaturesEXT; deMemset(&physicalDeviceExtendedDynamicState2FeaturesEXT, 0, sizeof(physicalDeviceExtendedDynamicState2FeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_extended_dynamic_state2") ) { physicalDeviceExtendedDynamicState2FeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceExtendedDynamicState2FeaturesEXT; nextPtr = &physicalDeviceExtendedDynamicState2FeaturesEXT.pNext; } vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT physicalDeviceFragmentShaderInterlockFeaturesEXT; deMemset(&physicalDeviceFragmentShaderInterlockFeaturesEXT, 0, sizeof(physicalDeviceFragmentShaderInterlockFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_fragment_shader_interlock") ) { physicalDeviceFragmentShaderInterlockFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceFragmentShaderInterlockFeaturesEXT; nextPtr = &physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext; } #if defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR physicalDeviceFragmentShadingRateFeaturesKHR; deMemset(&physicalDeviceFragmentShadingRateFeaturesKHR, 0, sizeof(physicalDeviceFragmentShadingRateFeaturesKHR)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_fragment_shading_rate") ) { physicalDeviceFragmentShadingRateFeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDeviceFragmentShadingRateFeaturesKHR; nextPtr = &physicalDeviceFragmentShadingRateFeaturesKHR.pNext; } #endif // defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures; deMemset(&physicalDeviceHostQueryResetFeatures, 0, sizeof(physicalDeviceHostQueryResetFeatures)); { physicalDeviceHostQueryResetFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceHostQueryResetFeatures; nextPtr = &physicalDeviceHostQueryResetFeatures.pNext; } vk::VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures; deMemset(&physicalDeviceImagelessFramebufferFeatures, 0, sizeof(physicalDeviceImagelessFramebufferFeatures)); { physicalDeviceImagelessFramebufferFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceImagelessFramebufferFeatures; nextPtr = &physicalDeviceImagelessFramebufferFeatures.pNext; } vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT; deMemset(&physicalDeviceIndexTypeUint8FeaturesEXT, 0, sizeof(physicalDeviceIndexTypeUint8FeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_index_type_uint8") ) { physicalDeviceIndexTypeUint8FeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceIndexTypeUint8FeaturesEXT; nextPtr = &physicalDeviceIndexTypeUint8FeaturesEXT.pNext; } vk::VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT; deMemset(&physicalDeviceLineRasterizationFeaturesEXT, 0, sizeof(physicalDeviceLineRasterizationFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_line_rasterization") ) { physicalDeviceLineRasterizationFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceLineRasterizationFeaturesEXT; nextPtr = &physicalDeviceLineRasterizationFeaturesEXT.pNext; } vk::VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures; deMemset(&physicalDeviceMultiviewFeatures, 0, sizeof(physicalDeviceMultiviewFeatures)); { physicalDeviceMultiviewFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceMultiviewFeatures; nextPtr = &physicalDeviceMultiviewFeatures.pNext; } vk::VkPhysicalDevicePerformanceQueryFeaturesKHR physicalDevicePerformanceQueryFeaturesKHR; deMemset(&physicalDevicePerformanceQueryFeaturesKHR, 0, sizeof(physicalDevicePerformanceQueryFeaturesKHR)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_performance_query") ) { physicalDevicePerformanceQueryFeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDevicePerformanceQueryFeaturesKHR; nextPtr = &physicalDevicePerformanceQueryFeaturesKHR.pNext; } vk::VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR physicalDeviceSamplerYcbcrConversionFeaturesKHR; deMemset(&physicalDeviceSamplerYcbcrConversionFeaturesKHR, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeaturesKHR)); { physicalDeviceSamplerYcbcrConversionFeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDeviceSamplerYcbcrConversionFeaturesKHR; nextPtr = &physicalDeviceSamplerYcbcrConversionFeaturesKHR.pNext; } vk::VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures; deMemset(&physicalDeviceScalarBlockLayoutFeatures, 0, sizeof(physicalDeviceScalarBlockLayoutFeatures)); { physicalDeviceScalarBlockLayoutFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceScalarBlockLayoutFeatures; nextPtr = &physicalDeviceScalarBlockLayoutFeatures.pNext; } vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures; deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeatures, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeatures)); { physicalDeviceSeparateDepthStencilLayoutsFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures; nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext; } vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT physicalDeviceShaderAtomicFloatFeaturesEXT; deMemset(&physicalDeviceShaderAtomicFloatFeaturesEXT, 0, sizeof(physicalDeviceShaderAtomicFloatFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_atomic_float") ) { physicalDeviceShaderAtomicFloatFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceShaderAtomicFloatFeaturesEXT; nextPtr = &physicalDeviceShaderAtomicFloatFeaturesEXT.pNext; } vk::VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features; deMemset(&physicalDeviceShaderAtomicInt64Features, 0, sizeof(physicalDeviceShaderAtomicInt64Features)); { physicalDeviceShaderAtomicInt64Features.sType = getStructureType(); *nextPtr = &physicalDeviceShaderAtomicInt64Features; nextPtr = &physicalDeviceShaderAtomicInt64Features.pNext; } vk::VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR; deMemset(&physicalDeviceShaderClockFeaturesKHR, 0, sizeof(physicalDeviceShaderClockFeaturesKHR)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_clock") ) { physicalDeviceShaderClockFeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDeviceShaderClockFeaturesKHR; nextPtr = &physicalDeviceShaderClockFeaturesKHR.pNext; } vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; deMemset(&physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, 0, sizeof(physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_demote_to_helper_invocation") ) { physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; nextPtr = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.pNext; } vk::VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features; deMemset(&physicalDeviceShaderFloat16Int8Features, 0, sizeof(physicalDeviceShaderFloat16Int8Features)); { physicalDeviceShaderFloat16Int8Features.sType = getStructureType(); *nextPtr = &physicalDeviceShaderFloat16Int8Features; nextPtr = &physicalDeviceShaderFloat16Int8Features.pNext; } vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT physicalDeviceShaderImageAtomicInt64FeaturesEXT; deMemset(&physicalDeviceShaderImageAtomicInt64FeaturesEXT, 0, sizeof(physicalDeviceShaderImageAtomicInt64FeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_image_atomic_int64") ) { physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceShaderImageAtomicInt64FeaturesEXT; nextPtr = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext; } vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures; deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeatures, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeatures)); { physicalDeviceShaderSubgroupExtendedTypesFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures; nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext; } vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR physicalDeviceShaderTerminateInvocationFeaturesKHR; deMemset(&physicalDeviceShaderTerminateInvocationFeaturesKHR, 0, sizeof(physicalDeviceShaderTerminateInvocationFeaturesKHR)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_terminate_invocation") ) { physicalDeviceShaderTerminateInvocationFeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDeviceShaderTerminateInvocationFeaturesKHR; nextPtr = &physicalDeviceShaderTerminateInvocationFeaturesKHR.pNext; } vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT physicalDeviceSubgroupSizeControlFeaturesEXT; deMemset(&physicalDeviceSubgroupSizeControlFeaturesEXT, 0, sizeof(physicalDeviceSubgroupSizeControlFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_subgroup_size_control") ) { physicalDeviceSubgroupSizeControlFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceSubgroupSizeControlFeaturesEXT; nextPtr = &physicalDeviceSubgroupSizeControlFeaturesEXT.pNext; } vk::VkPhysicalDeviceSynchronization2FeaturesKHR physicalDeviceSynchronization2FeaturesKHR; deMemset(&physicalDeviceSynchronization2FeaturesKHR, 0, sizeof(physicalDeviceSynchronization2FeaturesKHR)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_synchronization2") ) { physicalDeviceSynchronization2FeaturesKHR.sType = getStructureType(); *nextPtr = &physicalDeviceSynchronization2FeaturesKHR; nextPtr = &physicalDeviceSynchronization2FeaturesKHR.pNext; } vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT; deMemset(&physicalDeviceTexelBufferAlignmentFeaturesEXT, 0, sizeof(physicalDeviceTexelBufferAlignmentFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texel_buffer_alignment") ) { physicalDeviceTexelBufferAlignmentFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceTexelBufferAlignmentFeaturesEXT; nextPtr = &physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext; } vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT physicalDeviceTextureCompressionASTCHDRFeaturesEXT; deMemset(&physicalDeviceTextureCompressionASTCHDRFeaturesEXT, 0, sizeof(physicalDeviceTextureCompressionASTCHDRFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texture_compression_astc_hdr") ) { physicalDeviceTextureCompressionASTCHDRFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT; nextPtr = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT.pNext; } #if defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures; deMemset(&physicalDeviceTimelineSemaphoreFeatures, 0, sizeof(physicalDeviceTimelineSemaphoreFeatures)); { physicalDeviceTimelineSemaphoreFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceTimelineSemaphoreFeatures; nextPtr = &physicalDeviceTimelineSemaphoreFeatures.pNext; } #endif // defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures; deMemset(&physicalDeviceUniformBufferStandardLayoutFeatures, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeatures)); { physicalDeviceUniformBufferStandardLayoutFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures; nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures.pNext; } vk::VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures; deMemset(&physicalDeviceVariablePointersFeatures, 0, sizeof(physicalDeviceVariablePointersFeatures)); { physicalDeviceVariablePointersFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceVariablePointersFeatures; nextPtr = &physicalDeviceVariablePointersFeatures.pNext; } vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT physicalDeviceVertexAttributeDivisorFeaturesEXT; deMemset(&physicalDeviceVertexAttributeDivisorFeaturesEXT, 0, sizeof(physicalDeviceVertexAttributeDivisorFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_attribute_divisor") ) { physicalDeviceVertexAttributeDivisorFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceVertexAttributeDivisorFeaturesEXT; nextPtr = &physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext; } vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT physicalDeviceVertexInputDynamicStateFeaturesEXT; deMemset(&physicalDeviceVertexInputDynamicStateFeaturesEXT, 0, sizeof(physicalDeviceVertexInputDynamicStateFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_input_dynamic_state") ) { physicalDeviceVertexInputDynamicStateFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceVertexInputDynamicStateFeaturesEXT; nextPtr = &physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext; } #if defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features; deMemset(&physicalDeviceVulkan11Features, 0, sizeof(physicalDeviceVulkan11Features)); { physicalDeviceVulkan11Features.sType = getStructureType(); *nextPtr = &physicalDeviceVulkan11Features; nextPtr = &physicalDeviceVulkan11Features.pNext; } #endif // defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features; deMemset(&physicalDeviceVulkan12Features, 0, sizeof(physicalDeviceVulkan12Features)); { physicalDeviceVulkan12Features.sType = getStructureType(); *nextPtr = &physicalDeviceVulkan12Features; nextPtr = &physicalDeviceVulkan12Features.pNext; } #if defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features; deMemset(&physicalDeviceVulkan13Features, 0, sizeof(physicalDeviceVulkan13Features)); { physicalDeviceVulkan13Features.sType = getStructureType(); *nextPtr = &physicalDeviceVulkan13Features; nextPtr = &physicalDeviceVulkan13Features.pNext; } #endif // defined(CTS_USES_VULKAN) vk::VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures; deMemset(&physicalDeviceVulkanMemoryModelFeatures, 0, sizeof(physicalDeviceVulkanMemoryModelFeatures)); { physicalDeviceVulkanMemoryModelFeatures.sType = getStructureType(); *nextPtr = &physicalDeviceVulkanMemoryModelFeatures; nextPtr = &physicalDeviceVulkanMemoryModelFeatures.pNext; } vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT physicalDeviceYcbcr2Plane444FormatsFeaturesEXT; deMemset(&physicalDeviceYcbcr2Plane444FormatsFeaturesEXT, 0, sizeof(physicalDeviceYcbcr2Plane444FormatsFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_2plane_444_formats") ) { physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT; nextPtr = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext; } vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT; deMemset(&physicalDeviceYcbcrImageArraysFeaturesEXT, 0, sizeof(physicalDeviceYcbcrImageArraysFeaturesEXT)); if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_image_arrays") ) { physicalDeviceYcbcrImageArraysFeaturesEXT.sType = getStructureType(); *nextPtr = &physicalDeviceYcbcrImageArraysFeaturesEXT; nextPtr = &physicalDeviceYcbcrImageArraysFeaturesEXT.pNext; } context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &coreFeatures); bool result = true; if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_4444_formats")) ) { if ( physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature formatA4R4G4B4 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_color_write_enable")) ) { if ( physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature colorWriteEnable not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_enable")) ) { if ( physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature depthClipEnable not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) ) { if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_extended_dynamic_state2")) ) { if ( physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature extendedDynamicState2 not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3TessellationDomainOrigin ) { if ( coreFeatures.features.tessellationShader == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature tessellationShader not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClampEnable ) { if ( coreFeatures.features.depthClamp == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature depthClamp not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3PolygonMode ) { if ( coreFeatures.features.fillModeNonSolid == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature fillModeNonSolid not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3AlphaToOneEnable ) { if ( coreFeatures.features.alphaToOne == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature alphaToOne not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LogicOpEnable ) { if ( coreFeatures.features.logicOp == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature logicOp not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_shader_interlock")) ) { if ( ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock == VK_FALSE ) ) { log << tcu::TestLog::Message << "Mandatory feature fragmentShaderSampleInterlock or fragmentShaderPixelInterlock or fragmentShaderShadingRateInterlock not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) ) { if ( physicalDeviceHostQueryResetFeatures.hostQueryReset == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_index_type_uint8")) ) { if ( physicalDeviceIndexTypeUint8FeaturesEXT.indexTypeUint8 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature indexTypeUint8 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) ) { if ( ( physicalDeviceLineRasterizationFeaturesEXT.rectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.bresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.smoothLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledRectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledBresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledSmoothLines == VK_FALSE ) ) { log << tcu::TestLog::Message << "Mandatory feature rectangularLines or bresenhamLines or smoothLines or stippledRectangularLines or stippledBresenhamLines or stippledSmoothLines not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( physicalDeviceMeshShaderFeaturesEXT.primitiveFragmentShadingRateMeshShader ) { if ( physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature primitiveFragmentShadingRate not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) ) { if ( physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature scalarBlockLayout not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics ) { if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32Atomics not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd ) { if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32AtomicAdd not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_demote_to_helper_invocation")) ) { if ( physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.shaderDemoteToHelperInvocation == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) ) { if ( coreFeatures.features.shaderInt64 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) ) { if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) && physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics ) { if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) ) { if ( physicalDeviceSubgroupSizeControlFeaturesEXT.subgroupSizeControl == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) ) { if ( physicalDeviceSubgroupSizeControlFeaturesEXT.computeFullSubgroups == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texel_buffer_alignment")) ) { if ( physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature texelBufferAlignment not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texture_compression_astc_hdr")) ) { if ( physicalDeviceTextureCompressionASTCHDRFeaturesEXT.textureCompressionASTC_HDR == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature textureCompressionASTC_HDR not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_attribute_divisor")) ) { if ( physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateDivisor == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature vertexAttributeInstanceRateDivisor not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_input_dynamic_state")) ) { if ( physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature vertexInputDynamicState not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_2plane_444_formats")) ) { if ( physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature ycbcr2plane444Formats not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_image_arrays")) ) { if ( physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature ycbcrImageArrays not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) ) { if ( physicalDevice16BitStorageFeatures.storageBuffer16BitAccess == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature storageBuffer16BitAccess not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) ) { if ( physicalDevice8BitStorageFeatures.storageBuffer8BitAccess == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature storageBuffer8BitAccess not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) ) { if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) ) { if ( physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_multiview")) ) { if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_performance_query")) ) { if ( physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature performanceCounterQueryPools not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) ) { if ( physicalDeviceSamplerYcbcrConversionFeaturesKHR.samplerYcbcrConversion == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature samplerYcbcrConversion not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) ) { if ( physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) ) { if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_clock")) ) { if ( physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupClock not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float16_int8")) ) { if ( ( physicalDeviceShaderFloat16Int8Features.shaderFloat16 == VK_FALSE ) && ( physicalDeviceShaderFloat16Int8Features.shaderInt8 == VK_FALSE ) ) { log << tcu::TestLog::Message << "Mandatory feature shaderFloat16 or shaderInt8 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) ) { if ( physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_terminate_invocation")) ) { if ( physicalDeviceShaderTerminateInvocationFeaturesKHR.shaderTerminateInvocation == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_synchronization2")) ) { if ( physicalDeviceSynchronization2FeaturesKHR.synchronization2 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) ) { if ( physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) ) { if ( physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_variable_pointers")) ) { if ( physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature variablePointersStorageBuffer not supported" << tcu::TestLog::EndMessage; result = false; } } if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) ) { if ( physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage; result = false; } } { if ( coreFeatures.features.robustBufferAccess == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature robustBufferAccess not supported" << tcu::TestLog::EndMessage; result = false; } } if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics ) { if ( coreFeatures.features.shaderInt64 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics ) { if ( coreFeatures.features.shaderInt64 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics ) { if ( coreFeatures.features.shaderInt64 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage; result = false; } } if ( physicalDeviceVulkan12Features.shaderSharedInt64Atomics ) { if ( coreFeatures.features.shaderInt64 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) ) { if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan11Features.multiview == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.subgroupBroadcastDynamicId == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature subgroupBroadcastDynamicId not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.imagelessFramebuffer == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.uniformBufferStandardLayout == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.separateDepthStencilLayouts == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.hostQueryReset == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) ) { if ( physicalDeviceVulkan12Features.timelineSemaphore == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics ) { if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_draw_indirect_count")) ) { if ( physicalDeviceVulkan12Features.drawIndirectCount == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature drawIndirectCount not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_mirror_clamp_to_edge")) ) { if ( physicalDeviceVulkan12Features.samplerMirrorClampToEdge == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature samplerMirrorClampToEdge not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sampler_filter_minmax")) ) { if ( physicalDeviceVulkan12Features.samplerFilterMinmax == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature samplerFilterMinmax not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) ) { if ( physicalDeviceVulkan12Features.shaderOutputViewportIndex == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderOutputViewportIndex not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) ) { if ( physicalDeviceVulkan12Features.shaderOutputLayer == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderOutputLayer not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage; result = false; } } if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) ) { if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage; result = false; } } #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKANSC) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan12Features.vulkanMemoryModel == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKANSC) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModelDeviceScope not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.robustImageAccess == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature robustImageAccess not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.inlineUniformBlock == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature inlineUniformBlock not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) && physicalDeviceVulkan12Features.descriptorIndexing ) { if ( physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature descriptorBindingInlineUniformBlockUpdateAfterBind not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.pipelineCreationCacheControl == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature pipelineCreationCacheControl not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.privateData == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature privateData not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.shaderTerminateInvocation == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.subgroupSizeControl == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.computeFullSubgroups == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.synchronization2 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderZeroInitializeWorkgroupMemory not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.dynamicRendering == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature dynamicRendering not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.shaderIntegerDotProduct == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) ) { if ( physicalDeviceVulkan13Features.maintenance4 == VK_FALSE ) { log << tcu::TestLog::Message << "Mandatory feature maintenance4 not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ConservativeRasterizationMode ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ExtraPrimitiveOverestimationSize ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3SampleLocationsEnable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sample_locations")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_sample_locations"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_sample_locations not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendAdvanced ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_blend_operation_advanced")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_blend_operation_advanced"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_blend_operation_advanced not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineRasterizationMode ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineStippleEnable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization"))) { log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportWScalingEnable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_clip_space_w_scaling")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_clip_space_w_scaling"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_clip_space_w_scaling not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportSwizzle ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_viewport_swizzle")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_viewport_swizzle"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_viewport_swizzle not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorEnable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorLocation ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationMode ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTableEnable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) #if defined(CTS_USES_VULKAN) if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTable ) { if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples"))) { log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage; result = false; } } #endif // defined(CTS_USES_VULKAN) return result; }