Vulkan: Use angle::Format for ImageViewHelper class
ImageViewHelper class only needs actualFormatID. Instead of passing
vk::Format to ImageViewHelper, this CL passes actualImageFormatID to the
ImageViewHelper API to further reduce the exposure to vk::Format where
getting actualImageFormatID needs extra information (renderable or not)
Bug: b/196456356
Change-Id: I26afc1f37980a3b2419a66510cf720d79ad0a111
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3101928
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/TextureVk.cpp b/src/libANGLE/renderer/vulkan/TextureVk.cpp
index 6e848d2..4118eaf 100644
--- a/src/libANGLE/renderer/vulkan/TextureVk.cpp
+++ b/src/libANGLE/renderer/vulkan/TextureVk.cpp
@@ -1301,8 +1301,8 @@
mImageCreateFlags = createFlags;
gl::Format glFormat(internalFormat);
- ANGLE_TRY(initImageViews(contextVk, format, glFormat.info->sized, static_cast<uint32_t>(levels),
- mImage->getLayerCount()));
+ ANGLE_TRY(initImageViews(contextVk, format.actualImageFormat(), glFormat.info->sized,
+ static_cast<uint32_t>(levels), mImage->getLayerCount()));
return angle::Result::Continue;
}
@@ -1356,7 +1356,8 @@
gl::LevelIndex(mState.getEffectiveBaseLevel()), false);
ASSERT(type != gl::TextureType::CubeMap);
- ANGLE_TRY(initImageViews(contextVk, format, image->getFormat().info->sized, 1, 1));
+ ANGLE_TRY(initImageViews(contextVk, format.actualImageFormat(), image->getFormat().info->sized,
+ 1, 1));
// Transfer the image to this queue if needed
uint32_t rendererQueueFamilyIndex = renderer->getQueueFamilyIndex();
@@ -1974,8 +1975,9 @@
// looking at one layer of a cube or 2D array texture.
uint32_t layerCount =
mState.getType() == gl::TextureType::_2D ? 1 : mImage->getLayerCount();
- return initImageViews(contextVk, mImage->getFormat(), baseLevelDesc.format.info->sized,
- maxLevel - baseLevel + 1, layerCount);
+ return initImageViews(contextVk, mImage->getActualFormat(),
+ baseLevelDesc.format.info->sized, maxLevel - baseLevel + 1,
+ layerCount);
}
return respecifyImageStorageAndLevels(contextVk, mImage->getFirstAllocatedLevel(), baseLevel,
@@ -2150,7 +2152,7 @@
ASSERT(mImage->getLayerCount() == 1);
gl::Format glFormat(internalFormat);
- return initImageViews(contextVk, format, glFormat.info->sized, 1, 1);
+ return initImageViews(contextVk, format.actualImageFormat(), glFormat.info->sized, 1, 1);
}
angle::Result TextureVk::releaseTexImage(const gl::Context *context)
@@ -2836,13 +2838,14 @@
const uint32_t viewLevelCount =
mState.getImmutableFormat() ? getMipLevelCount(ImageMipLevels::EnabledLevels) : levelCount;
- ANGLE_TRY(initImageViews(contextVk, format, sized, viewLevelCount, layerCount));
+ ANGLE_TRY(
+ initImageViews(contextVk, format.actualImageFormat(), sized, viewLevelCount, layerCount));
return angle::Result::Continue;
}
angle::Result TextureVk::initImageViews(ContextVk *contextVk,
- const vk::Format &format,
+ const angle::Format &format,
const bool sized,
uint32_t levelCount,
uint32_t layerCount)
@@ -2854,9 +2857,9 @@
vk::LevelIndex baseLevelVk = mImage->toVkLevel(baseLevelGL);
uint32_t baseLayer = getNativeImageLayer(0);
- const angle::Format &angleFormat = format.intendedFormat();
- gl::SwizzleState formatSwizzle = GetFormatSwizzle(contextVk, angleFormat, sized);
- gl::SwizzleState readSwizzle = ApplySwizzle(formatSwizzle, mState.getSwizzleState());
+ const angle::Format &intendedFormat = mImage->getIntendedFormat();
+ gl::SwizzleState formatSwizzle = GetFormatSwizzle(contextVk, intendedFormat, sized);
+ gl::SwizzleState readSwizzle = ApplySwizzle(formatSwizzle, mState.getSwizzleState());
// Use this as a proxy for the SRGB override & skip decode settings.
bool createExtraSRGBViews = mRequiresMutableStorage;
@@ -3126,7 +3129,7 @@
getImageViews().release(contextVk->getRenderer());
const gl::ImageDesc &baseLevelDesc = mState.getBaseLevelDesc();
- ANGLE_TRY(initImageViews(contextVk, mImage->getFormat(), baseLevelDesc.format.info->sized,
+ ANGLE_TRY(initImageViews(contextVk, mImage->getActualFormat(), baseLevelDesc.format.info->sized,
mImage->getLevelCount(), layerCount));
// Let any Framebuffers know we need to refresh the RenderTarget cache.
diff --git a/src/libANGLE/renderer/vulkan/TextureVk.h b/src/libANGLE/renderer/vulkan/TextureVk.h
index 679054a..096dd7c 100644
--- a/src/libANGLE/renderer/vulkan/TextureVk.h
+++ b/src/libANGLE/renderer/vulkan/TextureVk.h
@@ -429,7 +429,7 @@
vk::ImageHelper *srcImage,
vk::ImageHelper *dstImage);
angle::Result initImageViews(ContextVk *contextVk,
- const vk::Format &format,
+ const angle::Format &format,
const bool sized,
uint32_t levelCount,
uint32_t layerCount);
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
index 8fd358a..42717f5 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
@@ -4421,7 +4421,7 @@
angle::Result ImageHelper::initLayerImageViewWithFormat(Context *context,
gl::TextureType textureType,
- const Format &format,
+ VkFormat imageFormat,
VkImageAspectFlags aspectMask,
const gl::SwizzleState &swizzleMap,
ImageView *imageViewOut,
@@ -4432,7 +4432,7 @@
{
return initLayerImageViewImpl(context, textureType, aspectMask, swizzleMap, imageViewOut,
baseMipLevelVk, levelCount, baseArrayLayer, layerCount,
- format.actualImageVkFormat(), nullptr);
+ imageFormat, nullptr);
}
angle::Result ImageHelper::initLayerImageViewImpl(
@@ -7487,7 +7487,7 @@
angle::Result ImageViewHelper::initReadViews(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,
@@ -7533,7 +7533,7 @@
angle::Result ImageViewHelper::initReadViewsImpl(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,
@@ -7543,22 +7543,23 @@
{
ASSERT(mImageViewSerial.valid());
- const VkImageAspectFlags aspectFlags = GetFormatAspectFlags(format.intendedFormat());
- mLinearColorspace = !format.actualImageFormat().isSRGB;
+ const VkImageAspectFlags aspectFlags = GetFormatAspectFlags(image.getIntendedFormat());
+ mLinearColorspace = !format.isSRGB;
+ VkFormat vkFormat = GetVkFormatFromFormatID(format.id);
if (HasBothDepthAndStencilAspects(aspectFlags))
{
ANGLE_TRY(image.initLayerImageViewWithFormat(
- contextVk, viewType, format, VK_IMAGE_ASPECT_DEPTH_BIT, readSwizzle,
+ contextVk, viewType, vkFormat, VK_IMAGE_ASPECT_DEPTH_BIT, readSwizzle,
&getReadImageView(), baseLevel, levelCount, baseLayer, layerCount));
ANGLE_TRY(image.initLayerImageViewWithFormat(
- contextVk, viewType, format, VK_IMAGE_ASPECT_STENCIL_BIT, readSwizzle,
+ contextVk, viewType, vkFormat, VK_IMAGE_ASPECT_STENCIL_BIT, readSwizzle,
&mPerLevelStencilReadImageViews[mCurrentMaxLevel.get()], baseLevel, levelCount,
baseLayer, layerCount));
}
else
{
- ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, viewType, format, aspectFlags,
+ ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, viewType, vkFormat, aspectFlags,
readSwizzle, &getReadImageView(), baseLevel,
levelCount, baseLayer, layerCount));
}
@@ -7570,12 +7571,12 @@
{
fetchType = Get2DTextureType(layerCount, image.getSamples());
- ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, fetchType, format, aspectFlags,
+ ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, fetchType, vkFormat, aspectFlags,
readSwizzle, &getFetchImageView(), baseLevel,
levelCount, baseLayer, layerCount));
}
- ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, fetchType, format, aspectFlags,
+ ANGLE_TRY(image.initLayerImageViewWithFormat(contextVk, fetchType, vkFormat, aspectFlags,
formatSwizzle, &getCopyImageView(), baseLevel,
levelCount, baseLayer, layerCount));
@@ -7585,7 +7586,7 @@
angle::Result ImageViewHelper::initSRGBReadViewsImpl(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,
@@ -7605,12 +7606,11 @@
ASSERT((linearOverrideFormat == angle::FormatID::NONE) ||
(HasNonRenderableTextureFormatSupport(contextVk->getRenderer(), linearOverrideFormat)));
- angle::FormatID linearFormat = (linearOverrideFormat != angle::FormatID::NONE)
- ? linearOverrideFormat
- : format.actualImageFormatID;
+ angle::FormatID linearFormat =
+ (linearOverrideFormat != angle::FormatID::NONE) ? linearOverrideFormat : format.id;
ASSERT(linearFormat != angle::FormatID::NONE);
- const VkImageAspectFlags aspectFlags = GetFormatAspectFlags(format.intendedFormat());
+ const VkImageAspectFlags aspectFlags = GetFormatAspectFlags(image.getIntendedFormat());
if (!mPerLevelLinearReadImageViews[mCurrentMaxLevel.get()].valid())
{
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.h b/src/libANGLE/renderer/vulkan/vk_helpers.h
index 10a651b..612d8da 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.h
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.h
@@ -1490,7 +1490,7 @@
gl::SrgbWriteControlMode mode) const;
angle::Result initLayerImageViewWithFormat(Context *context,
gl::TextureType textureType,
- const Format &format,
+ VkFormat imageFormat,
VkImageAspectFlags aspectMask,
const gl::SwizzleState &swizzleMap,
ImageView *imageViewOut,
@@ -2268,7 +2268,7 @@
angle::Result initReadViews(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,
@@ -2366,7 +2366,7 @@
angle::Result initReadViewsImpl(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,
@@ -2378,7 +2378,7 @@
angle::Result initSRGBReadViewsImpl(ContextVk *contextVk,
gl::TextureType viewType,
const ImageHelper &image,
- const Format &format,
+ const angle::Format &format,
const gl::SwizzleState &formatSwizzle,
const gl::SwizzleState &readSwizzle,
LevelIndex baseLevel,