1 #ifndef _VKTDYNAMICSTATETESTCASEUTIL_HPP 2 #define _VKTDYNAMICSTATETESTCASEUTIL_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 Dynamic State Tests Test Case Utilities 25 *//*--------------------------------------------------------------------*/ 26 27 #include "tcuDefs.hpp" 28 #include "tcuResource.hpp" 29 30 #include "vktTestCase.hpp" 31 32 #include "gluShaderUtil.hpp" 33 #include "vkPrograms.hpp" 34 35 #include "deUniquePtr.hpp" 36 37 #include <map> 38 39 namespace vkt 40 { 41 namespace DynamicState 42 { 43 44 struct PositionColorVertex 45 { PositionColorVertexvkt::DynamicState::PositionColorVertex46 PositionColorVertex(const tcu::Vec4& position_, const tcu::Vec4& color_) 47 : position(position_) 48 , color(color_) 49 {} 50 tcu::Vec4 position; 51 tcu::Vec4 color; 52 }; 53 54 class ShaderSourceProvider 55 { 56 public: getSource(tcu::Archive & archive,const char * path)57 static std::string getSource(tcu::Archive& archive, const char* path) 58 { 59 de::UniquePtr<tcu::Resource> resource(archive.getResource(path)); 60 61 std::vector<deUint8> readBuffer(resource->getSize() + 1); 62 resource->read(&readBuffer[0], resource->getSize()); 63 readBuffer[readBuffer.size() - 1] = 0; 64 65 return std::string(reinterpret_cast<const char*>(&readBuffer[0])); 66 } 67 }; 68 69 typedef std::map<glu::ShaderType, const char*> ShaderMap; 70 71 template<typename Instance> 72 class InstanceFactory : public TestCase 73 { 74 public: InstanceFactory(tcu::TestContext & testCtx,const std::string & name,const std::string & desc,const std::map<glu::ShaderType,const char * > shaderPaths)75 InstanceFactory (tcu::TestContext& testCtx, const std::string& name, const std::string& desc, 76 const std::map<glu::ShaderType, const char*> shaderPaths) 77 : TestCase (testCtx, name, desc) 78 , m_shaderPaths (shaderPaths) 79 { 80 } 81 createInstance(Context & context) const82 TestInstance* createInstance (Context& context) const 83 { 84 return new Instance(context, m_shaderPaths); 85 } 86 initPrograms(vk::SourceCollections & programCollection) const87 virtual void initPrograms (vk::SourceCollections& programCollection) const 88 { 89 for (ShaderMap::const_iterator i = m_shaderPaths.begin(); i != m_shaderPaths.end(); ++i) 90 { 91 programCollection.glslSources.add(i->second) << 92 glu::ShaderSource(i->first, ShaderSourceProvider::getSource(m_testCtx.getArchive(), i->second)); 93 } 94 } 95 96 private: 97 const ShaderMap m_shaderPaths; 98 }; 99 100 } // DynamicState 101 } // vkt 102 103 #endif // _VKTDYNAMICSTATETESTCASEUTIL_HPP 104