diff --git a/icd/intel/cmd_meta.c b/icd/intel/cmd_meta.c
index 31da3a4..287f8e8 100644
--- a/icd/intel/cmd_meta.c
+++ b/icd/intel/cmd_meta.c
@@ -713,52 +713,6 @@
     }
 }
 
-ICD_EXPORT void VKAPI vkCmdCloneImageData(
-    VkCmdBuffer                              cmdBuffer,
-    VkImage                                   srcImage,
-    VkImageLayout                            srcImageLayout,
-    VkImage                                   destImage,
-    VkImageLayout                            destImageLayout)
-{
-    struct intel_cmd *cmd = intel_cmd(cmdBuffer);
-    struct intel_img *src = intel_img(srcImage);
-    struct intel_img *dst = intel_img(destImage);
-    struct intel_buf *src_buf, *dst_buf;
-    VkBufferCreateInfo buf_info;
-    VkBufferCopy buf_region;
-    VkResult res;
-
-    memset(&buf_info, 0, sizeof(buf_info));
-    buf_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
-    buf_info.size = src->obj.mem->size;
-
-    memset(&buf_region, 0, sizeof(buf_region));
-    buf_region.copySize = src->obj.mem->size;
-
-    res = intel_buf_create(cmd->dev, &buf_info, &src_buf);
-    if (res != VK_SUCCESS) {
-        cmd_fail(cmd, res);
-        return;
-    }
-
-    res = intel_buf_create(cmd->dev, &buf_info, &dst_buf);
-    if (res != VK_SUCCESS) {
-        intel_buf_destroy(src_buf);
-        cmd_fail(cmd, res);
-        return;
-    }
-
-    intel_obj_bind_mem(&src_buf->obj, src->obj.mem, 0);
-    intel_obj_bind_mem(&dst_buf->obj, dst->obj.mem, 0);
-
-    cmd_batch_flush(cmd, GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH);
-    vkCmdCopyBuffer(cmdBuffer, (VkBuffer) src_buf,
-            (VkBuffer) dst_buf, 1, &buf_region);
-
-    intel_buf_destroy(src_buf);
-    intel_buf_destroy(dst_buf);
-}
-
 ICD_EXPORT void VKAPI vkCmdUpdateBuffer(
     VkCmdBuffer                              cmdBuffer,
     VkBuffer                                  destBuffer,
diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c
index b7e42dd..408f2ca 100644
--- a/icd/nulldrv/nulldrv.c
+++ b/icd/nulldrv/nulldrv.c
@@ -1054,16 +1054,6 @@
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdCloneImageData(
-    VkCmdBuffer                              cmdBuffer,
-    VkImage                                   srcImage,
-    VkImageLayout                            srcImageLayout,
-    VkImage                                   destImage,
-    VkImageLayout                            destImageLayout)
-{
-    NULLDRV_LOG_FUNC;
-}
-
 ICD_EXPORT void VKAPI vkCmdUpdateBuffer(
     VkCmdBuffer                              cmdBuffer,
     VkBuffer                                  destBuffer,
diff --git a/include/vkLayer.h b/include/vkLayer.h
index 87a79e5..bd56f03 100644
--- a/include/vkLayer.h
+++ b/include/vkLayer.h
@@ -120,7 +120,6 @@
     PFN_vkCmdBlitImage CmdBlitImage;
     PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
     PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
-    PFN_vkCmdCloneImageData CmdCloneImageData;
     PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
     PFN_vkCmdFillBuffer CmdFillBuffer;
     PFN_vkCmdClearColorImage CmdClearColorImage;
diff --git a/include/vulkan.h b/include/vulkan.h
index ed22243..e85ca9d 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -1071,11 +1071,10 @@
 typedef enum VkImageCreateFlagBits_
 {
     VK_IMAGE_CREATE_INVARIANT_DATA_BIT                      = VK_BIT(0),
-    VK_IMAGE_CREATE_CLONEABLE_BIT                           = VK_BIT(1),
-    VK_IMAGE_CREATE_SHAREABLE_BIT                           = VK_BIT(2),    // Image should be shareable
-    VK_IMAGE_CREATE_SPARSE_BIT                              = VK_BIT(3),    // Image should support sparse backing
-    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = VK_BIT(4),    // Allows image views to have different format than the base image
-    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = VK_BIT(5),    // Allows creating image views with cube type from the created image
+    VK_IMAGE_CREATE_SHAREABLE_BIT                           = VK_BIT(1),    // Image should be shareable
+    VK_IMAGE_CREATE_SPARSE_BIT                              = VK_BIT(2),    // Image should support sparse backing
+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = VK_BIT(3),    // Allows image views to have different format than the base image
+    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = VK_BIT(4),    // Allows creating image views with cube type from the created image
 } VkImageCreateFlagBits;
 
 // Depth-stencil view creation flags
@@ -2227,7 +2226,6 @@
 typedef void     (VKAPI *PFN_vkCmdBlitImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions);
 typedef void     (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
 typedef void     (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void     (VKAPI *PFN_vkCmdCloneImageData)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout);
 typedef void     (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
 typedef void     (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
 typedef void     (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
@@ -2835,13 +2833,6 @@
     uint32_t                                    regionCount,
     const VkBufferImageCopy*                    pRegions);
 
-void VKAPI vkCmdCloneImageData(
-    VkCmdBuffer                                 cmdBuffer,
-    VkImage                                     srcImage,
-    VkImageLayout                               srcImageLayout,
-    VkImage                                     destImage,
-    VkImageLayout                               destImageLayout);
-
 void VKAPI vkCmdUpdateBuffer(
     VkCmdBuffer                                 cmdBuffer,
     VkBuffer                                    destBuffer,
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index f73e533..7836198 100755
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2299,21 +2299,6 @@
     nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
-{
-    GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
-    if (pCB) {
-        updateCBTracking(cmdBuffer);
-        addCmd(pCB, CMD_CLONEIMAGEDATA);
-    }
-    else {
-        char str[1024];
-        sprintf(str, "Attempt to use CmdBuffer %p that doesn't exist!", (void*)cmdBuffer);
-        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, cmdBuffer, 0, DRAWSTATE_INVALID_CMD_BUFFER, "DS", str);
-    }
-    nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
-}
-
 VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
 {
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
@@ -2848,8 +2833,6 @@
         return (void*) vkCmdCopyBufferToImage;
     if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
         return (void*) vkCmdCopyImageToBuffer;
-    if (!strcmp(funcName, "vkCmdCloneImageData"))
-        return (void*) vkCmdCloneImageData;
     if (!strcmp(funcName, "vkCmdUpdateBuffer"))
         return (void*) vkCmdUpdateBuffer;
     if (!strcmp(funcName, "vkCmdFillBuffer"))
diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c
index c924355..120656d 100644
--- a/layers/glave_snapshot.c
+++ b/layers/glave_snapshot.c
@@ -1407,14 +1407,6 @@
     nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
-{
-    loader_platform_thread_lock_mutex(&objLock);
-    ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
-    loader_platform_thread_unlock_mutex(&objLock);
-    nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
-}
-
 VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
 {
     loader_platform_thread_lock_mutex(&objLock);
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index d8a1df8..98b2df5 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -1909,31 +1909,6 @@
     nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(
-    VkCmdBuffer   cmdBuffer,
-    VkImage       srcImage,
-    VkImageLayout srcImageLayout,
-    VkImage       destImage,
-    VkImageLayout destImageLayout)
-{
-    // TODO : Each image will have mem mapping so track them
-    loader_platform_thread_lock_mutex(&globalLock);
-    VkDeviceMemory mem = getMemBindingFromObject(srcImage);
-    if (VK_FALSE == updateCBBinding(cmdBuffer, mem)) {
-        char str[1024];
-        sprintf(str, "In vkCmdCloneImageData() call unable to update binding of srcImage buffer %p to cmdBuffer %p", srcImage, cmdBuffer);
-        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, cmdBuffer, 0, MEMTRACK_MEMORY_BINDING_ERROR, "MEM", str);
-    }
-    mem = getMemBindingFromObject(destImage);
-    if (VK_FALSE == updateCBBinding(cmdBuffer, mem)) {
-        char str[1024];
-        sprintf(str, "In vkCmdCloneImageData() call unable to update binding of destImage buffer %p to cmdBuffer %p", destImage, cmdBuffer);
-        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, cmdBuffer, 0, MEMTRACK_MEMORY_BINDING_ERROR, "MEM", str);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
-}
-
 VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
     VkCmdBuffer     cmdBuffer,
     VkBuffer        destBuffer,
@@ -2352,8 +2327,6 @@
         return (void*) vkCmdCopyBufferToImage;
     if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
         return (void*) vkCmdCopyImageToBuffer;
-    if (!strcmp(funcName, "vkCmdCloneImageData"))
-        return (void*) vkCmdCloneImageData;
     if (!strcmp(funcName, "vkCmdUpdateBuffer"))
         return (void*) vkCmdUpdateBuffer;
     if (!strcmp(funcName, "vkCmdFillBuffer"))
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 50f6157..79783cb 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -1376,20 +1376,6 @@
     nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
-{
-    char str[1024];
-    if (!validate_VkImageLayout(srcImageLayout)) {
-        sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
-        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
-    }
-    if (!validate_VkImageLayout(destImageLayout)) {
-        sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
-        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
-    }
-    nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
-}
-
 VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
 {
 
diff --git a/loader/gpa_helper.h b/loader/gpa_helper.h
index b9bd688..775b29c 100644
--- a/loader/gpa_helper.h
+++ b/loader/gpa_helper.h
@@ -220,8 +220,6 @@
         return (void*) vkCmdCopyBufferToImage;
     if (!strcmp(name, "CmdCopyImageToBuffer"))
         return (void*) vkCmdCopyImageToBuffer;
-    if (!strcmp(name, "CmdCloneImageData"))
-        return (void*) vkCmdCloneImageData;
     if (!strcmp(name, "CmdUpdateBuffer"))
         return (void*) vkCmdUpdateBuffer;
     if (!strcmp(name, "CmdFillBuffer"))
diff --git a/loader/table_ops.h b/loader/table_ops.h
index 1b59a45..da2f7f1 100644
--- a/loader/table_ops.h
+++ b/loader/table_ops.h
@@ -126,7 +126,6 @@
     table->CmdBlitImage = (PFN_vkCmdBlitImage) gpa(gpu, "vkCmdBlitImage");
     table->CmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage) gpa(gpu, "vkCmdCopyBufferToImage");
     table->CmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer) gpa(gpu, "vkCmdCopyImageToBuffer");
-    table->CmdCloneImageData = (PFN_vkCmdCloneImageData) gpa(gpu, "vkCmdCloneImageData");
     table->CmdUpdateBuffer = (PFN_vkCmdUpdateBuffer) gpa(gpu, "vkCmdUpdateBuffer");
     table->CmdFillBuffer = (PFN_vkCmdFillBuffer) gpa(gpu, "vkCmdFillBuffer");
     table->CmdClearColorImage = (PFN_vkCmdClearColorImage) gpa(gpu, "vkCmdClearColorImage");
@@ -357,8 +356,6 @@
         return (void *) table->CmdCopyBufferToImage;
     if (!strcmp(name, "CmdCopyImageToBuffer"))
         return (void *) table->CmdCopyImageToBuffer;
-    if (!strcmp(name, "CmdCloneImageData"))
-        return (void *) table->CmdCloneImageData;
     if (!strcmp(name, "CmdUpdateBuffer"))
         return (void *) table->CmdUpdateBuffer;
     if (!strcmp(name, "CmdFillBuffer"))
diff --git a/loader/trampoline.c b/loader/trampoline.c
index a435ca1..d393c2b 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -845,15 +845,6 @@
     disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
 }
 
-LOADER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(cmdBuffer);
-
-    disp->CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
-}
-
 LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
 {
     const VkLayerDispatchTable *disp;
diff --git a/loader/vulkan.def b/loader/vulkan.def
index 2be6ed6..d3bfe35 100644
--- a/loader/vulkan.def
+++ b/loader/vulkan.def
@@ -120,7 +120,6 @@
    vkCmdBlitImage
    vkCmdCopyBufferToImage
    vkCmdCopyImageToBuffer
-   vkCmdCloneImageData
    vkCmdUpdateBuffer
    vkCmdFillBuffer
    vkCmdClearColorImage
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index a029896..d754c05 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -1145,77 +1145,6 @@
     }
 }
 
-class VkCmdCloneImageDataTest : public VkCmdBlitImageTest {
-protected:
-    virtual void SetUp()
-    {
-        VkCmdBlitTest::SetUp();
-        init_test_formats();
-        ASSERT_NE(true, test_formats_.empty());
-    }
-
-    void test_clone_image_data(const VkImageCreateInfo &img_info)
-    {
-        vk_testing::ImageChecker checker(img_info);
-        vk_testing::Image src, dst;
-        VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-
-        src.init(dev_, img_info, reqs);
-        if (src.transparent() || src.copyable())
-            fill_src(src, checker);
-
-        dst.init(dev_, img_info, reqs);
-
-        const VkImageLayout layout = VK_IMAGE_LAYOUT_GENERAL;
-
-        cmd_.begin();
-        vkCmdCloneImageData(cmd_.obj(), src.obj(), layout, dst.obj(), layout);
-        cmd_.end();
-
-        submit_and_done();
-
-        // cannot verify
-        if (!dst.transparent() && !dst.copyable())
-            return;
-
-        check_dst(dst, checker);
-    }
-};
-
-TEST_F(VkCmdCloneImageDataTest, Basic)
-{
-    for (std::vector<vk_testing::Device::Format>::const_iterator it = test_formats_.begin();
-         it != test_formats_.end(); it++) {
-        // not sure what to do here
-        if (it->format == VK_FORMAT_UNDEFINED ||
-            (it->format >= VK_FORMAT_R32G32B32_UINT &&
-             it->format <= VK_FORMAT_R32G32B32_SFLOAT) ||
-            (it->format >= VK_FORMAT_B8G8R8_UNORM &&
-             it->format <= VK_FORMAT_B8G8R8_SRGB) ||
-            (it->format >= VK_FORMAT_BC1_RGB_UNORM &&
-             it->format <= VK_FORMAT_ASTC_12x12_SRGB) ||
-            (it->format >= VK_FORMAT_D16_UNORM &&
-             it->format <= VK_FORMAT_D32_SFLOAT_S8_UINT) ||
-            it->format == VK_FORMAT_R64G64B64_SFLOAT ||
-            it->format == VK_FORMAT_R64G64B64A64_SFLOAT)
-            continue;
-
-        VkImageCreateInfo img_info = vk_testing::Image::create_info();
-        img_info.imageType = VK_IMAGE_TYPE_2D;
-        img_info.format = it->format;
-        img_info.extent.width = 64;
-        img_info.extent.height = 64;
-        img_info.tiling = it->tiling;
-        img_info.flags = VK_IMAGE_CREATE_CLONEABLE_BIT;
-
-        const VkImageSubresourceRange range =
-            vk_testing::Image::subresource_range(img_info, VK_IMAGE_ASPECT_COLOR);
-        std::vector<VkImageSubresourceRange> ranges(&range, &range + 1);
-
-        test_clone_image_data(img_info);
-    }
-}
-
 class VkCmdClearColorImageTest : public VkCmdBlitImageTest {
 protected:
     VkCmdClearColorImageTest() : test_raw_(false) {}
diff --git a/tools/glave/src/glv_extensions/glvdebug_vk/glvdebug_vk_qfile_model.cpp b/tools/glave/src/glv_extensions/glvdebug_vk/glvdebug_vk_qfile_model.cpp
index c59682d..2c08fd0 100644
--- a/tools/glave/src/glv_extensions/glvdebug_vk/glvdebug_vk_qfile_model.cpp
+++ b/tools/glave/src/glv_extensions/glvdebug_vk/glvdebug_vk_qfile_model.cpp
@@ -67,7 +67,6 @@
         case GLV_TPI_VK_vkCmdCopyImage:
         case GLV_TPI_VK_vkCmdCopyBufferToImage:
         case GLV_TPI_VK_vkCmdCopyImageToBuffer:
-        case GLV_TPI_VK_vkCmdCloneImageData:
         case GLV_TPI_VK_vkCmdUpdateBuffer:
         case GLV_TPI_VK_vkCmdFillBuffer:
         case GLV_TPI_VK_vkCmdClearColorImage:
diff --git a/vulkan.py b/vulkan.py
index e795da1..9030ea4 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -750,13 +750,6 @@
              Param("uint32_t", "regionCount"),
              Param("const VkBufferImageCopy*", "pRegions")]),
 
-        Proto("void", "CmdCloneImageData",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkImage", "srcImage"),
-             Param("VkImageLayout", "srcImageLayout"),
-             Param("VkImage", "destImage"),
-             Param("VkImageLayout", "destImageLayout")]),
-
         Proto("void", "CmdUpdateBuffer",
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkBuffer", "destBuffer"),
