diff --git a/include/vulkan.h b/include/vulkan.h
index 79ee9d4..efedb8c 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -982,27 +982,25 @@
 typedef VkFlags VkPipelineStageFlags;
 
 typedef enum {
-    VK_MEMORY_OUTPUT_HOST_WRITE_BIT = 0x00000001,
-    VK_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002,
-    VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004,
-    VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008,
-    VK_MEMORY_OUTPUT_TRANSFER_BIT = 0x00000010,
-} VkMemoryOutputFlagBits;
-typedef VkFlags VkMemoryOutputFlags;
-
-typedef enum {
-    VK_MEMORY_INPUT_HOST_READ_BIT = 0x00000001,
-    VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002,
-    VK_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004,
-    VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008,
-    VK_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010,
-    VK_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020,
-    VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040,
-    VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080,
-    VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT = 0x00000100,
-    VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200,
-} VkMemoryInputFlagBits;
-typedef VkFlags VkMemoryInputFlags;
+    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
+    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
+    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
+    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
+    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
+    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
+    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
+    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
+    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
+    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
+    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
+    VK_ACCESS_HOST_READ_BIT = 0x00002000,
+    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
+    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
+    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+} VkAccessFlagBits;
+typedef VkFlags VkAccessFlags;
 
 typedef enum {
     VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
@@ -1959,8 +1957,8 @@
     uint32_t                                    dstSubpass;
     VkPipelineStageFlags                        srcStageMask;
     VkPipelineStageFlags                        dstStageMask;
-    VkMemoryOutputFlags                         outputMask;
-    VkMemoryInputFlags                          inputMask;
+    VkAccessFlags                               srcAccessMask;
+    VkAccessFlags                               dstAccessMask;
     VkDependencyFlags                           dependencyFlags;
 } VkSubpassDependency;
 
@@ -2088,8 +2086,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    VkMemoryOutputFlags                         outputMask;
-    VkMemoryInputFlags                          inputMask;
+    VkAccessFlags                               srcAccessMask;
+    VkAccessFlags                               dstAccessMask;
     uint32_t                                    srcQueueFamilyIndex;
     uint32_t                                    dstQueueFamilyIndex;
     VkBuffer                                    buffer;
@@ -2121,8 +2119,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    VkMemoryOutputFlags                         outputMask;
-    VkMemoryInputFlags                          inputMask;
+    VkAccessFlags                               srcAccessMask;
+    VkAccessFlags                               dstAccessMask;
     VkImageLayout                               oldLayout;
     VkImageLayout                               newLayout;
     uint32_t                                    srcQueueFamilyIndex;
@@ -2134,8 +2132,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    VkMemoryOutputFlags                         outputMask;
-    VkMemoryInputFlags                          inputMask;
+    VkAccessFlags                               srcAccessMask;
+    VkAccessFlags                               dstAccessMask;
 } VkMemoryBarrier;
 
 
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 3b5bc72..ad1f2e8 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -1321,13 +1321,27 @@
 }
 
 static
-bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
+bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
 {
-    VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_TRANSFER_BIT |
-        VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-        VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
+    VkAccessFlagBits allFlags = (VkAccessFlagBits)(
+            VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+            VK_ACCESS_INDEX_READ_BIT |
+            VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+            VK_ACCESS_UNIFORM_READ_BIT |
+            VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
+            VK_ACCESS_SHADER_READ_BIT |
+            VK_ACCESS_SHADER_WRITE_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_TRANSFER_READ_BIT |
+            VK_ACCESS_TRANSFER_WRITE_BIT |
+            VK_ACCESS_HOST_READ_BIT |
+            VK_ACCESS_HOST_WRITE_BIT |
+            VK_ACCESS_MEMORY_READ_BIT |
+            VK_ACCESS_MEMORY_WRITE_BIT);
+
     if(enumerator & (~allFlags))
     {
         return false;
@@ -1337,7 +1351,7 @@
 }
 
 static
-std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
+std::string EnumeratorString(VkAccessFlagBits const& enumerator)
 {
     if(!ValidateEnumerator(enumerator))
     {
@@ -1345,110 +1359,73 @@
     }
 
     std::vector<std::string> strings;
-    if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
+    if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
+        strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
+    if(enumerator & VK_ACCESS_INDEX_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
+        strings.push_back("VK_ACCESS_INDEX_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
+    if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
+        strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
+    if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
+        strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
+    if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
+        strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
     }
-
-    std::string enumeratorString;
-    for(auto const& string : strings)
+    if(enumerator & VK_ACCESS_SHADER_READ_BIT)
     {
-        enumeratorString += string;
-
-        if(string != strings.back())
-        {
-            enumeratorString += '|';
-        }
+        strings.push_back("VK_ACCESS_SHADER_READ_BIT");
     }
-
-    return enumeratorString;
-}
-
-static
-bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
-{
-    VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
-        VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-        VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-        VK_MEMORY_INPUT_SHADER_READ_BIT |
-        VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-        VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-        VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-        VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
-        VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-        VK_MEMORY_INPUT_HOST_READ_BIT);
-    if(enumerator & (~allFlags))
+    if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
     {
-        return false;
+        strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
     }
-
-    return true;
-}
-
-static
-std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
-{
-    if(!ValidateEnumerator(enumerator))
+    if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
     {
-        return "unrecognized enumerator";
+        strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
     }
-
-    std::vector<std::string> strings;
-    if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
+    if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
+        strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
+    if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
+        strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
+    if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
+        strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
+    if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
+        strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
+    if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
+        strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
+    if(enumerator & VK_ACCESS_HOST_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
+        strings.push_back("VK_ACCESS_HOST_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
+    if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
+        strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
+    if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
+        strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
     }
-    if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
+    if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
     {
-        strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
-    }
-    if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
-    {
-        strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
+        strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
     }
 
     std::string enumeratorString;
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 320e189..d2531b8 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -783,7 +783,7 @@
     vkCmdFillBuffer(cmd_.handle(), bufs[0].handle(), 0, 4, 0x11111111);
     // is this necessary?
     VkBufferMemoryBarrier memory_barrier = bufs[0].buffer_memory_barrier(
-            VK_MEMORY_OUTPUT_TRANSFER_BIT, VK_MEMORY_INPUT_TRANSFER_BIT, 0, 4);
+            VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT, 0, 4);
     VkBufferMemoryBarrier *pmemory_barrier = &memory_barrier;
 
     VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
@@ -795,7 +795,7 @@
     vkCmdCopyBuffer(cmd_.handle(), bufs[0].handle(), bufs[1].handle(), 1, &region);
 
     memory_barrier = bufs[1].buffer_memory_barrier(
-            VK_MEMORY_OUTPUT_TRANSFER_BIT, VK_MEMORY_INPUT_TRANSFER_BIT, 0, 4);
+            VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT, 0, 4);
     pmemory_barrier = &memory_barrier;
     vkCmdPipelineBarrier(cmd_.handle(), src_stages, dest_stages, 0, 1, (const void * const*)&pmemory_barrier);
 
@@ -809,7 +809,7 @@
     // Additional commands could go into the buffer here before the wait.
 
     memory_barrier = bufs[1].buffer_memory_barrier(
-            VK_MEMORY_OUTPUT_TRANSFER_BIT, VK_MEMORY_INPUT_HOST_READ_BIT, 0, 4);
+            VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, 0, 4);
     pmemory_barrier = &memory_barrier;
     vkCmdWaitEvents(cmd_.handle(), 1, &event, src_stages, dest_stages, 1, (const void **)&pmemory_barrier);
 
@@ -1195,21 +1195,21 @@
 
         img.init(dev_, img_info, image_reqs);
         const VkFlags all_cache_outputs =
-                VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-                VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-                VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-                VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-                VK_MEMORY_OUTPUT_TRANSFER_BIT;
+                VK_ACCESS_HOST_WRITE_BIT |
+                VK_ACCESS_SHADER_WRITE_BIT |
+                VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+                VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+                VK_ACCESS_TRANSFER_WRITE_BIT;
         const VkFlags all_cache_inputs =
-                VK_MEMORY_INPUT_HOST_READ_BIT |
-                VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-                VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-                VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-                VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-                VK_MEMORY_INPUT_SHADER_READ_BIT |
-                VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-                VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-                VK_MEMORY_INPUT_TRANSFER_BIT;
+                VK_ACCESS_HOST_READ_BIT |
+                VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+                VK_ACCESS_INDEX_READ_BIT |
+                VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+                VK_ACCESS_UNIFORM_READ_BIT |
+                VK_ACCESS_SHADER_READ_BIT |
+                VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+                VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+                VK_ACCESS_MEMORY_READ_BIT;
 
         std::vector<VkImageMemoryBarrier> to_clear;
         std::vector<VkImageMemoryBarrier *> p_to_clear;
@@ -1374,21 +1374,21 @@
 
         img.init(dev_, img_info, image_reqs);
         const VkFlags all_cache_outputs =
-                VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-                VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-                VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-                VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-                VK_MEMORY_OUTPUT_TRANSFER_BIT;
+                VK_ACCESS_HOST_WRITE_BIT |
+                VK_ACCESS_SHADER_WRITE_BIT |
+                VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+                VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+                VK_ACCESS_TRANSFER_WRITE_BIT;
         const VkFlags all_cache_inputs =
-                VK_MEMORY_INPUT_HOST_READ_BIT |
-                VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-                VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-                VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-                VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-                VK_MEMORY_INPUT_SHADER_READ_BIT |
-                VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-                VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-                VK_MEMORY_INPUT_TRANSFER_BIT;
+                VK_ACCESS_HOST_READ_BIT |
+                VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+                VK_ACCESS_INDEX_READ_BIT |
+                VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+                VK_ACCESS_UNIFORM_READ_BIT |
+                VK_ACCESS_SHADER_READ_BIT |
+                VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+                VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+                VK_ACCESS_MEMORY_READ_BIT;
 
         std::vector<VkImageMemoryBarrier> to_clear;
         std::vector<VkImageMemoryBarrier *> p_to_clear;
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 5046786..aeacc82 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -556,20 +556,20 @@
         VkCommandBufferObj *cmd_buf,
         VkImageAspectFlags aspect,
         VkFlags output_mask /*=
-            VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-            VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-            VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
+            VK_ACCESS_HOST_WRITE_BIT |
+            VK_ACCESS_SHADER_WRITE_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
             VK_MEMORY_OUTPUT_COPY_BIT*/,
         VkFlags input_mask /*=
-            VK_MEMORY_INPUT_HOST_READ_BIT |
-            VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-            VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-            VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-            VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-            VK_MEMORY_INPUT_SHADER_READ_BIT |
-            VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
+            VK_ACCESS_HOST_READ_BIT |
+            VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+            VK_ACCESS_INDEX_READ_BIT |
+            VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+            VK_ACCESS_UNIFORM_READ_BIT |
+            VK_ACCESS_SHADER_READ_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
             VK_MEMORY_INPUT_COPY_BIT*/,
         VkImageLayout image_layout)
 {
@@ -593,21 +593,21 @@
 {
     VkFlags output_mask, input_mask;
     const VkFlags all_cache_outputs =
-            VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-            VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-            VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_TRANSFER_BIT;
+            VK_ACCESS_HOST_WRITE_BIT |
+            VK_ACCESS_SHADER_WRITE_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_TRANSFER_WRITE_BIT;
     const VkFlags all_cache_inputs =
-            VK_MEMORY_INPUT_HOST_READ_BIT |
-            VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-            VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-            VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-            VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-            VK_MEMORY_INPUT_SHADER_READ_BIT |
-            VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_TRANSFER_BIT;
+            VK_ACCESS_HOST_READ_BIT |
+            VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+            VK_ACCESS_INDEX_READ_BIT |
+            VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+            VK_ACCESS_UNIFORM_READ_BIT |
+            VK_ACCESS_SHADER_READ_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+            VK_ACCESS_MEMORY_READ_BIT;
 
     if (image_layout == m_descriptorImageInfo.imageLayout) {
         return;
@@ -615,18 +615,18 @@
 
     switch (image_layout) {
     case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
-        output_mask = VK_MEMORY_OUTPUT_TRANSFER_BIT;
-        input_mask = VK_MEMORY_INPUT_SHADER_READ_BIT | VK_MEMORY_INPUT_TRANSFER_BIT;
+        output_mask = VK_ACCESS_TRANSFER_WRITE_BIT;
+        input_mask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_MEMORY_READ_BIT;
         break;
 
     case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
-        output_mask = VK_MEMORY_OUTPUT_TRANSFER_BIT;
-        input_mask = VK_MEMORY_INPUT_SHADER_READ_BIT | VK_MEMORY_INPUT_TRANSFER_BIT;
+        output_mask = VK_ACCESS_TRANSFER_WRITE_BIT;
+        input_mask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_MEMORY_READ_BIT;
         break;
 
     case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
-        output_mask = VK_MEMORY_OUTPUT_TRANSFER_BIT;
-        input_mask = VK_MEMORY_INPUT_SHADER_READ_BIT | VK_MEMORY_INPUT_TRANSFER_BIT;
+        output_mask = VK_ACCESS_TRANSFER_WRITE_BIT;
+        input_mask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_MEMORY_READ_BIT;
         break;
 
     default:
@@ -922,21 +922,21 @@
 
 
 void VkConstantBufferObj::BufferMemoryBarrier(
-        VkFlags outputMask /*=
-            VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-            VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-            VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
+        VkFlags srcAccessMask /*=
+            VK_ACCESS_HOST_WRITE_BIT |
+            VK_ACCESS_SHADER_WRITE_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
             VK_MEMORY_OUTPUT_COPY_BIT*/,
-        VkFlags inputMask /*=
-            VK_MEMORY_INPUT_HOST_READ_BIT |
-            VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-            VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-            VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-            VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-            VK_MEMORY_INPUT_SHADER_READ_BIT |
-            VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
+        VkFlags dstAccessMask /*=
+            VK_ACCESS_HOST_READ_BIT |
+            VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+            VK_ACCESS_INDEX_READ_BIT |
+            VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+            VK_ACCESS_UNIFORM_READ_BIT |
+            VK_ACCESS_SHADER_READ_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
             VK_MEMORY_INPUT_COPY_BIT*/)
 {
     VkResult err = VK_SUCCESS;
@@ -970,7 +970,7 @@
     ASSERT_VK_SUCCESS(err);
 
     VkBufferMemoryBarrier memory_barrier =
-        buffer_memory_barrier(outputMask, inputMask, 0, m_numVertices * m_stride);
+        buffer_memory_barrier(srcAccessMask, dstAccessMask, 0, m_numVertices * m_stride);
     VkBufferMemoryBarrier *pmemory_barrier = &memory_barrier;
 
     VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_ALL_GPU_COMMANDS;
@@ -1362,11 +1362,11 @@
 {
     uint32_t i;
     const VkFlags output_mask =
-        VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-        VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-        VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_TRANSFER_BIT;
+        VK_ACCESS_HOST_WRITE_BIT |
+        VK_ACCESS_SHADER_WRITE_BIT |
+        VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+        VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+        VK_ACCESS_TRANSFER_WRITE_BIT;
     const VkFlags input_mask = 0;
 
     // whatever we want to do, we do it to the whole buffer
@@ -1379,8 +1379,8 @@
 
     VkImageMemoryBarrier memory_barrier = {};
     memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-    memory_barrier.outputMask = output_mask;
-    memory_barrier.inputMask = input_mask;
+    memory_barrier.srcAccessMask = output_mask;
+    memory_barrier.dstAccessMask = input_mask;
     memory_barrier.newLayout = VK_IMAGE_LAYOUT_GENERAL;
     memory_barrier.subresourceRange = srRange;
     VkImageMemoryBarrier *pmemory_barrier = &memory_barrier;
@@ -1460,21 +1460,21 @@
 {
     uint32_t i;
     const VkFlags output_mask =
-        VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-        VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-        VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-        VK_MEMORY_OUTPUT_TRANSFER_BIT;
+        VK_ACCESS_HOST_WRITE_BIT |
+        VK_ACCESS_SHADER_WRITE_BIT |
+        VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+        VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+        VK_ACCESS_TRANSFER_WRITE_BIT;
     const VkFlags input_mask =
-        VK_MEMORY_INPUT_HOST_READ_BIT |
-        VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-        VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-        VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-        VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-        VK_MEMORY_INPUT_SHADER_READ_BIT |
-        VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-        VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-        VK_MEMORY_INPUT_TRANSFER_BIT;
+        VK_ACCESS_HOST_READ_BIT |
+        VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+        VK_ACCESS_INDEX_READ_BIT |
+        VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+        VK_ACCESS_UNIFORM_READ_BIT |
+        VK_ACCESS_SHADER_READ_BIT |
+        VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+        VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+        VK_ACCESS_MEMORY_READ_BIT;
 
     VkImageSubresourceRange srRange = {};
     srRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
@@ -1485,8 +1485,8 @@
 
     VkImageMemoryBarrier memory_barrier = {};
     memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-    memory_barrier.outputMask = output_mask;
-    memory_barrier.inputMask = input_mask;
+    memory_barrier.srcAccessMask = output_mask;
+    memory_barrier.dstAccessMask = input_mask;
     memory_barrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
     memory_barrier.subresourceRange = srRange;
     VkImageMemoryBarrier *pmemory_barrier = &memory_barrier;
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index bc3f45c..ee08ac9 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -214,22 +214,22 @@
     VkConstantBufferObj(VkDeviceObj *device, int constantCount, int constantSize, const void* data);
     ~VkConstantBufferObj();
     void BufferMemoryBarrier(
-        VkFlags outputMask =
-            VK_MEMORY_OUTPUT_HOST_WRITE_BIT |
-            VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
-            VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-            VK_MEMORY_OUTPUT_TRANSFER_BIT,
-        VkFlags inputMask =
-            VK_MEMORY_INPUT_HOST_READ_BIT |
-            VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
-            VK_MEMORY_INPUT_INDEX_FETCH_BIT |
-            VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
-            VK_MEMORY_INPUT_UNIFORM_READ_BIT |
-            VK_MEMORY_INPUT_SHADER_READ_BIT |
-            VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
-            VK_MEMORY_INPUT_TRANSFER_BIT);
+        VkFlags srcAccessMask =
+            VK_ACCESS_HOST_WRITE_BIT |
+            VK_ACCESS_SHADER_WRITE_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
+            VK_ACCESS_TRANSFER_WRITE_BIT,
+        VkFlags dstAccessMask =
+            VK_ACCESS_HOST_READ_BIT |
+            VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
+            VK_ACCESS_INDEX_READ_BIT |
+            VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
+            VK_ACCESS_UNIFORM_READ_BIT |
+            VK_ACCESS_SHADER_READ_BIT |
+            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+            VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+            VK_ACCESS_MEMORY_READ_BIT);
 
     void Bind(VkCommandBuffer commandBuffer, VkDeviceSize offset, uint32_t binding);
 
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index cc62079..0bb4293 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -346,8 +346,8 @@
         VkBufferMemoryBarrier barrier = {};
         barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
         barrier.buffer = handle();
-        barrier.outputMask = output_mask;
-        barrier.inputMask = input_mask;
+        barrier.srcAccessMask = output_mask;
+        barrier.dstAccessMask = input_mask;
         barrier.offset = offset;
         barrier.size = size;
         return barrier;
@@ -408,8 +408,8 @@
     {
         VkImageMemoryBarrier barrier = {};
         barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-        barrier.outputMask = output_mask;
-        barrier.inputMask = input_mask;
+        barrier.srcAccessMask = output_mask;
+        barrier.dstAccessMask = input_mask;
         barrier.oldLayout = old_layout;
         barrier.newLayout = new_layout;
         barrier.image = handle();
diff --git a/tests/vktestframework.cpp b/tests/vktestframework.cpp
index edae4f4..c6c0b0b 100644
--- a/tests/vktestframework.cpp
+++ b/tests/vktestframework.cpp
@@ -544,8 +544,8 @@
     VkImageMemoryBarrier memoryBarrier = {};
     memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
     memoryBarrier.pNext = NULL;
-    memoryBarrier.outputMask = VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT;
-    memoryBarrier.inputMask = 0;
+    memoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+    memoryBarrier.dstAccessMask = 0;
     memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR;
     memoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
     memoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
@@ -995,8 +995,8 @@
     VkImageMemoryBarrier image_memory_barrier = {};
     image_memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
     image_memory_barrier.pNext = NULL;
-    image_memory_barrier.outputMask = 0;
-    image_memory_barrier.inputMask = 0;
+    image_memory_barrier.srcAccessMask = 0;
+    image_memory_barrier.dstAccessMask = 0;
     image_memory_barrier.oldLayout = old_image_layout;
     image_memory_barrier.newLayout = new_image_layout;
     image_memory_barrier.image = image;
@@ -1008,12 +1008,12 @@
 
     if (new_image_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) {
         /* Make sure anything that was copying from this image has completed */
-        image_memory_barrier.inputMask = VK_MEMORY_INPUT_TRANSFER_BIT;
+        image_memory_barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
     }
 
     if (new_image_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) {
         /* Make sure any Copy or CPU writes to image are flushed */
-        image_memory_barrier.outputMask = VK_MEMORY_OUTPUT_HOST_WRITE_BIT | VK_MEMORY_OUTPUT_TRANSFER_BIT;
+        image_memory_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
     }
 
     VkImageMemoryBarrier *pmemory_barrier = &image_memory_barrier;
