Vulkan: Don't use swizzle state when its not needed

Enables a bunch of dEQP tests in the functional.fbo.render.* namespace.

Bug: angleproject:2597
Change-Id: I1a06b335d5daf2987df52c460903081860887ce9
Reviewed-on: https://chromium-review.googlesource.com/1097596
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 38f91fc..8d03749 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -533,13 +533,24 @@
 
     if (clearColor)
     {
+        RenderTargetVk *renderTarget = getColorReadRenderTarget();
+        const vk::Format &format     = renderTarget->getImageFormat();
+        VkClearValue modifiedClear   = contextVk->getClearColorValue();
+
+        // We need to make sure we are not clearing the alpha channel if we are using a buffer
+        // format that doesn't have an alpha channel.
+        if (format.angleFormat().alphaBits == 0)
+        {
+            modifiedClear.color.float32[3] = 1.0;
+        }
+
         // TODO(jmadill): Support gaps in RenderTargets. http://anglebug.com/2394
         for (size_t colorIndex : mState.getEnabledDrawBuffers())
         {
             VkClearAttachment &clearAttachment = clearAttachments[clearAttachmentIndex];
             clearAttachment.aspectMask         = VK_IMAGE_ASPECT_COLOR_BIT;
             clearAttachment.colorAttachment    = static_cast<uint32_t>(colorIndex);
-            clearAttachment.clearValue         = contextVk->getClearColorValue();
+            clearAttachment.clearValue         = modifiedClear;
             ++clearAttachmentIndex;
         }
     }