diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 86d7427..11ccb50 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -2,6 +2,9 @@
 
 find_package (OpenGL REQUIRED)
 find_package (GLUT REQUIRED)
+if(NOT EXISTS /usr/include/glm/glm.hpp)
+    message(FATAL_ERROR "Necessary libglm-dev headers cannot be found: sudo apt-get install libglm-dev")
+endif()
 
 SET(COMMON
     common.c
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) {
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index 547b580..d86adb7 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -179,6 +179,24 @@
     this->m_constantBufferView.format.numericFormat = XGL_NUM_FMT_FLOAT;
 }
 
+/*
+ * Update existing constant value with new data of exactly
+ * the same size.
+ */
+void XglRenderFramework::UpdateConstantBuffer(const void* data)
+{
+    XGL_RESULT err = XGL_SUCCESS;
+    XGL_UINT8 *pData;
+
+    err = xglMapMemory(m_constantBufferMem, 0, (XGL_VOID **) &pData);
+    ASSERT_XGL_SUCCESS(err);
+
+    memcpy(pData + this->m_constantBufferView.offset, data, this->m_constantBufferView.range);
+
+    err = xglUnmapMemory(m_constantBufferMem);
+    ASSERT_XGL_SUCCESS(err);
+}
+
 void XglRenderFramework::CreateQueryPool(XGL_QUERY_TYPE type, XGL_UINT slots,
                                          XGL_QUERY_POOL *pPool, XGL_GPU_MEMORY *pMem)
 {
diff --git a/tests/xglrenderframework.h b/tests/xglrenderframework.h
index 995a538..06f8a3d 100644
--- a/tests/xglrenderframework.h
+++ b/tests/xglrenderframework.h
@@ -45,6 +45,7 @@
     void InitPipeline();
     void InitMesh( XGL_UINT32 numVertices, XGL_GPU_SIZE vbStride, const void* vertices );
     void InitConstantBuffer( int constantCount, int constantSize, const void* data );
+    void UpdateConstantBuffer(const void* data);
     void InitViewport(float width, float height);
     void InitViewport();
     void InitRenderTarget();
