intel: implement color clear load ops

V2: Extract guts of vkCmdClearColorImage to an internal-use function,
    and use that from render pass ops, rather than possibly allowing
    the clear to be intercepted by layers.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Courtney Goeltzenleuchter <courtney@lunarg.com>
diff --git a/icd/intel/cmd_pipeline.c b/icd/intel/cmd_pipeline.c
index 99fe560..cef30c9 100644
--- a/icd/intel/cmd_pipeline.c
+++ b/icd/intel/cmd_pipeline.c
@@ -3610,8 +3610,33 @@
     const VkRenderPassBegin*                pRenderPassBegin)
 {
    struct intel_cmd *cmd = intel_cmd(cmdBuffer);
+   struct intel_render_pass *rp = (struct intel_render_pass *) pRenderPassBegin->renderPass;
+   struct intel_fb *fb = (struct intel_fb *) pRenderPassBegin->framebuffer;
+   unsigned i;
 
-   cmd_begin_render_pass(cmd, (struct intel_render_pass *) pRenderPassBegin->renderPass, (struct intel_fb *) pRenderPassBegin->framebuffer);
+   cmd_begin_render_pass(cmd, rp, fb);
+
+   /* issue load ops */
+   for (i = 0; i < rp->colorAttachmentCount; i++) {
+       if (rp->colorLoadOps[i] == VK_ATTACHMENT_LOAD_OP_CLEAR) {
+           /* issue clear of this attachment */
+           const struct intel_rt_view *rt = fb->rt[i];
+
+           VkImageSubresourceRange ranges[1] = {{
+               VK_IMAGE_ASPECT_COLOR,
+               rt->mipLevel,
+               1,
+               rt->baseArraySlice,
+               rt->array_size
+           }};
+
+           cmd_meta_clear_color_image(cmdBuffer, (VkImage) rt->img,
+                                      rp->colorLayouts[i],
+                                      &rp->colorClearValues[i],
+                                      1,
+                                      ranges);
+       }
+   }
 }
 
 ICD_EXPORT void VKAPI vkCmdEndRenderPass(