render_tests: write the result to TriangleTest.ppm
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index edf98e4..07a5b83 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -138,6 +138,7 @@
     void InitPipeline();
     void InitMesh( XGL_UINT32 numVertices, XGL_GPU_SIZE vbStride, const void* vertices );
     void DrawTriangleTest();
+    void WritePPM( const char *filename, int width, int height );
 
 protected:
     XGL_APPLICATION_INFO app_info;
@@ -713,9 +714,61 @@
     err = xglQueueSubmit( m_device->m_queue, 1, &m_cmdBuffer, m_numMemRefs, m_memRefs, NULL );
     ASSERT_XGL_SUCCESS( err );
 
+    err = xglQueueWaitIdle( m_device->m_queue );
+    ASSERT_XGL_SUCCESS( err );
+
+    WritePPM( "TriangleTest.ppm", width, height );
+
     ASSERT_XGL_SUCCESS(xglDestroyObject(pipeline));
 }
 
+void XglRenderTest::WritePPM( const char *filename, int width, int height )
+{
+    XGL_RESULT err;
+    int x, y;
+
+    const XGL_IMAGE_SUBRESOURCE sr = {
+        XGL_IMAGE_ASPECT_COLOR, 0, 0
+    };
+    XGL_SUBRESOURCE_LAYOUT sr_layout;
+    XGL_UINT data_size;
+
+    err = xglGetImageSubresourceInfo( m_image, &sr, XGL_INFO_TYPE_SUBRESOURCE_LAYOUT, &data_size, &sr_layout);
+    ASSERT_XGL_SUCCESS( err );
+    ASSERT_EQ(data_size, sizeof(sr_layout));
+
+    const char *ptr;
+
+    err = xglMapMemory( m_image_mem, 0, (XGL_VOID **) &ptr );
+    ASSERT_XGL_SUCCESS( err );
+
+    ptr += sr_layout.offset;
+
+    ofstream file (filename);
+    ASSERT_TRUE(file.is_open()) << "Unable to open file: " << filename;
+
+    file << "P6\n";
+    file << width << "\n";
+    file << height << "\n";
+    file << 255 << "\n";
+
+    for (y = 0; y < height; y++) {
+        const char *row = ptr;
+
+        for (x = 0; x < width; x++) {
+            file.write(row, 3);
+            row += 4;
+        }
+
+        ptr += sr_layout.rowPitch;
+    }
+
+    file.close();
+
+    err = xglUnmapMemory( m_image_mem );
+    ASSERT_XGL_SUCCESS( err );
+}
+
 TEST_F(XglRenderTest, TestDrawTriangle) {
     DrawTriangleTest();
 }