diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 7112f51..947c8fe 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -299,7 +299,7 @@
         // Wait for work to finish before cleaning up.
         xglDeviceWaitIdle(m_device->device());
 
-        assert(m_renderTargetCount == 1);
+        assert(m_renderTargets.size() == 1);
         RecordImage(m_renderTargets[0]);
     }
 }
@@ -493,7 +493,7 @@
     m_memoryRefManager.AddMemoryRef(&constantBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -511,7 +511,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
     if (rotate)
@@ -792,7 +792,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -808,7 +808,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -863,9 +863,8 @@
     XglDescriptorSetObj descriptorSet(m_device);
     descriptorSet.AppendBuffer(XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &meshBuffer);
 
-    m_renderTargetCount = 2;
-    ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    ASSERT_NO_FATAL_FAILURE(InitRenderTarget(2));
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     m_memoryRefManager.AddMemoryRef(&meshBuffer);
 
     XGL_PIPELINE_CB_ATTACHMENT_STATE att = {};
@@ -895,7 +894,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -984,7 +983,7 @@
     pipelineobj.AddVertexInputBindings(&vi_binding,1);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
     ASSERT_XGL_SUCCESS(cmdBuffer.BeginCommandBuffer(renderPass()));
@@ -1006,7 +1005,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -1081,7 +1080,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1101,7 +1100,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -1176,7 +1175,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1196,7 +1195,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -1281,7 +1280,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1301,7 +1300,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -1376,7 +1375,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1396,7 +1395,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -1451,7 +1450,7 @@
     m_memoryRefManager.AddMemoryRef(&MVPBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1471,7 +1470,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
     RotateTriangleVSUniform(Projection, View, Model, &MVPBuffer, &cmdBuffer);
@@ -1529,7 +1528,7 @@
     descriptorSet.AppendDummy();
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1548,7 +1547,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -1618,7 +1617,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1638,7 +1637,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -1712,7 +1711,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1732,7 +1731,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -1826,7 +1825,7 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1845,7 +1844,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -1896,7 +1895,7 @@
     m_memoryRefManager.AddMemoryRef(&texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1915,7 +1914,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 TEST_F(XglRenderTest, TexturedTriangle)
@@ -1969,7 +1968,7 @@
     m_memoryRefManager.AddMemoryRef(&texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -1988,7 +1987,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 TEST_F(XglRenderTest, TexturedTriangleClip)
@@ -2053,7 +2052,7 @@
     m_memoryRefManager.AddMemoryRef(&texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2072,7 +2071,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 TEST_F(XglRenderTest, FSTriangle)
@@ -2126,7 +2125,7 @@
     m_memoryRefManager.AddMemoryRef(&texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2145,7 +2144,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 TEST_F(XglRenderTest, SamplerBindingsTriangle)
@@ -2220,7 +2219,7 @@
     m_memoryRefManager.AddMemoryRef(&texture3);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2239,7 +2238,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -2304,7 +2303,7 @@
     descriptorSet.AppendBuffer(XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &colorBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2323,7 +2322,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -2407,7 +2406,7 @@
     descriptorSet.AppendBuffer(XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2426,7 +2425,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
@@ -2505,7 +2504,7 @@
     descriptorSet.AppendBuffer(XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2524,7 +2523,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -2635,7 +2634,7 @@
     pipelineobj.SetDepthStencil(&ds_state);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2654,7 +2653,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -2757,7 +2756,7 @@
     m_memoryRefManager.AddMemoryRef(&texture7);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2776,7 +2775,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -2873,7 +2872,7 @@
     m_memoryRefManager.AddMemoryRef(&texture7);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -2892,7 +2891,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 
 }
@@ -3126,7 +3125,7 @@
     descriptorSet.AppendBuffer(XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &mixedBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargetCount);
+    m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
     XglCommandBufferObj cmdBuffer(m_device);
     cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
@@ -3145,7 +3144,7 @@
     cmdBuffer.EndCommandBuffer();
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargetCount; i++)
+    for (int i = 0; i < m_renderTargets.size(); i++)
         RecordImage(m_renderTargets[i]);
 }
 
