Merge pull request #4574 from stenzek/vulkan-alpha-clear
Vulkan: Clear alpha channel to 0 when pixel format has no alpha channel
This commit is contained in:
commit
96314a0ec1
|
@ -233,10 +233,10 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
|
||||||
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_efbDepth, 0, i);
|
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_efbDepth, 0, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EFB framebuffer is currently bound, make sure to clear its alpha value to 1.f
|
// EFB framebuffer is currently bound, make sure to clear it before use.
|
||||||
glViewport(0, 0, m_targetWidth, m_targetHeight);
|
glViewport(0, 0, m_targetWidth, m_targetHeight);
|
||||||
glScissor(0, 0, m_targetWidth, m_targetHeight);
|
glScissor(0, 0, m_targetWidth, m_targetHeight);
|
||||||
glClearColor(0.f, 0.f, 0.f, 1.f);
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
glClearDepthf(1.0f);
|
glClearDepthf(1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
|
|
@ -333,7 +333,7 @@ bool FramebufferManager::CreateEFBFramebuffer()
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
|
|
||||||
// Clear the contents of the buffers.
|
// Clear the contents of the buffers.
|
||||||
static const VkClearColorValue clear_color = {{0.0f, 0.0f, 0.0f, 1.0f}};
|
static const VkClearColorValue clear_color = {{0.0f, 0.0f, 0.0f, 0.0f}};
|
||||||
static const VkClearDepthStencilValue clear_depth = {0.0f, 0};
|
static const VkClearDepthStencilValue clear_depth = {0.0f, 0};
|
||||||
VkImageSubresourceRange clear_color_range = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, m_efb_layers};
|
VkImageSubresourceRange clear_color_range = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, m_efb_layers};
|
||||||
VkImageSubresourceRange clear_depth_range = {VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, m_efb_layers};
|
VkImageSubresourceRange clear_depth_range = {VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, m_efb_layers};
|
||||||
|
|
|
@ -345,9 +345,10 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool color_enable, bool alpha
|
||||||
bpmem.zcontrol.pixel_format == PEControl::RGB8_Z24 ||
|
bpmem.zcontrol.pixel_format == PEControl::RGB8_Z24 ||
|
||||||
bpmem.zcontrol.pixel_format == PEControl::Z24)
|
bpmem.zcontrol.pixel_format == PEControl::Z24)
|
||||||
{
|
{
|
||||||
// Force alpha writes, and set the color to 0xFF.
|
// Force alpha writes, and clear the alpha channel. This is different to the other backends,
|
||||||
|
// where the existing values of the alpha channel are preserved.
|
||||||
alpha_enable = true;
|
alpha_enable = true;
|
||||||
color |= 0xFF000000;
|
color &= 0x00FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert RGBA8 -> floating-point values.
|
// Convert RGBA8 -> floating-point values.
|
||||||
|
|
Loading…
Reference in New Issue