Check supported features and properties for transform feedback tests
authorJohn Anthony <john.anthony@arm.com>
Thu, 11 Jul 2019 14:54:59 +0000 (16:54 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 29 Aug 2019 09:09:54 +0000 (05:09 -0400)
Builtin tests using shaderClipDistance and/or shaderCullDistance should
check if the features they need are supported. BackwardDependency test
should check if transformFeedbackDraw is supported.

Affects:
- dEQP-VK.transform_feedback.simple.xfb_clipdistance_*
- dEQP-VK.transform_feedback.simple.xfb_culldistance_*
- dEQP-VK.transform_feedback.simple.xfb_clip_and_cull_*
- dEQP-VK.transform_feedback.simple.backward_dependency

Components: Vulkan

VK-GL-CTS issue: 1934

Change-Id: I76b22a506ba608d3e3f4ea5586c74b0b7ca1066a

external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp

index 2ee5aa0..8857049 100644 (file)
@@ -818,9 +818,17 @@ protected:
 TransformFeedbackBuiltinTestInstance::TransformFeedbackBuiltinTestInstance (Context& context, const TestParameters& parameters)
        : TransformFeedbackTestInstance (context, parameters)
 {
+       const InstanceInterface&                vki                     = m_context.getInstanceInterface();
+       const VkPhysicalDevice                  physDevice      = m_context.getPhysicalDevice();
+       const VkPhysicalDeviceFeatures  features        = getPhysicalDeviceFeatures(vki, physDevice);
+
        const deUint32 tfBuffersSupported       = m_transformFeedbackProperties.maxTransformFeedbackBuffers;
        const deUint32 tfBuffersRequired        = m_parameters.partCount;
 
+       if ((m_parameters.testType == TEST_TYPE_XFB_CLIPDISTANCE || m_parameters.testType == TEST_TYPE_XFB_CLIP_AND_CULL) && !features.shaderClipDistance)
+               TCU_THROW(NotSupportedError, std::string("shaderClipDistance feature is not supported"));
+       if ((m_parameters.testType == TEST_TYPE_XFB_CULLDISTANCE || m_parameters.testType == TEST_TYPE_XFB_CLIP_AND_CULL) && !features.shaderCullDistance)
+               TCU_THROW(NotSupportedError, std::string("shaderCullDistance feature is not supported"));
        if (tfBuffersSupported < tfBuffersRequired)
                TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackBuffers=" + de::toString(tfBuffersSupported) + ", while test requires " + de::toString(tfBuffersRequired)).c_str());
 }
@@ -1353,6 +1361,8 @@ protected:
 TransformFeedbackBackwardDependencyTestInstance::TransformFeedbackBackwardDependencyTestInstance (Context& context, const TestParameters& parameters)
        : TransformFeedbackTestInstance (context, parameters)
 {
+       if (m_transformFeedbackProperties.transformFeedbackDraw == DE_FALSE)
+               TCU_THROW(NotSupportedError, "transformFeedbackDraw feature is not supported");
 }
 
 std::vector<VkDeviceSize> TransformFeedbackBackwardDependencyTestInstance::generateSizesList (const size_t bufBytes, const size_t chunkCount)