Commit 8a43b8c7 by Mohan Maiya Committed by Commit Bot

Vulkan: Fix incorrect alignment logic in readPixels

Framebuffers previously assumed a readPixels buffer alignment of 4 bytes, which causes issues when attempting to read with a format larger than 4 bytes per pixel. Change the default alignment to match the size of the largest know Vulkan format Bug: angleproject:3731 Change-Id: I6cd26a99e6f3b2f30084d403630c17f51a0ecedf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1727731 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent a06d32dc
...@@ -36,6 +36,11 @@ namespace ...@@ -36,6 +36,11 @@ namespace
constexpr unsigned int kEmulatedAlphaValue = 1; constexpr unsigned int kEmulatedAlphaValue = 1;
constexpr size_t kMinReadPixelsBufferSize = 128000; constexpr size_t kMinReadPixelsBufferSize = 128000;
// Alignment value to accommodate the largest known, for now, uncompressed Vulkan format
// VK_FORMAT_R64G64B64A64_SFLOAT
constexpr size_t kReadPixelsBufferAlignment = 32;
// Clear values are only used when loadOp=Clear is set in clearWithRenderPassOp. When starting a // Clear values are only used when loadOp=Clear is set in clearWithRenderPassOp. When starting a
// new render pass, the clear value is set to an unlikely value (bright pink) to stand out better // new render pass, the clear value is set to an unlikely value (bright pink) to stand out better
// in case of a bug. // in case of a bug.
...@@ -164,8 +169,8 @@ FramebufferVk::FramebufferVk(RendererVk *renderer, ...@@ -164,8 +169,8 @@ FramebufferVk::FramebufferVk(RendererVk *renderer,
WindowSurfaceVk *backbuffer) WindowSurfaceVk *backbuffer)
: FramebufferImpl(state), mBackbuffer(backbuffer), mActiveColorComponents(0) : FramebufferImpl(state), mBackbuffer(backbuffer), mActiveColorComponents(0)
{ {
mReadPixelBuffer.init(renderer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, 4, kMinReadPixelsBufferSize, mReadPixelBuffer.init(renderer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, kReadPixelsBufferAlignment,
true); kMinReadPixelsBufferSize, true);
} }
FramebufferVk::~FramebufferVk() = default; FramebufferVk::~FramebufferVk() = default;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment