Vulkan: Support creating EGL images from non-zero mipmaps of textures.
Store a mip offset in TextureVK to apply to all operations on the ImageHelper.
There is no need to store the mip offset in RenderbufferVk because it creates
the resource with the mip offset on the call to setStorageEGLImageTarget.
Store a mipmap level in the RenderTargetVk object so that clear operations
will target the correct mipmap of the image.
BUG=angleproject:2668
Change-Id: Ie976e3dd3a8de8135a7fbb8c84bd51eec0dddce8
Reviewed-on: https://chromium-review.googlesource.com/c/1422059
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index f349e9c..00339a4 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -297,10 +297,9 @@
ASSERT(colorRenderTarget);
vk::ImageHelper *image = colorRenderTarget->getImageForWrite(&mFramebuffer);
- GLint mipLevelToClear = (attachment->type() == GL_TEXTURE) ? attachment->mipLevel() : 0;
// If we're clearing a cube map face ensure we only clear the selected layer.
- image->clearColorLayer(modifiedClearColorValue, mipLevelToClear, 1,
+ image->clearColorLayer(modifiedClearColorValue, colorRenderTarget->getLevelIndex(), 1,
colorRenderTarget->getLayerIndex(), 1, commandBuffer);
}
@@ -1138,7 +1137,7 @@
region.imageSubresource.aspectMask = copyAspectFlags;
region.imageSubresource.baseArrayLayer = renderTarget->getLayerIndex();
region.imageSubresource.layerCount = 1;
- region.imageSubresource.mipLevel = 0;
+ region.imageSubresource.mipLevel = renderTarget->getLevelIndex();
commandBuffer->copyImageToBuffer(srcImage->getImage(), srcImage->getCurrentLayout(),
bufferHandle, 1, ®ion);