1 /*------------------------------------------------------------------------
2  * Vulkan Conformance Tests
3  * ------------------------
4  *
5  * Copyright (c) 2016 The Khronos Group Inc.
6  * Copyright (c) 2016 Imagination Technologies Ltd.
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  *//*!
21  * \file
22  * \brief Robust Buffer Access Tests
23  *//*--------------------------------------------------------------------*/
24 
25 #include "vktRobustnessTests.hpp"
26 #include "vktRobustnessExtsTests.hpp"
27 #include "vktRobustnessBufferAccessTests.hpp"
28 #include "vktRobustnessVertexAccessTests.hpp"
29 #include "vktRobustnessIndexAccessTests.hpp"
30 #include "vktRobustBufferAccessWithVariablePointersTests.hpp"
31 #include "vktNonRobustBufferAccessTests.hpp"
32 #include "vktTestGroupUtil.hpp"
33 #include "vktRobustness1VertexAccessTests.hpp"
34 
35 namespace vkt
36 {
37 namespace robustness
38 {
39 
40 namespace
41 {
42 
43 class IsNodeNamed
44 {
45 public:
IsNodeNamed(const std::string& name)46 	IsNodeNamed(const std::string& name)
47 		: checkName(name)
48 	{}
operator ()(tcu::TestNode* node)49 	bool operator()(tcu::TestNode* node)
50 	{
51 		return checkName == std::string(node->getName());
52 	}
53 private:
54 	const std::string checkName;
55 };
56 
57 }
58 
createTests(tcu::TestContext& testCtx)59 tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
60 {
61 	de::MovePtr<tcu::TestCaseGroup> robustnessTests(new tcu::TestCaseGroup(testCtx, "robustness", ""));
62 
63 	robustnessTests->addChild(createBufferAccessTests(testCtx));
64 	robustnessTests->addChild(createVertexAccessTests(testCtx));
65 	robustnessTests->addChild(createIndexAccessTests(testCtx));
66 
67 	std::vector<tcu::TestNode*> children;
68 	robustnessTests->getChildren(children);
69 	std::vector<tcu::TestNode*>::iterator buffer_access = std::find_if(children.begin(), children.end(), IsNodeNamed("buffer_access"));
70 	if (buffer_access != children.end())
71 	{
72 		(*buffer_access)->addChild(createBufferAccessWithVariablePointersTests(testCtx));
73 	}
74 	else
75 	{
76 		de::MovePtr<tcu::TestCaseGroup> bufferAccess(new tcu::TestCaseGroup(testCtx, "buffer_access", ""));
77 		bufferAccess->addChild(createBufferAccessWithVariablePointersTests(testCtx));
78 		robustnessTests->addChild(bufferAccess.release());
79 	}
80 
81 	robustnessTests->addChild(createRobustness2Tests(testCtx));
82 	robustnessTests->addChild(createImageRobustnessTests(testCtx));
83 #ifndef CTS_USES_VULKANSC
84 	robustnessTests->addChild(createPipelineRobustnessTests(testCtx));
85 #endif
86 	robustnessTests->addChild(createNonRobustBufferAccessTests(testCtx));
87 
88 #ifndef CTS_USES_VULKANSC
89 	robustnessTests->addChild(createPipelineRobustnessBufferAccessTests(testCtx));
90 #endif
91 	robustnessTests->addChild(createRobustness1VertexAccessTests(testCtx));
92 
93 	return robustnessTests.release();
94 }
95 
96 } // robustness
97 } // vkt
98