diff --git a/layers/draw_state.c b/layers/draw_state.c
index 1e8b163..b16a5ef 100644
--- a/layers/draw_state.c
+++ b/layers/draw_state.c
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <assert.h>
 #include <pthread.h>
+#include <unistd.h>
 #include "xgl_struct_string_helper.h"
 #include "xgl_struct_graphviz_helper.h"
 #include "draw_state.h"
@@ -878,6 +879,10 @@
     if (autoDumpOnce) {
         autoDumpOnce = 0;
         dumpDotFile("pipeline_dump.dot");
+        // Convert dot to png if dot available
+        if(access( "/usr/bin/dot", X_OK) != -1) {
+            system("/usr/bin/dot pipeline_dump.dot -Tpng -o pipeline_dump.png");
+        }
     }
 }
 
@@ -2037,6 +2042,23 @@
     dumpDotFile(outFileName);
 }
 
+XGL_VOID drawStateDumpPngFile(char* outFileName)
+{
+    char dotExe[32] = "/usr/bin/dot";
+    if( access(dotExe, X_OK) != -1) {
+        dumpDotFile("/tmp/tmp.dot");
+        char dotCmd[1024];
+        sprintf(dotCmd, "%s /tmp/tmp.dot -Tpng -o %s", dotExe, outFileName);
+        system(dotCmd);
+        remove("/tmp/tmp.dot");
+    }
+    else {
+        char str[1024];
+        sprintf(str, "Cannot execute dot program at (%s) to dump requested %s file.", dotExe, outFileName);
+        layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, NULL, 0, DRAWSTATE_MISSING_DOT_PROGRAM, "DS", str);
+    }
+}
+
 XGL_LAYER_EXPORT XGL_VOID* XGLAPI xglGetProcAddr(XGL_PHYSICAL_GPU gpu, const XGL_CHAR* funcName)
 {
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
@@ -2071,6 +2093,8 @@
         return xglDeviceWaitIdle;
     else if (!strncmp("drawStateDumpDotFile", (const char *) funcName, sizeof("drawStateDumpDotFile")))
         return drawStateDumpDotFile;
+    else if (!strncmp("drawStateDumpPngFile", (const char *) funcName, sizeof("drawStateDumpPngFile")))
+        return drawStateDumpPngFile;
     else if (!strncmp("xglGetMemoryHeapCount", (const char *) funcName, sizeof("xglGetMemoryHeapCount")))
         return xglGetMemoryHeapCount;
     else if (!strncmp("xglGetMemoryHeapInfo", (const char *) funcName, sizeof("xglGetMemoryHeapInfo")))
diff --git a/layers/draw_state.h b/layers/draw_state.h
index d505c46..73231e5 100644
--- a/layers/draw_state.h
+++ b/layers/draw_state.h
@@ -44,6 +44,7 @@
     DRAWSTATE_INVALID_PIPELINE              = 16, // Invalid DS referenced
     DRAWSTATE_VTX_INDEX_OUT_OF_BOUNDS       = 17, // binding in xglCmdBindVertexData() too large for PSO's pVertexBindingDescriptions array
     DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT  = 18, // Invalid dyn state object
+    DRAWSTATE_MISSING_DOT_PROGRAM           = 19, // No "dot" program in order to generate png image
 } DRAW_STATE_ERROR;
 
 typedef enum _DRAW_TYPE
@@ -59,5 +60,7 @@
 
 //prototypes for extension functions
 XGL_VOID drawStateDumpDotFile(char* outFileName);
-// Func ptr typedef
+XGL_VOID drawStateDumpPngFile(char* outFileName);
+// Func ptr typedefs
 typedef XGL_VOID (*DRAW_STATE_DUMP_DOT_FILE)(char*);
+typedef XGL_VOID (*DRAW_STATE_DUMP_PNG_FILE)(char*);
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index cc96698..2d1301d 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -276,15 +276,17 @@
 
     GenerateClearAndPrepareBufferCmds();
     GenerateBindRenderTargetCmd();
-#ifdef DUMP_STATE_DOT
-    DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)xglGetProcAddr(gpu(), (XGL_CHAR*)"drawStateDumpDotFile");
-    pDSDumpDot((char*)"triTest.dot");
-#endif
+
     GenerateBindStateAndPipelineCmds();
 
     pipelineobj->BindPipelineCommandBuffer(m_cmdBuffer,descriptorSet);
     descriptorSet->BindCommandBuffer(m_cmdBuffer);
-
+#ifdef DUMP_STATE_DOT
+    DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)xglGetProcAddr(gpu(), (XGL_CHAR*)"drawStateDumpDotFile");
+    pDSDumpDot((char*)"triTest.dot");
+    DRAW_STATE_DUMP_PNG_FILE pDSDumpPng = (DRAW_STATE_DUMP_PNG_FILE)xglGetProcAddr(gpu(), (XGL_CHAR*)"drawStateDumpPngFile");
+    pDSDumpPng((char*)"triTest.png");
+#endif
     // render the triangle
     xglCmdDraw( m_cmdBuffer, 0, 3*numTris, 0, 1 );
 
@@ -340,13 +342,12 @@
     GenerateBindRenderTargetCmd();
     GenerateBindStateAndPipelineCmds();
 
+    pipelineobj.BindPipelineCommandBuffer(m_cmdBuffer,&descriptorSet);
+    descriptorSet.BindCommandBuffer(m_cmdBuffer);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)xglGetProcAddr(gpu(), (XGL_CHAR*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triUniFS.dot");
 #endif
-    pipelineobj.BindPipelineCommandBuffer(m_cmdBuffer,&descriptorSet);
-    descriptorSet.BindCommandBuffer(m_cmdBuffer);
-
     // render the triangle
     xglCmdDraw( m_cmdBuffer, 0, 3, 0, 1 );
 
@@ -1052,7 +1053,7 @@
     GenerateBindRenderTargetCmd();
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)xglGetProcAddr(gpu(), (XGL_CHAR*)"drawStateDumpDotFile");
-    pDSDumpDot((char*)"triTest.dot");
+    pDSDumpDot((char*)"triTest2.dot");
 #endif
     GenerateBindStateAndPipelineCmds();
 
