diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 01c9a56..a4385ed 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -4846,26 +4846,10 @@
     return result;
 }
 
-VkBool32 ValidateDependencies(const layer_data* my_data, VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, std::vector<DAGNode>& subpass_to_node) {
-   VkBool32 skip_call = false;
+VkBool32 ValidateDependencies(const layer_data* my_data, VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const std::vector<DAGNode>& subpass_to_node) {
+    VkBool32 skip_call = false;
     std::vector<std::vector<uint32_t>> output_attachment_to_subpass(pCreateInfo->attachmentCount);
     std::vector<std::vector<uint32_t>> input_attachment_to_subpass(pCreateInfo->attachmentCount);
-
-    // Create DAG
-    for (uint32_t i = 0; i < pCreateInfo->subpassCount; ++i) {
-        DAGNode& subpass_node = subpass_to_node[i];
-        subpass_node.pass = i;
-    }
-    for (uint32_t i = 0; i < pCreateInfo->dependencyCount; ++i) {
-        const VkSubpassDependency& dependency = pCreateInfo->pDependencies[i];
-        if (dependency.srcSubpass > dependency.dstSubpass) {
-            skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, DRAWSTATE_INVALID_RENDERPASS, "DS",
-                                 "Dependency graph must be specified such that an earlier pass cannot depend on a later pass.");
-        }
-        subpass_to_node[dependency.dstSubpass].prev.push_back(dependency.srcSubpass);
-        subpass_to_node[dependency.srcSubpass].next.push_back(dependency.dstSubpass);
-    }
-
     // Find for each attachment the subpasses that use them.
     for (uint32_t i = 0; i < pCreateInfo->subpassCount; ++i) {
         const VkSubpassDescription& subpass = pCreateInfo->pSubpasses[i];
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 8fa1223..538d89a 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -2917,10 +2917,34 @@
         MT_PASS_ATTACHMENT_INFO pass_info;
         pass_info.load_op = desc.loadOp;
         pass_info.store_op = desc.storeOp;
+        pass_info.attachment = i;
         loader_platform_thread_lock_mutex(&globalLock);
         my_data->passMap[*pRenderPass].attachments.push_back(pass_info);
         loader_platform_thread_unlock_mutex(&globalLock);
     }
+    //TODO: Maybe fill list and then copy instead of locking
+    loader_platform_thread_lock_mutex(&globalLock);
+    std::unordered_map<uint32_t, bool>& attachment_first_read = my_data->passMap[*pRenderPass].attachment_first_read;
+    for (uint32_t i = 0; i < pCreateInfo->subpassCount; ++i) {
+        const VkSubpassDescription& subpass = pCreateInfo->pSubpasses[i];
+        for (uint32_t j = 0; j < subpass.inputAttachmentCount; ++j) {
+            uint32_t attachment = subpass.pInputAttachments[j].attachment;
+            if (attachment_first_read.count(attachment)) continue;
+            attachment_first_read.insert(std::make_pair(attachment, true));
+        }
+        for (uint32_t j = 0; j < subpass.colorAttachmentCount; ++j) {
+            uint32_t attachment = subpass.pColorAttachments[j].attachment;
+            if (attachment_first_read.count(attachment)) continue;
+            attachment_first_read.insert(std::make_pair(attachment, false));
+        }
+        if (subpass.pDepthStencilAttachment && subpass.pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
+            uint32_t attachment = subpass.pDepthStencilAttachment->attachment;
+            if (attachment_first_read.count(attachment)) continue;
+            attachment_first_read.insert(std::make_pair(attachment, false));
+        }
+    }
+    loader_platform_thread_unlock_mutex(&globalLock);
+
     return result;
 }
 
@@ -2941,9 +2965,14 @@
                 MT_FB_ATTACHMENT_INFO& fb_info = my_data->fbMap[pass_info.fb].attachments[i];
                 if (pass_info.attachments[i].load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) {
                     set_memory_valid(my_data, fb_info.mem, true, fb_info.image);
+                } else if (pass_info.attachments[i].load_op == VK_ATTACHMENT_LOAD_OP_DONT_CARE) {
+                    set_memory_valid(my_data, fb_info.mem, false, fb_info.image);
                 } else if (pass_info.attachments[i].load_op == VK_ATTACHMENT_LOAD_OP_LOAD) {
                     skip_call |= validate_memory_is_valid(my_data, fb_info.mem, fb_info.image);
                 }
+                if (pass_info.attachment_first_read[pass_info.attachments[i].attachment]) {
+                    skip_call |= validate_memory_is_valid(my_data, fb_info.mem, fb_info.image);
+                }
             }
             auto cb_data = my_data->cbMap.find(cmdBuffer);
             if (cb_data != my_data->cbMap.end()) {
diff --git a/layers/mem_tracker.h b/layers/mem_tracker.h
index 1bf6ce5..d153115 100644
--- a/layers/mem_tracker.h
+++ b/layers/mem_tracker.h
@@ -25,6 +25,7 @@
  */
 #pragma once
 #include <vector>
+#include <unordered_map>
 #include "vulkan/vk_layer.h"
 #include "vulkan/vk_ext_debug_report.h"
 
@@ -161,13 +162,15 @@
 };
 
 struct MT_PASS_ATTACHMENT_INFO {
+   uint32_t attachment;
    VkAttachmentLoadOp load_op; 
-   VkAttachmentStoreOp store_op; 
+   VkAttachmentStoreOp store_op;
 };
 
 struct MT_PASS_INFO {
     VkFramebuffer fb;
     std::vector<MT_PASS_ATTACHMENT_INFO> attachments;
+    std::unordered_map<uint32_t, bool> attachment_first_read;
 };
 
 // Associate fenceId with a fence object
