tests: Add matrix library (libglm-dev) and test
Update draw with uniform to take the uniform (matrix) as a
parameter and can now rotate the test triangle.
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 2152bef..81703bf 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -67,6 +67,10 @@
#include "xglimage.h"
#include "icd-bil.h"
+#define GLM_FORCE_RADIANS
+#include "glm/glm.hpp"
+#include <glm/gtc/matrix_transform.hpp>
+
#include "xglrenderframework.h"
#undef ASSERT_NO_FATAL_FAILURE
@@ -137,7 +141,7 @@
void DrawTriangleTest(const char *vertShaderText, const char *fragShaderText);
void DrawTriangleTwoUniformsFS(const char *vertShaderText, const char *fragShaderText);
void DrawTriangleWithVertexFetch(const char *vertShaderText, const char *fragShaderText);
- void DrawTriangleVSUniform(const char *vertShaderText, const char *fragShaderText);
+ void DrawTriangleVSUniform(const char *vertShaderText, const char *fragShaderText, const glm::mat4 matrix);
void CreatePipelineWithVertexFetch(XGL_PIPELINE* pipeline, XGL_SHADER vs, XGL_SHADER ps);
void CreatePipelineVSUniform(XGL_PIPELINE* pipeline, XGL_SHADER vs, XGL_SHADER ps);
@@ -615,11 +619,13 @@
}
-void XglRenderTest::DrawTriangleVSUniform(const char *vertShaderText, const char *fragShaderText)
+void XglRenderTest::DrawTriangleVSUniform(const char *vertShaderText, const char *fragShaderText,
+ const glm::mat4 matrix)
{
XGL_PIPELINE pipeline;
XGL_SHADER vs, ps;
XGL_RESULT err;
+ glm::mat4 MVP;
ASSERT_NO_FATAL_FAILURE(InitState());
ASSERT_NO_FATAL_FAILURE(InitViewport());
@@ -640,13 +646,10 @@
ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
- const int constantCount = 16;
- const float constants[constantCount] = { 0.0, -1.0, 0.0, 0.0,
- 1.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 1.0, 0.0,
- 0.0, 0.0, 0.0, 1.0 };
+ const int matrixSize = 16;
+ MVP = matrix;
- InitConstantBuffer(constantCount, sizeof(constants[0]), (const void*) constants);
+ InitConstantBuffer(matrixSize, sizeof(MVP[0]), (const void*) &MVP[0][0]);
// Create descriptor set for a uniform resource
const int slotCount = 1;
@@ -709,7 +712,6 @@
xglDeviceWaitIdle(m_device->device());
RecordImage(m_renderTarget);
-
}
void XglRenderTest::CreatePipelineWithVertexFetch(XGL_PIPELINE* pipeline, XGL_SHADER vs, XGL_SHADER ps)
@@ -1203,7 +1205,12 @@
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
- DrawTriangleVSUniform(vertShaderText, fragShaderText);
+ // Create identity matrix
+ glm::mat4 Model = glm::mat4(1.0f);
+ DrawTriangleVSUniform(vertShaderText, fragShaderText, Model);
+
+ Model = glm::rotate(Model, glm::radians(45.0f), glm::vec3(0.0f, 0.0f, 1.0f));
+ DrawTriangleVSUniform(vertShaderText, fragShaderText, Model);
}
int main(int argc, char **argv) {