Commit 6854940d by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Correct RenderTargetVk extents to image mip

RenderTargetVk::getImageExtents() was always returning the base level extents of the image it was viewing. This resulted in incorrect extents being provided to various framebuffer- and renderpass-related declarations. The function is renamed to `getExtents()` and returns the appropriate mip extents. Bug: angleproject:2361 Change-Id: I059a8d19fcb140c9095107d935aa3e5cb1852fc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1537327 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent e18ff25d
......@@ -45,7 +45,7 @@ bool ClipToRenderTarget(const gl::Rectangle &area,
RenderTargetVk *renderTarget,
gl::Rectangle *rectOut)
{
const gl::Extents &renderTargetExtents = renderTarget->getImageExtents();
const gl::Extents renderTargetExtents = renderTarget->getExtents();
gl::Rectangle renderTargetRect(0, 0, renderTargetExtents.width, renderTargetExtents.height);
return ClipRectangle(area, renderTargetRect, rectOut);
}
......@@ -679,7 +679,7 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
vk::ImageHelper *srcImage = readRenderTarget->getImageForRead(
&mFramebuffer, vk::ImageLayout::TransferSrc, commandBuffer);
const gl::Extents sourceFrameBufferExtents = readRenderTarget->getImageExtents();
const gl::Extents sourceFrameBufferExtents = readRenderTarget->getExtents();
gl::Rectangle readRect = readRectIn;
if (flipSource)
......@@ -699,8 +699,8 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
blit.dstSubresource.baseArrayLayer = 0;
blit.dstSubresource.layerCount = 1;
const gl::Extents &drawFrameBufferExtents = drawRenderTarget->getImageExtents();
gl::Rectangle drawRect = drawRectIn;
const gl::Extents drawFrameBufferExtents = drawRenderTarget->getExtents();
gl::Rectangle drawRect = drawRectIn;
if (flipDest)
{
......@@ -858,8 +858,8 @@ angle::Result FramebufferVk::getFramebuffer(ContextVk *contextVk, vk::Framebuffe
ASSERT(colorRenderTarget);
attachments.push_back(colorRenderTarget->getDrawImageView()->getHandle());
ASSERT(attachmentsSize.empty() || attachmentsSize == colorRenderTarget->getImageExtents());
attachmentsSize = colorRenderTarget->getImageExtents();
ASSERT(attachmentsSize.empty() || attachmentsSize == colorRenderTarget->getExtents());
attachmentsSize = colorRenderTarget->getExtents();
}
RenderTargetVk *depthStencilRenderTarget = mRenderTargetCache.getDepthStencil();
......@@ -868,8 +868,8 @@ angle::Result FramebufferVk::getFramebuffer(ContextVk *contextVk, vk::Framebuffe
attachments.push_back(depthStencilRenderTarget->getDrawImageView()->getHandle());
ASSERT(attachmentsSize.empty() ||
attachmentsSize == depthStencilRenderTarget->getImageExtents());
attachmentsSize = depthStencilRenderTarget->getImageExtents();
attachmentsSize == depthStencilRenderTarget->getExtents());
attachmentsSize = depthStencilRenderTarget->getExtents();
}
ASSERT(!attachments.empty());
......@@ -1167,9 +1167,9 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk,
return angle::Result::Continue;
}
const gl::Extents &FramebufferVk::getReadImageExtents() const
gl::Extents FramebufferVk::getReadImageExtents() const
{
return getColorReadRenderTarget()->getImageExtents();
return getColorReadRenderTarget()->getExtents();
}
RenderTargetVk *FramebufferVk::getFirstRenderTarget() const
......
......@@ -100,7 +100,7 @@ class FramebufferVk : public FramebufferImpl
RenderTargetVk *renderTarget,
void *pixels);
const gl::Extents &getReadImageExtents() const;
gl::Extents getReadImageExtents() const;
const gl::DrawBufferMask &getEmulatedAlphaAttachmentMask() const;
RenderTargetVk *getColorReadRenderTarget() const;
......
......@@ -119,10 +119,10 @@ const vk::Format &RenderTargetVk::getImageFormat() const
return mImage->getFormat();
}
const gl::Extents &RenderTargetVk::getImageExtents() const
gl::Extents RenderTargetVk::getExtents() const
{
ASSERT(mImage && mImage->valid());
return mImage->getExtents();
return mImage->getLevelExtents2D(mLevelIndex);
}
void RenderTargetVk::updateSwapchainImage(vk::ImageHelper *image, vk::ImageView *imageView)
......
......@@ -71,7 +71,7 @@ class RenderTargetVk final : public FramebufferAttachmentRenderTarget
vk::ImageView *getReadImageView() const;
const vk::Format &getImageFormat() const;
const gl::Extents &getImageExtents() const;
gl::Extents getExtents() const;
size_t getLevelIndex() const { return mLevelIndex; }
size_t getLayerIndex() const { return mLayerIndex; }
......
......@@ -970,12 +970,12 @@ void WindowSurfaceVk::setSwapInterval(EGLint interval)
EGLint WindowSurfaceVk::getWidth() const
{
return static_cast<EGLint>(mColorRenderTarget.getImageExtents().width);
return static_cast<EGLint>(mColorRenderTarget.getExtents().width);
}
EGLint WindowSurfaceVk::getHeight() const
{
return static_cast<EGLint>(mColorRenderTarget.getImageExtents().height);
return static_cast<EGLint>(mColorRenderTarget.getExtents().height);
}
EGLint WindowSurfaceVk::isPostSubBufferSupported() const
......@@ -1023,7 +1023,7 @@ angle::Result WindowSurfaceVk::getCurrentFramebuffer(vk::Context *context,
VkFramebufferCreateInfo framebufferInfo = {};
const gl::Extents &extents = mColorRenderTarget.getImageExtents();
const gl::Extents extents = mColorRenderTarget.getExtents();
std::array<VkImageView, 2> imageViews = {{VK_NULL_HANDLE, mDepthStencilImageView.getHandle()}};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
......
......@@ -1546,6 +1546,14 @@ VkImageLayout ImageHelper::getCurrentLayout() const
return kImageMemoryBarrierData[mCurrentLayout].layout;
}
gl::Extents ImageHelper::getLevelExtents2D(uint32_t level) const
{
int width = std::max(mExtents.width >> level, 1);
int height = std::max(mExtents.height >> level, 1);
return gl::Extents(width, height, 1);
}
bool ImageHelper::isLayoutChangeNecessary(ImageLayout newLayout) const
{
const ImageMemoryBarrierData &layoutData = kImageMemoryBarrierData[mCurrentLayout];
......
......@@ -610,6 +610,10 @@ class ImageHelper final : public CommandGraphResource
VkImageLayout getCurrentLayout() const;
// Helper function to calculate the extents of a render target created for a certain mip of the
// image.
gl::Extents getLevelExtents2D(uint32_t level) const;
void clearColor(const VkClearColorValue &color,
uint32_t baseMipLevel,
uint32_t levelCount,
......
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