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/RenderbufferVk.cpp b/src/libANGLE/renderer/vulkan/RenderbufferVk.cpp
index 5640703..073af25 100644
--- a/src/libANGLE/renderer/vulkan/RenderbufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RenderbufferVk.cpp
@@ -90,7 +90,7 @@
// Note that LUMA textures are not color-renderable, so a read-view with swizzle is not
// needed.
ANGLE_TRY(mImage->initImageView(contextVk, gl::TextureType::_2D, aspect, gl::SwizzleState(),
- &mImageView, 1));
+ &mImageView, 0, 1));
// TODO(jmadill): Fold this into the RenderPass load/store ops. http://anglebug.com/2361
vk::CommandBuffer *commandBuffer = nullptr;
@@ -106,7 +106,7 @@
mImage->clearColor(kBlackClearColorValue, 0, 1, commandBuffer);
}
- mRenderTarget.init(mImage, &mImageView, 0, nullptr);
+ mRenderTarget.init(mImage, &mImageView, 0, 0, nullptr);
}
return angle::Result::Continue;
@@ -140,9 +140,9 @@
VkImageAspectFlags aspect = vk::GetFormatAspectFlags(textureFormat);
ANGLE_TRY(mImage->initImageView(contextVk, gl::TextureType::_2D, aspect, gl::SwizzleState(),
- &mImageView, 1));
+ &mImageView, imageVk->getImageLevel(), 1));
- mRenderTarget.init(mImage, &mImageView, 0, nullptr);
+ mRenderTarget.init(mImage, &mImageView, imageVk->getImageLevel(), 0, nullptr);
return angle::Result::Continue;
}