SSBO: make it buildable and add a dummy testcase
authorPeter Gal <pgal.u-szeged@partner.samsung.com>
Thu, 3 Dec 2015 13:44:37 +0000 (14:44 +0100)
committerPeter Gal <pgal.u-szeged@partner.samsung.com>
Fri, 18 Dec 2015 08:43:13 +0000 (09:43 +0100)
external/vulkancts/modules/vulkan/ssbo/CMakeLists.txt
external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.hpp
external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp

index 991cbbb..2c8e966 100644 (file)
@@ -9,7 +9,7 @@ set(DEQP_VK_SSBO_SRCS
        vktSSBOLayoutTests.cpp
 )
 
-set(DEQP_VK_UBO_LIBS
+set(DEQP_VK_SSBO_LIBS
        tcutil
        vkutil
 )
index c2f4c30..822477a 100644 (file)
  *//*--------------------------------------------------------------------*/
 
 #include "vktSSBOLayoutCase.hpp"
-#include "gluRenderContext.hpp"
+#include "vkPrograms.hpp"
 #include "gluShaderProgram.hpp"
 #include "gluPixelTransfer.hpp"
 #include "gluContextInfo.hpp"
 #include "gluRenderContext.hpp"
 #include "gluProgramInterfaceQuery.hpp"
 #include "gluObjectWrapper.hpp"
+#include "gluShaderUtil.hpp"
+#include "gluVarType.hpp"
 #include "gluVarTypeUtil.hpp"
 #include "glwFunctions.hpp"
 #include "glwEnums.hpp"
@@ -61,18 +63,15 @@ using std::string;
 using std::vector;
 using std::map;
 
-namespace deqp
+namespace vkt
 {
-namespace gles31
+namespace ssbo
 {
 
 using glu::VarType;
 using glu::StructType;
 using glu::StructMember;
 
-namespace bb
-{
-
 struct LayoutFlagsFmt
 {
        deUint32 flags;
@@ -1294,13 +1293,12 @@ void generateWriteSrc (std::ostream& src, const ShaderInterface& interface, cons
        }
 }
 
-string generateComputeShader (glu::GLSLVersion glslVersion, const ShaderInterface& interface, const BufferLayout& layout, const vector<BlockDataPtr>& comparePtrs, const vector<BlockDataPtr>& writePtrs)
+string generateComputeShader (const ShaderInterface& interface, const BufferLayout& layout, const vector<BlockDataPtr>& comparePtrs, const vector<BlockDataPtr>& writePtrs)
 {
        std::ostringstream src;
 
-       DE_ASSERT(glslVersion == glu::GLSL_VERSION_310_ES || glslVersion == glu::GLSL_VERSION_430);
 
-       src << glu::getGLSLVersionDeclaration(glslVersion) << "\n";
+       src << "#version 310 es\n";
        src << "layout(local_size_x = 1) in;\n";
        src << "\n";
 
@@ -2039,6 +2037,7 @@ void unmapBuffers (const glw::Functions& gl, const vector<Buffer>& buffers)
 
 } // anonymous (utilities)
 
+/*
 class BufferManager
 {
 public:
@@ -2077,26 +2076,78 @@ deUint32 BufferManager::allocBuffer (void)
 
        return buf;
 }
+*/
 
-} // bb
+// SSBOLayoutCaseInstance
+
+class SSBOLayoutCaseInstance : public TestInstance
+{
+public:
+                                                               SSBOLayoutCaseInstance  (Context& context);
+       virtual                                         ~SSBOLayoutCaseInstance (void);
+       virtual tcu::TestStatus         iterate                                         (void);
+};
+
+SSBOLayoutCaseInstance::SSBOLayoutCaseInstance (Context& context)
+       : TestInstance (context)
+{
+}
+
+SSBOLayoutCaseInstance::~SSBOLayoutCaseInstance (void)
+{
+}
+
+tcu::TestStatus SSBOLayoutCaseInstance::iterate (void)
+{
+       return tcu::TestStatus::pass("OK");
+}
 
-using namespace bb;
 
 // SSBOLayoutCase.
 
-SSBOLayoutCase::SSBOLayoutCase (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, glu::GLSLVersion glslVersion, BufferMode bufferMode)
+SSBOLayoutCase::SSBOLayoutCase (tcu::TestContext& testCtx, const char* name, const char* description, BufferMode bufferMode)
        : TestCase              (testCtx, name, description)
-       , m_renderCtx   (renderCtx)
-       , m_glslVersion (glslVersion)
        , m_bufferMode  (bufferMode)
 {
-       DE_ASSERT(glslVersion == glu::GLSL_VERSION_310_ES || glslVersion == glu::GLSL_VERSION_430);
 }
 
 SSBOLayoutCase::~SSBOLayoutCase (void)
 {
 }
 
+void SSBOLayoutCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+       DE_ASSERT(!m_computeShaderSrc.empty());
+
+       programCollection.glslSources.add("compute") << glu::ComputeSource(m_computeShaderSrc);
+}
+
+TestInstance* SSBOLayoutCase::createInstance (Context& context) const
+{
+       return new SSBOLayoutCaseInstance(context);
+}
+
+void SSBOLayoutCase::init (void)
+{
+       BufferLayout                            refLayout;              // std140 / std430 layout.
+       RefDataStorage                          initialData;    // Initial data stored in buffer.
+       RefDataStorage                          writeData;              // Data written by compute shader.
+
+       vector<Buffer>                          buffers;                // Buffers allocated for storage
+       vector<BlockLocation>           blockLocations; // Block locations in storage (index, offset)
+
+       computeReferenceLayout  (refLayout, m_interface);
+       initRefDataStorage              (m_interface, refLayout, initialData);
+       initRefDataStorage              (m_interface, refLayout, writeData);
+       generateValues                  (refLayout, initialData.pointers, deStringHash(getName()) ^ 0xad2f7214);
+       generateValues                  (refLayout, writeData.pointers, deStringHash(getName()) ^ 0x25ca4e7);
+       copyNonWrittenData              (m_interface, refLayout, initialData.pointers, writeData.pointers);
+
+       m_computeShaderSrc = generateComputeShader(m_interface, refLayout, initialData.pointers, writeData.pointers);
+}
+
+#if 0
+
 SSBOLayoutCase::IterateResult SSBOLayoutCase::iterate (void)
 {
        TestLog&                                        log                             = m_testCtx.getLog();
@@ -2670,6 +2721,7 @@ bool SSBOLayoutCase::execute (deUint32 program)
 
        return isOk;
 }
+#endif
 
-} // gles31
-} // deqp
+} // ssbo
+} // vkt
index 91a04c1..4ba74b3 100644 (file)
  * \brief SSBO layout tests.
  *//*--------------------------------------------------------------------*/
 
+#include "vktTestCase.hpp"
 #include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
 #include "gluShaderUtil.hpp"
 #include "gluVarType.hpp"
 
-namespace glu
+namespace vkt
 {
-class RenderContext;
-}
-
-namespace deqp
-{
-namespace gles31
-{
-
-// Buffer block details.
-namespace bb
+namespace ssbo
 {
 
 enum BufferVarFlags
@@ -151,9 +142,7 @@ private:
 
 class BufferLayout;
 
-} // bb
-
-class SSBOLayoutCase : public tcu::TestCase
+class SSBOLayoutCase : public vkt::TestCase
 {
 public:
        enum BufferMode
@@ -164,12 +153,16 @@ public:
                BUFFERMODE_LAST
        };
 
-                                                               SSBOLayoutCase                          (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, glu::GLSLVersion glslVersion, BufferMode bufferMode);
-                                                               ~SSBOLayoutCase                         (void);
+                                                               SSBOLayoutCase                          (tcu::TestContext& testCtx, const char* name, const char* description, BufferMode bufferMode);
+       virtual                                         ~SSBOLayoutCase                         (void);
 
-       IterateResult                           iterate                                         (void);
+       virtual void                            initPrograms                            (vk::SourceCollections& programCollection) const;
+       virtual TestInstance*           createInstance                          (Context& context) const;
 
 protected:
+    void                        init                        (void);
+
+/*
        bool                                            compareStdBlocks                        (const bb::BufferLayout& refLayout, const bb::BufferLayout& cmpLayout) const;
        bool                                            compareSharedBlocks                     (const bb::BufferLayout& refLayout, const bb::BufferLayout& cmpLayout) const;
        bool                                            compareTypes                            (const bb::BufferLayout& refLayout, const bb::BufferLayout& cmpLayout) const;
@@ -178,18 +171,19 @@ protected:
        bool                                            checkIndexQueries                       (deUint32 program, const bb::BufferLayout& layout) const;
 
        bool                                            execute                                         (deUint32 program);
+*/
 
-       glu::RenderContext&                     m_renderCtx;
-       glu::GLSLVersion                        m_glslVersion;
        BufferMode                                      m_bufferMode;
-       bb::ShaderInterface                     m_interface;
+       ShaderInterface                         m_interface;
 
 private:
                                                                SSBOLayoutCase                          (const SSBOLayoutCase&);
        SSBOLayoutCase&                         operator=                                       (const SSBOLayoutCase&);
+
+       std::string                                     m_computeShaderSrc;
 };
 
-} // gles31
-} // deqp
+} // ssbo
+} // vkt
 
 #endif // _VKTSSBOLAYOUTCASE_HPP
index c74ed83..fff8452 100644 (file)
@@ -34,7 +34,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktSSBOLayoutTests.hpp"
-//#include "vktSSBOLayoutCase.hpp"
+#include "vktSSBOLayoutCase.hpp"
 
 #include "deUniquePtr.hpp"
 
@@ -43,10 +43,36 @@ namespace vkt
 namespace ssbo
 {
 
+using glu::VarType;
+using glu::StructType;
+
+class DEMOCase : public SSBOLayoutCase
+{
+public:
+    DEMOCase (tcu::TestContext& testCtx, const char* name, const char* description, const VarType& type, deUint32 layoutFlags, int numInstances)
+        : SSBOLayoutCase(testCtx, name, description, BUFFERMODE_PER_BLOCK)
+    {
+        BufferBlock& block = m_interface.allocBlock("Block");
+        block.addMember(BufferVar("var", type, ACCESS_READ|ACCESS_WRITE));
+        block.setFlags(layoutFlags);
+
+        if (numInstances > 0)
+        {
+            block.setArraySize(numInstances);
+            block.setInstanceName("block");
+        }
+
+               init();
+    }
+};
+
+
 tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> ssboTestGroup (new tcu::TestCaseGroup(testCtx, "ssbo", "Shader Storage Buffer Object Tests"));
 
+       ssboTestGroup->addChild(new DEMOCase(testCtx, "demo", "demo", VarType(glu::TYPE_FLOAT, glu::PRECISION_LAST), LAYOUT_STD140, 0));
+
        return ssboTestGroup.release();
 }