ShaderRenderCase: Templatize ShaderRenderCase to help building instances
authorPeter Gal <pgal.u-szeged@partner.samsung.com>
Wed, 26 Aug 2015 12:42:30 +0000 (14:42 +0200)
committerPeter Gal <pgal.u-szeged@partner.samsung.com>
Thu, 12 Nov 2015 18:52:42 +0000 (19:52 +0100)
external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp
external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.hpp
external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCaseTests.cpp

index a48ecc8..111925e 100644 (file)
@@ -279,47 +279,6 @@ void ShaderEvaluator::evaluate (ShaderEvalContext& ctx)
     m_evalFunc(ctx);
 }
 
-// ShaderRenderCase
-ShaderRenderCase::ShaderRenderCase     (tcu::TestContext& testCtx,
-                                                                       const string& name,
-                                                                       const string& description,
-                                                                       bool isVertexCase,
-                                                                       ShaderEvalFunc evalFunc)
-       : vkt::TestCase(testCtx, name, description)
-       , m_isVertexCase(isVertexCase)
-       , m_evaluator(new ShaderEvaluator(evalFunc))
-{
-}
-
-ShaderRenderCase::ShaderRenderCase     (tcu::TestContext& testCtx,
-                                                                       const string& name,
-                                                                       const string& description,
-                                                                       bool isVertexCase,
-                                                                       ShaderEvaluator* evaluator)
-       : vkt::TestCase(testCtx, name, description)
-       , m_isVertexCase(isVertexCase)
-       , m_evaluator(evaluator)
-{
-}
-
-ShaderRenderCase::~ShaderRenderCase (void)
-{
-}
-
-void ShaderRenderCase::initPrograms (vk::ProgramCollection<glu::ProgramSources>& programCollection) const
-{
-       if (!m_vertShaderSource.empty())
-               programCollection.add(m_name + "_vert") << glu::VertexSource(m_vertShaderSource);
-
-       if (!m_fragShaderSource.empty())
-               programCollection.add(m_name + "_frag") << glu::FragmentSource(m_fragShaderSource);
-}
-
-TestInstance* ShaderRenderCase::createInstance (Context& context) const
-{
-       return new ShaderRenderCaseInstance(context, m_name, m_isVertexCase, *m_evaluator);
-}
-
 // ShaderRenderCaseInstance.
 
 ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context, const string& name, bool isVertexCase, ShaderEvaluator& evaluator)
index a07a779..14c3662 100644 (file)
@@ -141,6 +141,7 @@ private:
 };
 
 
+template<typename Instance>
 class ShaderRenderCase : public vkt::TestCase
 {
 public:
@@ -148,16 +149,34 @@ public:
                                                                                                const std::string& name,
                                                                                                const std::string& description,
                                                                                                bool isVertexCase,
-                                                                                               ShaderEvalFunc evalFunc);
+                                                                                               ShaderEvalFunc evalFunc)
+                                                               : vkt::TestCase(testCtx, name, description)
+                                                               , m_isVertexCase(isVertexCase)
+                                                               , m_evaluator(new ShaderEvaluator(evalFunc))
+                                                       {}
+
                                                        ShaderRenderCase        (tcu::TestContext& testCtx,
                                                                                                const std::string& name,
                                                                                                const std::string& description,
                                                                                                bool isVertexCase,
-                                                                                               ShaderEvaluator* evaulator);
+                                                                                               ShaderEvaluator* evaluator)
+                                                               : vkt::TestCase(testCtx, name, description)
+                                                               , m_isVertexCase(isVertexCase)
+                                                               , m_evaluator(evaluator)
+                                                       {}
+
+
+       virtual                                 ~ShaderRenderCase       (void) {}
+       virtual void                    initPrograms            (vk::ProgramCollection<glu::ProgramSources>& programCollection) const
+                                                       {
+                                                               if (!m_vertShaderSource.empty())
+                                                                       programCollection.add(m_name + "_vert") << glu::VertexSource(m_vertShaderSource);
+
+                                                               if (!m_fragShaderSource.empty())
+                                                                       programCollection.add(m_name + "_frag") << glu::FragmentSource(m_fragShaderSource);
+                                                       }
 
-       virtual                                 ~ShaderRenderCase       (void);
-       virtual void                    initPrograms            (vk::ProgramCollection<glu::ProgramSources>& programCollection) const;
-       virtual TestInstance*   createInstance          (Context& context) const;
+       virtual TestInstance*   createInstance          (Context& context) const { return new Instance(context, m_name, m_isVertexCase, *m_evaluator); }
 
 protected:
     std::string                                m_vertShaderSource;
index f2bf446..0aad6ec 100644 (file)
@@ -10,11 +10,26 @@ namespace vkt
 namespace shaderrendercase
 {
 
+inline void eval_DEBUG      (ShaderEvalContext& c) { c.color.x() = 100; }
+
+class DummyTestRenderCase : public ShaderRenderCase<ShaderRenderCaseInstance>
+{
+public:
+       DummyTestRenderCase     (tcu::TestContext& testCtx,
+                                               const std::string& name,
+                                               const std::string& description,
+                                               bool isVertexCase,
+                                               ShaderEvalFunc evalFunc)
+               : ShaderRenderCase(testCtx, name, description, isVertexCase, evalFunc)
+       {}
+};
+
 tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> shaderRenderCaseTests (new tcu::TestCaseGroup(testCtx, "shaderRenderCase", "ShaderRenderCase Tests"));
 
-       shaderRenderCaseTests->addChild(new ShaderRenderCase(testCtx, "test", "test", false, evalCoordsPassthrough));
+       shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testVertex", "testVertex", true, eval_DEBUG));
+       shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testFragment", "testFragment", false, eval_DEBUG));
 
        return shaderRenderCaseTests.release();
 }