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