diff --git a/include/vulkan.h b/include/vulkan.h
index b023b69..7709843 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -2049,19 +2049,14 @@
     VkRenderPassContents                        contents;
 } VkRenderPassBegin;
 
-// Union allowing specification of floating point or raw color data. Actual value selected is based on image being cleared.
+// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on format.
 typedef union VkClearColorValue_
 {
-    float                                       floatColor[4];
-    uint32_t                                    rawColor[4];
+    float                                       f32[4];
+    int32_t                                     s32[4];
+    uint32_t                                    u32[4];
 } VkClearColorValue;
 
-typedef struct VkClearColor_
-{
-    VkClearColorValue                           color;
-    bool32_t                                    useRawValue;
-} VkClearColor;
-
 typedef struct VkRenderPassCreateInfo_
 {
     VkStructureType                             sType;      // Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
@@ -2076,7 +2071,7 @@
     const VkImageLayout*                        pColorLayouts;
     const VkAttachmentLoadOp*                   pColorLoadOps;
     const VkAttachmentStoreOp*                  pColorStoreOps;
-    const VkClearColor*                         pColorLoadClearValues;
+    const VkClearColorValue*                    pColorLoadClearValues;
     VkFormat                                    depthStencilFormat;
     VkImageLayout                               depthStencilLayout;
     VkAttachmentLoadOp                          depthLoadOp;
@@ -2253,9 +2248,9 @@
 typedef void     (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
 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);
+typedef void     (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
 typedef void     (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void     (VKAPI *PFN_vkCmdClearColorAttachment)(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rectCount, const VkRect3D* pRects);
+typedef void     (VKAPI *PFN_vkCmdClearColorAttachment)(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects);
 typedef void     (VKAPI *PFN_vkCmdClearDepthStencilAttachment)(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects);
 typedef void     (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
 typedef void     (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
@@ -2836,7 +2831,7 @@
     VkCmdBuffer                                 cmdBuffer,
     VkImage                                     image,
     VkImageLayout                               imageLayout,
-    const VkClearColor*                         pColor,
+    const VkClearColorValue*                    pColor,
     uint32_t                                    rangeCount,
     const VkImageSubresourceRange*              pRanges);
 
@@ -2853,7 +2848,7 @@
     VkCmdBuffer                                 cmdBuffer,
     uint32_t                                    colorAttachment,
     VkImageLayout                               imageLayout,
-    const VkClearColor*                         pColor,
+    const VkClearColorValue*                    pColor,
     uint32_t                                    rectCount,
     const VkRect3D*                             pRects);
 
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 3da7d54..fa3b36a 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2482,7 +2482,7 @@
 VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
         VkCmdBuffer cmdBuffer,
         VkImage image, VkImageLayout imageLayout,
-        const VkClearColor *pColor,
+        const VkClearColorValue *pColor,
         uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
 {
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
@@ -2682,8 +2682,8 @@
             memcpy((void*)localRPCI->pColorStoreOps, pCreateInfo->pColorStoreOps, localRPCI->colorAttachmentCount*sizeof(VkAttachmentStoreOp));
         }
         if (pCreateInfo->pColorLoadClearValues) {
-            localRPCI->pColorLoadClearValues = new VkClearColor[localRPCI->colorAttachmentCount];
-            memcpy((void*)localRPCI->pColorLoadClearValues, pCreateInfo->pColorLoadClearValues, localRPCI->colorAttachmentCount*sizeof(VkClearColor));
+            localRPCI->pColorLoadClearValues = new VkClearColorValue[localRPCI->colorAttachmentCount];
+            memcpy((void*)localRPCI->pColorLoadClearValues, pCreateInfo->pColorLoadClearValues, localRPCI->colorAttachmentCount*sizeof(VkClearColorValue));
         }
         renderPassMap[*pRenderPass] = localRPCI;
     }
diff --git a/layers/image.cpp b/layers/image.cpp
index 0282795..d2c449e 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -340,10 +340,10 @@
 
     for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
     {
-        if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i])))
+        if(!vk_validate_vkclearcolorvalue(&(pCreateInfo->pColorLoadClearValues[i])))
         {
             std::stringstream ss;
-            ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i << "], is invalid";
+            ss << "vkCreateRenderPass parameter, VkClearColorValue pCreateInfo->pColorLoadClearValues[" << i << "], is invalid";
             log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "IMAGE", ss.str().c_str());
         }
     }
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 0411ca1..e4db292 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -1923,7 +1923,7 @@
     VkCmdBuffer                    cmdBuffer,
     VkImage                        image,
     VkImageLayout                  imageLayout,
-    const VkClearColor            *pColor,
+    const VkClearColorValue       *pColor,
     uint32_t                       rangeCount,
     const VkImageSubresourceRange *pRanges)
 {
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 643399a..3074ab1 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -8415,7 +8415,7 @@
 
 void PreCmdClearColorImage(
     VkCmdBuffer cmdBuffer,
-    const VkClearColor* pColor,
+    const VkClearColorValue* pColor,
     const VkImageSubresourceRange* pRanges)
 {
     if(cmdBuffer == nullptr)
@@ -8481,7 +8481,7 @@
     VkCmdBuffer cmdBuffer,
     VkImage image,
     VkImageLayout imageLayout,
-    const VkClearColor* pColor,
+    const VkClearColorValue* pColor,
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
diff --git a/loader/trampoline.c b/loader/trampoline.c
index ef8e4f5..f2239ff 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -990,7 +990,7 @@
     disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
 }
 
-LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
+LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
 {
     const VkLayerDispatchTable *disp;
 
@@ -1008,7 +1008,7 @@
     disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
 }
 
-LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rectCount, const VkRect3D* pRects)
+LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects)
 {
     const VkLayerDispatchTable *disp;
 
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 08f9dbf..e421efe 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -1164,17 +1164,13 @@
 
 class VkCmdClearColorImageTest : public VkCmdBlitImageTest {
 protected:
-    VkCmdClearColorImageTest() : test_raw_(false) {}
-    VkCmdClearColorImageTest(bool test_raw) : test_raw_(test_raw) {}
+    VkCmdClearColorImageTest() {}
 
     virtual void SetUp()
     {
         VkCmdBlitTest::SetUp();
 
-        if (test_raw_)
-            init_test_formats();
-        else
-            init_test_formats(VK_FORMAT_FEATURE_CONVERSION_BIT);
+        init_test_formats(VK_FORMAT_FEATURE_CONVERSION_BIT);
 
         ASSERT_NE(true, test_formats_.empty());
     }
@@ -1184,25 +1180,23 @@
         uint32_t raw[4];
     };
 
-    bool test_raw_;
-
-    std::vector<uint8_t> color_to_raw(VkFormat format, const float color[4])
+    std::vector<uint8_t> color_to_raw(VkFormat format, const VkClearColorValue &color)
     {
         std::vector<uint8_t> raw;
 
         // TODO support all formats
         switch (format) {
         case VK_FORMAT_R8G8B8A8_UNORM:
-            raw.push_back((uint8_t)(color[0] * 255.0f));
-            raw.push_back((uint8_t)(color[1] * 255.0f));
-            raw.push_back((uint8_t)(color[2] * 255.0f));
-            raw.push_back((uint8_t)(color[3] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[0] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[1] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[2] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[3] * 255.0f));
             break;
         case VK_FORMAT_B8G8R8A8_UNORM:
-            raw.push_back((uint8_t)(color[2] * 255.0f));
-            raw.push_back((uint8_t)(color[1] * 255.0f));
-            raw.push_back((uint8_t)(color[0] * 255.0f));
-            raw.push_back((uint8_t)(color[3] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[2] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[1] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[0] * 255.0f));
+            raw.push_back((uint8_t)(color.f32[3] * 255.0f));
             break;
         default:
             break;
@@ -1211,41 +1205,8 @@
         return raw;
     }
 
-    std::vector<uint8_t> color_to_raw(VkFormat format, const uint32_t color[4])
-    {
-        std::vector<uint8_t> raw;
-
-        // TODO support all formats
-        switch (format) {
-        case VK_FORMAT_R8G8B8A8_UNORM:
-            raw.push_back(static_cast<uint8_t>(color[0]));
-            raw.push_back(static_cast<uint8_t>(color[1]));
-            raw.push_back(static_cast<uint8_t>(color[2]));
-            raw.push_back(static_cast<uint8_t>(color[3]));
-            break;
-        case VK_FORMAT_B8G8R8A8_UNORM:
-            raw.push_back(static_cast<uint8_t>(color[2]));
-            raw.push_back(static_cast<uint8_t>(color[1]));
-            raw.push_back(static_cast<uint8_t>(color[0]));
-            raw.push_back(static_cast<uint8_t>(color[3]));
-            break;
-        default:
-            break;
-        }
-
-        return raw;
-    }
-
-    std::vector<uint8_t> color_to_raw(VkFormat format, const VkClearColor &color)
-    {
-        if (color.useRawValue)
-            return color_to_raw(format, color.color.rawColor);
-        else
-            return color_to_raw(format, color.color.floatColor);
-    }
-
     void test_clear_color_image(const VkImageCreateInfo &img_info,
-                                const VkClearColor &clear_color,
+                                const VkClearColorValue &clear_color,
                                 const std::vector<VkImageSubresourceRange> &ranges)
     {
         vk_testing::Image img;
@@ -1322,8 +1283,8 @@
                                 const float color[4],
                                 const std::vector<VkImageSubresourceRange> &ranges)
     {
-        VkClearColor c = {};
-        memcpy(c.color.floatColor, color, sizeof(c.color.floatColor));
+        VkClearColorValue c = {};
+        memcpy(c.f32, color, sizeof(c.f32));
         test_clear_color_image(img_info, c, ranges);
     }
 };
@@ -1361,70 +1322,6 @@
     }
 }
 
-class VkCmdClearColorImageRawTest : public VkCmdClearColorImageTest {
-protected:
-    VkCmdClearColorImageRawTest() : VkCmdClearColorImageTest(true) {}
-
-    void test_clear_color_image_raw(const VkImageCreateInfo &img_info,
-                                    const uint32_t color[4],
-                                    const std::vector<VkImageSubresourceRange> &ranges)
-    {
-        VkClearColor c = {};
-        c.useRawValue = true;
-        memcpy(c.color.rawColor, color, sizeof(c.color.rawColor));
-        test_clear_color_image(img_info, c, ranges);
-    }
-};
-
-TEST_F(VkCmdClearColorImageRawTest, Basic)
-{
-    for (std::vector<vk_testing::Device::Format>::const_iterator it = test_formats_.begin();
-         it != test_formats_.end(); it++) {
-        const uint32_t color[4] = { 0x11111111, 0x22222222, 0x33333333, 0x44444444 };
-        VkFormatProperties props;
-        VkResult err;
-
-        err = vkGetPhysicalDeviceFormatInfo(dev_.gpu().obj(), it->format, &props);
-        ASSERT_EQ(err, VK_SUCCESS);
-
-        if (it->tiling == VK_IMAGE_TILING_LINEAR && !(props.linearTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT))
-            continue;
-
-        if (it->tiling == VK_IMAGE_TILING_OPTIMAL && !(props.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT))
-            continue;
-
-        // not sure what to do here
-        if (it->format == VK_FORMAT_UNDEFINED ||
-            (it->format >= VK_FORMAT_R8G8B8_UNORM &&
-             it->format <= VK_FORMAT_R8G8B8_SRGB) ||
-            (it->format >= VK_FORMAT_B8G8R8_UNORM &&
-             it->format <= VK_FORMAT_B8G8R8_SRGB) ||
-            (it->format >= VK_FORMAT_R16G16B16_UNORM &&
-             it->format <= VK_FORMAT_R16G16B16_SFLOAT) ||
-            (it->format >= VK_FORMAT_R32G32B32_UINT &&
-             it->format <= VK_FORMAT_R32G32B32_SFLOAT) ||
-            it->format == VK_FORMAT_R64G64B64_SFLOAT ||
-            it->format == VK_FORMAT_R64G64B64A64_SFLOAT ||
-            (it->format >= VK_FORMAT_D16_UNORM &&
-             it->format <= VK_FORMAT_D32_SFLOAT_S8_UINT))
-            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.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-
-        const VkImageSubresourceRange range =
-            vk_testing::Image::subresource_range(img_info, VK_IMAGE_ASPECT_COLOR);
-        std::vector<VkImageSubresourceRange> ranges(&range, &range + 1);
-
-        test_clear_color_image_raw(img_info, color, ranges);
-    }
-}
-
 class VkCmdClearDepthStencilTest : public VkCmdBlitImageTest {
 protected:
     virtual void SetUp()
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 70d53eb..197e4a4 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -4151,11 +4151,10 @@
 
     /* clear via load op to full green */
     m_clear_via_load_op = true;
-    m_clear_color.useRawValue = false;
-    m_clear_color.color.floatColor[0] = 0;
-    m_clear_color.color.floatColor[1] = 1;
-    m_clear_color.color.floatColor[2] = 0;
-    m_clear_color.color.floatColor[3] = 0;
+    m_clear_color.f32[0] = 0;
+    m_clear_color.f32[1] = 1;
+    m_clear_color.f32[2] = 0;
+    m_clear_color.f32[3] = 0;
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
 
     VkCommandBufferObj cmdBuffer(m_device);
@@ -4175,11 +4174,10 @@
 
     /* clear via load op to full red */
     m_clear_via_load_op = true;
-    m_clear_color.useRawValue = false;
-    m_clear_color.color.floatColor[0] = 1;
-    m_clear_color.color.floatColor[1] = 0;
-    m_clear_color.color.floatColor[2] = 0;
-    m_clear_color.color.floatColor[3] = 0;
+    m_clear_color.f32[0] = 1;
+    m_clear_color.f32[1] = 0;
+    m_clear_color.f32[2] = 0;
+    m_clear_color.f32[3] = 0;
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
 
     VkCommandBufferObj cmdBuffer(m_device);
@@ -4193,12 +4191,11 @@
     /* Now, partway through this renderpass we want to clear the color
      * attachment again, this time to green.
      */
-    VkClearColor clear_color;
-    clear_color.useRawValue = false;
-    clear_color.color.floatColor[0] = 0;
-    clear_color.color.floatColor[1] = 1;
-    clear_color.color.floatColor[2] = 0;
-    clear_color.color.floatColor[3] = 0;
+    VkClearColorValue clear_color;
+    clear_color.f32[0] = 0;
+    clear_color.f32[1] = 1;
+    clear_color.f32[2] = 0;
+    clear_color.f32[3] = 0;
     VkRect3D clear_rect = { { 0, 0, 0 }, { (int)m_width, (int)m_height, 1 } };
     vkCmdClearColorAttachment(cmdBuffer.obj(), 0,
                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 756a619..a38ad84 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -52,11 +52,10 @@
 {
 
     // clear the back buffer to dark grey
-    m_clear_color.color.rawColor[0] = 64;
-    m_clear_color.color.rawColor[1] = 64;
-    m_clear_color.color.rawColor[2] = 64;
-    m_clear_color.color.rawColor[3] = 0;
-    m_clear_color.useRawValue = true;
+    m_clear_color.f32[0] = 0.25f;
+    m_clear_color.f32[1] = 0.25f;
+    m_clear_color.f32[2] = 0.25f;
+    m_clear_color.f32[3] = 0.0f;
 }
 
 VkRenderFramework::~VkRenderFramework()
@@ -294,7 +293,7 @@
 {
     std::vector<VkAttachmentLoadOp> load_ops;
     std::vector<VkAttachmentStoreOp> store_ops;
-    std::vector<VkClearColor> clear_colors;
+    std::vector<VkClearColorValue> clear_colors;
 
     uint32_t i;
 
@@ -1273,7 +1272,7 @@
     vkCmdPipelineBarrier(obj(), src_stages, dest_stages, byRegion, memBarrierCount, ppMemBarriers);
 }
 
-void VkCommandBufferObj::ClearAllBuffers(VkClearColor clear_color, float depth_clear_color, uint32_t stencil_clear_color,
+void VkCommandBufferObj::ClearAllBuffers(VkClearColorValue clear_color, float depth_clear_color, uint32_t stencil_clear_color,
                                           VkDepthStencilObj *depthStencilObj)
 {
     uint32_t i;
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 715648f..c1d52fa 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -122,7 +122,7 @@
     VkFormat                            m_render_target_fmt;
     VkFormat                            m_depth_stencil_fmt;
     VkColorAttachmentBindInfo           m_colorBindings[8];
-    VkClearColor                        m_clear_color;
+    VkClearColorValue                   m_clear_color;
     bool                                m_clear_via_load_op;
     float                               m_depth_clear_color;
     uint32_t                            m_stencil_clear_color;
@@ -171,7 +171,7 @@
     void PipelineBarrier(VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages, bool32_t byRegion, uint32_t memBarrierCount, const void** ppMemBarriers);
     void AddRenderTarget(VkImageObj *renderTarget);
     void AddDepthStencil();
-    void ClearAllBuffers(VkClearColor clear_color, float depth_clear_color, uint32_t stencil_clear_color, VkDepthStencilObj *depthStencilObj);
+    void ClearAllBuffers(VkClearColorValue clear_color, float depth_clear_color, uint32_t stencil_clear_color, VkDepthStencilObj *depthStencilObj);
     void PrepareAttachments();
     void AddMemoryRefs(vk_testing::Object &vkObject);
     void AddMemoryRefs(uint32_t ref_count, const VkDeviceMemory *mem);
diff --git a/vulkan.py b/vulkan.py
index c8e9b8f..ffba32c 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -734,7 +734,7 @@
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkImage", "image"),
              Param("VkImageLayout", "imageLayout"),
-             Param("const VkClearColor*", "pColor"),
+             Param("const VkClearColorValue*", "pColor"),
              Param("uint32_t", "rangeCount"),
              Param("const VkImageSubresourceRange*", "pRanges")]),
 
@@ -751,7 +751,7 @@
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("uint32_t", "colorAttachment"),
              Param("VkImageLayout", "imageLayout"),
-             Param("const VkClearColor*", "pColor"),
+             Param("const VkClearColorValue*", "pColor"),
              Param("uint32_t", "rectCount"),
              Param("const VkRect3D*", "pRects")]),
 
