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;
}
}