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 <map> 37 38 namespace vkt 39 { 40 namespace Draw 41 { 42 43 class ShaderSourceProvider 44 { 45 public: getSource(tcu::Archive & archive,const char * path)46 static std::string getSource (tcu::Archive& archive, const char* path) 47 { 48 tcu::Resource *resource = archive.getResource(path); 49 50 std::vector<deUint8> readBuffer(resource->getSize() + 1); 51 resource->read(&readBuffer[0], resource->getSize()); 52 readBuffer[readBuffer.size() - 1] = 0; 53 54 return reinterpret_cast<const char*>(&readBuffer[0]); 55 } 56 }; 57 58 typedef std::map<glu::ShaderType, const char*> ShaderMap; 59 60 template<typename Instance> 61 class InstanceFactory : public TestCase 62 { 63 public: InstanceFactory(tcu::TestContext & testCtx,const std::string & name,const std::string & desc,const std::map<glu::ShaderType,const char * > shaderPaths,const vk::VkPrimitiveTopology topology)64 InstanceFactory (tcu::TestContext& testCtx, const std::string& name, const std::string& desc, 65 const std::map<glu::ShaderType, const char*> shaderPaths, const vk::VkPrimitiveTopology topology) 66 : TestCase (testCtx, name, desc) 67 , m_shaderPaths (shaderPaths) 68 , m_topology (topology) 69 { 70 } 71 createInstance(Context & context) const72 TestInstance* createInstance (Context& context) const 73 { 74 return new Instance(context, m_shaderPaths, m_topology); 75 } 76 initPrograms(vk::SourceCollections & programCollection) const77 virtual void initPrograms (vk::SourceCollections& programCollection) const 78 { 79 for (ShaderMap::const_iterator i = m_shaderPaths.begin(); i != m_shaderPaths.end(); ++i) 80 { 81 programCollection.glslSources.add(i->second) << 82 glu::ShaderSource(i->first, ShaderSourceProvider::getSource(m_testCtx.getArchive(), i->second)); 83 } 84 } 85 86 private: 87 const ShaderMap m_shaderPaths; 88 const vk::VkPrimitiveTopology m_topology; 89 }; 90 91 } // Draw 92 } // vkt 93 94 #endif // _VKTDRAWTESTCASEUTIL_HPP