*//*--------------------------------------------------------------------*/
#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"
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;
}
}
-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";
} // anonymous (utilities)
+/*
class BufferManager
{
public:
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();
return isOk;
}
+#endif
-} // gles31
-} // deqp
+} // ssbo
+} // vkt
* \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
class BufferLayout;
-} // bb
-
-class SSBOLayoutCase : public tcu::TestCase
+class SSBOLayoutCase : public vkt::TestCase
{
public:
enum BufferMode
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;
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
*//*--------------------------------------------------------------------*/
#include "vktSSBOLayoutTests.hpp"
-//#include "vktSSBOLayoutCase.hpp"
+#include "vktSSBOLayoutCase.hpp"
#include "deUniquePtr.hpp"
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();
}