Home | History | Annotate | Download | only in draw
      1 #ifndef _VKTDRAWTESTCASEUTIL_HPP
      2 #define _VKTDRAWTESTCASEUTIL_HPP
      3 /*------------------------------------------------------------------------
      4  * Vulkan Conformance Tests
      5  * ------------------------
      6  *
      7  * Copyright (c) 2015 The Khronos Group Inc.
      8  * Copyright (c) 2015 Intel Corporation
      9  *
     10  * Licensed under the Apache License, Version 2.0 (the "License");
     11  * you may not use this file except in compliance with the License.
     12  * You may obtain a copy of the License at
     13  *
     14  *      http://www.apache.org/licenses/LICENSE-2.0
     15  *
     16  * Unless required by applicable law or agreed to in writing, software
     17  * distributed under the License is distributed on an "AS IS" BASIS,
     18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     19  * See the License for the specific language governing permissions and
     20  * limitations under the License.
     21  *
     22  *//*!
     23  * \file
     24  * \brief Draw Test Case Utils
     25  *//*--------------------------------------------------------------------*/
     26 
     27 
     28 #include "tcuDefs.hpp"
     29 #include "tcuResource.hpp"
     30 
     31 #include "vktTestCase.hpp"
     32 
     33 #include "gluShaderUtil.hpp"
     34 #include "vkPrograms.hpp"
     35 
     36 #include "deUniquePtr.hpp"
     37 
     38 #include <map>
     39 
     40 namespace vkt
     41 {
     42 namespace Draw
     43 {
     44 
     45 class ShaderSourceProvider
     46 {
     47 public:
     48 	static std::string getSource (tcu::Archive& archive, const char* path)
     49 	{
     50 		de::UniquePtr<tcu::Resource> resource(archive.getResource(path));
     51 
     52 		std::vector<deUint8> readBuffer(resource->getSize() + 1);
     53 		resource->read(&readBuffer[0], resource->getSize());
     54 		readBuffer[readBuffer.size() - 1] = 0;
     55 
     56 		return std::string(reinterpret_cast<const char*>(&readBuffer[0]));
     57 	}
     58 };
     59 
     60 typedef std::map<glu::ShaderType, const char*> ShaderMap;
     61 
     62 struct TestSpecBase
     63 {
     64 	ShaderMap				shaders;
     65 	vk::VkPrimitiveTopology	topology;
     66 };
     67 
     68 template<typename Instance>
     69 class InstanceFactory : public TestCase
     70 {
     71 public:
     72 	InstanceFactory (tcu::TestContext& testCtx, const std::string& name, const std::string& desc, typename Instance::TestSpec testSpec)
     73 		: TestCase		(testCtx, name, desc)
     74 		, m_testSpec	(testSpec)
     75 	{
     76 	}
     77 
     78 	TestInstance* createInstance (Context& context) const
     79 	{
     80 		return new Instance(context, m_testSpec);
     81 	}
     82 
     83 	virtual void initPrograms (vk::SourceCollections& programCollection) const
     84 	{
     85 		for (ShaderMap::const_iterator i = m_testSpec.shaders.begin(); i != m_testSpec.shaders.end(); ++i)
     86 		{
     87 			programCollection.glslSources.add(i->second) <<
     88 				glu::ShaderSource(i->first, ShaderSourceProvider::getSource(m_testCtx.getArchive(), i->second));
     89 		}
     90 	}
     91 
     92 private:
     93 	const typename Instance::TestSpec m_testSpec;
     94 };
     95 
     96 } // Draw
     97 } // vkt
     98 
     99 #endif // _VKTDRAWTESTCASEUTIL_HPP
    100