Commit 92d3912d by Charlie Lao Committed by Commit Bot

Vulkan: Remove maxLevel and immutable from ImageHelper::initExternal

Now that we have removed mBaseLevel and mMaxLevel from ImageHelper class in previous two CLs. The initExternal function can be modified to not pass in base/max level information. This CL also removes immutable from argument and let caller directly pass in firstLevel to it. Bug: b/181800403 Change-Id: I595c1faffabc7582af35a9578b2ecdf00c39207f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2800414 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent 2143ffc2
......@@ -204,11 +204,11 @@ angle::Result MemoryObjectVk::createImage(ContextVk *contextVk,
// ANGLE_external_objects_flags allows create flags to be specified by the application instead
// of getting defaulted to zero. Note that the GL enum values constituting the bits of
// |createFlags| are identical to their corresponding Vulkan value.
ANGLE_TRY(image->initExternal(
contextVk, type, vkExtents, vkFormat, 1, imageUsageFlags, createFlags,
vk::ImageLayout::Undefined, &externalMemoryImageCreateInfo, gl::LevelIndex(0),
gl::LevelIndex(static_cast<uint32_t>(levels) - 1), static_cast<uint32_t>(levels),
layerCount, contextVk->isRobustResourceInitEnabled(), false, nullptr));
ANGLE_TRY(image->initExternal(contextVk, type, vkExtents, vkFormat, 1, imageUsageFlags,
createFlags, vk::ImageLayout::Undefined,
&externalMemoryImageCreateInfo, gl::LevelIndex(0),
static_cast<uint32_t>(levels), layerCount,
contextVk->isRobustResourceInitEnabled(), nullptr));
VkMemoryRequirements externalMemoryRequirements;
image->getImage().getMemoryRequirements(renderer->getDevice(), &externalMemoryRequirements);
......
......@@ -110,12 +110,12 @@ angle::Result OverlayVk::createFont(ContextVk *contextVk)
bool useRobustInit = false;
// Create the font image.
ANGLE_TRY(mFontImage.init(
contextVk, gl::TextureType::_2D,
VkExtent3D{gl::overlay::kFontImageWidth, gl::overlay::kFontImageHeight, 1},
renderer->getFormat(angle::FormatID::R8_UNORM), 1,
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, gl::LevelIndex(0),
gl::LevelIndex(0), 1, gl::overlay::kFontCount, useRobustInit));
ANGLE_TRY(
mFontImage.init(contextVk, gl::TextureType::_2D,
VkExtent3D{gl::overlay::kFontImageWidth, gl::overlay::kFontImageHeight, 1},
renderer->getFormat(angle::FormatID::R8_UNORM), 1,
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
gl::LevelIndex(0), 1, gl::overlay::kFontCount, useRobustInit));
ANGLE_TRY(mFontImage.initMemory(contextVk, renderer->getMemoryProperties(),
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
ANGLE_TRY(mFontImage.initImageView(contextVk, gl::TextureType::_2DArray,
......@@ -188,7 +188,7 @@ angle::Result OverlayVk::cullWidgets(ContextVk *contextVk)
ANGLE_TRY(mCulledWidgets.init(contextVk, gl::TextureType::_2D, culledWidgetsExtent,
renderer->getFormat(angle::FormatID::R32G32_UINT), 1,
VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
gl::LevelIndex(0), gl::LevelIndex(0), 1, 1, useRobustInit));
gl::LevelIndex(0), 1, 1, useRobustInit));
ANGLE_TRY(mCulledWidgets.initMemory(contextVk, renderer->getMemoryProperties(),
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
ANGLE_TRY(mCulledWidgets.initImageView(contextVk, gl::TextureType::_2D,
......
......@@ -105,8 +105,7 @@ angle::Result RenderbufferVk::setStorageImpl(const gl::Context *context,
VkExtent3D extents = {static_cast<uint32_t>(width), static_cast<uint32_t>(height), 1u};
ANGLE_TRY(mImage->initExternal(contextVk, gl::TextureType::_2D, extents, format, imageSamples,
usage, vk::kVkImageCreateFlagsNone, vk::ImageLayout::Undefined,
nullptr, gl::LevelIndex(0), gl::LevelIndex(0), 1, 1, robustInit,
false, nullptr));
nullptr, gl::LevelIndex(0), 1, 1, robustInit, nullptr));
VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
ANGLE_TRY(mImage->initMemory(contextVk, renderer->getMemoryProperties(), flags));
......
......@@ -131,10 +131,10 @@ angle::Result InitImageHelper(DisplayVk *displayVk,
VkExtent3D extents = {std::max(static_cast<uint32_t>(width), 1u),
std::max(static_cast<uint32_t>(height), 1u), 1u};
ANGLE_TRY(imageHelper->initExternal(
displayVk, gl::TextureType::_2D, extents, vkFormat, samples, usage,
vk::kVkImageCreateFlagsNone, vk::ImageLayout::Undefined, nullptr, gl::LevelIndex(0),
gl::LevelIndex(0), 1, 1, isRobustResourceInitEnabled, false, nullptr));
ANGLE_TRY(imageHelper->initExternal(displayVk, gl::TextureType::_2D, extents, vkFormat, samples,
usage, vk::kVkImageCreateFlagsNone,
vk::ImageLayout::Undefined, nullptr, gl::LevelIndex(0), 1,
1, isRobustResourceInitEnabled, nullptr));
return angle::Result::Continue;
}
......@@ -1045,7 +1045,7 @@ angle::Result WindowSurfaceVk::createSwapChain(vk::Context *context,
// values and then rotates the final rectangle).
ANGLE_TRY(mColorImageMS.initMSAASwapchain(
context, gl::TextureType::_2D, vkExtents, Is90DegreeRotation(getPreTransform()), format,
samples, usage, gl::LevelIndex(0), gl::LevelIndex(0), 1, 1, robustInit));
samples, usage, gl::LevelIndex(0), 1, 1, robustInit));
ANGLE_TRY(mColorImageMS.initMemory(context, renderer->getMemoryProperties(),
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
......@@ -1075,8 +1075,7 @@ angle::Result WindowSurfaceVk::createSwapChain(vk::Context *context,
const VkImageUsageFlags dsUsage = kSurfaceVkDepthStencilImageUsageFlags;
ANGLE_TRY(mDepthStencilImage.init(context, gl::TextureType::_2D, vkExtents, dsFormat,
samples, dsUsage, gl::LevelIndex(0), gl::LevelIndex(0), 1,
1, robustInit));
samples, dsUsage, gl::LevelIndex(0), 1, 1, robustInit));
ANGLE_TRY(mDepthStencilImage.initMemory(context, renderer->getMemoryProperties(),
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
......
......@@ -2727,8 +2727,7 @@ angle::Result TextureVk::initImage(ContextVk *contextVk,
ANGLE_TRY(mImage->initExternal(
contextVk, mState.getType(), vkExtent, format, samples, mImageUsageFlags, mImageCreateFlags,
vk::ImageLayout::Undefined, nullptr, gl::LevelIndex(mState.getEffectiveBaseLevel()),
gl::LevelIndex(mState.getEffectiveMaxLevel()), levelCount, layerCount,
contextVk->isRobustResourceInitEnabled(), false, &imageFormatListEnabled));
levelCount, layerCount, contextVk->isRobustResourceInitEnabled(), &imageFormatListEnabled));
mRequiresMutableStorage = (mImageCreateFlags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) != 0;
......@@ -2756,12 +2755,11 @@ angle::Result TextureVk::initImmutableImage(ContextVk *contextVk, const vk::Form
GLint samples = mState.getBaseLevelDesc().samples ? mState.getBaseLevelDesc().samples : 1;
bool imageFormatListEnabled = false;
ANGLE_TRY(mImage->initExternal(
contextVk, mState.getType(), vkExtentLevel0, format, samples, mImageUsageFlags,
mImageCreateFlags, vk::ImageLayout::Undefined, nullptr,
gl::LevelIndex(mState.getEffectiveBaseLevel()),
gl::LevelIndex(mState.getEffectiveMaxLevel()), mState.getImmutableLevels(), layerCount,
contextVk->isRobustResourceInitEnabled(), true, &imageFormatListEnabled));
ANGLE_TRY(mImage->initExternal(contextVk, mState.getType(), vkExtentLevel0, format, samples,
mImageUsageFlags, mImageCreateFlags, vk::ImageLayout::Undefined,
nullptr, gl::LevelIndex(0), mState.getImmutableLevels(),
layerCount, contextVk->isRobustResourceInitEnabled(),
&imageFormatListEnabled));
mRequiresMutableStorage = (mImageCreateFlags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) != 0;
......
......@@ -263,8 +263,7 @@ angle::Result HardwareBufferImageSiblingVkAndroid::initImpl(DisplayVk *displayVk
displayVk, gl::TextureType::_2D, vkExtents,
bufferFormatProperties.format == VK_FORMAT_UNDEFINED ? externalVkFormat : vkFormat, 1,
usage, vk::kVkImageCreateFlagsNone, vk::ImageLayout::ExternalPreInitialized,
&externalMemoryImageCreateInfo, gl::LevelIndex(0), gl::LevelIndex(0), 1, 1,
robustInitEnabled, false, nullptr));
&externalMemoryImageCreateInfo, gl::LevelIndex(0), 1, 1, robustInitEnabled, nullptr));
VkImportAndroidHardwareBufferInfoANDROID importHardwareBufferInfo = {};
importHardwareBufferInfo.sType = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
......
......@@ -3625,7 +3625,6 @@ ImageHelper::ImageHelper(ImageHelper &&other)
mUsage(other.mUsage),
mExtents(other.mExtents),
mRotatedAspectRatio(other.mRotatedAspectRatio),
mImmutable(other.mImmutable),
mFormat(other.mFormat),
mSamples(other.mSamples),
mImageSerial(other.mImageSerial),
......@@ -3660,7 +3659,6 @@ void ImageHelper::resetCachedProperties()
mUsage = 0;
mExtents = {};
mRotatedAspectRatio = false;
mImmutable = false;
mFormat = nullptr;
mSamples = 1;
mImageSerial = kInvalidImageSerial;
......@@ -3770,16 +3768,14 @@ angle::Result ImageHelper::init(Context *context,
const Format &format,
GLint samples,
VkImageUsageFlags usage,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled)
{
return initExternal(context, textureType, extents, format, samples, usage,
kVkImageCreateFlagsNone, ImageLayout::Undefined, nullptr, baseLevel,
maxLevel, mipLevels, layerCount, isRobustResourceInitEnabled, false,
nullptr);
kVkImageCreateFlagsNone, ImageLayout::Undefined, nullptr, firstLevel,
mipLevels, layerCount, isRobustResourceInitEnabled, nullptr);
}
angle::Result ImageHelper::initMSAASwapchain(Context *context,
......@@ -3789,16 +3785,14 @@ angle::Result ImageHelper::initMSAASwapchain(Context *context,
const Format &format,
GLint samples,
VkImageUsageFlags usage,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled)
{
ANGLE_TRY(initExternal(context, textureType, extents, format, samples, usage,
kVkImageCreateFlagsNone, ImageLayout::Undefined, nullptr, baseLevel,
maxLevel, mipLevels, layerCount, isRobustResourceInitEnabled, false,
nullptr));
kVkImageCreateFlagsNone, ImageLayout::Undefined, nullptr, firstLevel,
mipLevels, layerCount, isRobustResourceInitEnabled, nullptr));
if (rotatedAspectRatio)
{
std::swap(mExtents.width, mExtents.height);
......@@ -3816,12 +3810,10 @@ angle::Result ImageHelper::initExternal(Context *context,
VkImageCreateFlags additionalCreateFlags,
ImageLayout initialLayout,
const void *externalImageCreateInfo,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled,
bool immutable,
bool *imageFormatListEnabledOut)
{
ASSERT(!valid());
......@@ -3831,11 +3823,10 @@ angle::Result ImageHelper::initExternal(Context *context,
mImageType = gl_vk::GetImageType(textureType);
mExtents = extents;
mRotatedAspectRatio = false;
mImmutable = immutable;
mFormat = &format;
mSamples = std::max(samples, 1);
mImageSerial = context->getRenderer()->getResourceSerialFactory().generateImageSerial();
mFirstAllocatedLevel = immutable ? gl::LevelIndex(0) : baseLevel;
mFirstAllocatedLevel = firstLevel;
mLevelCount = mipLevels;
mLayerCount = layerCount;
mUsage = usage;
......@@ -4379,12 +4370,11 @@ angle::Result ImageHelper::initImplicitMultisampledRenderToTexture(
: VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
constexpr VkImageCreateFlags kMultisampledCreateFlags = 0;
ANGLE_TRY(
initExternal(context, textureType, resolveImage.getExtents(), resolveImage.getFormat(),
samples, kMultisampledUsageFlags, kMultisampledCreateFlags,
ImageLayout::Undefined, nullptr, resolveImage.getFirstAllocatedLevel(),
resolveImage.getLastAllocatedLevel(), resolveImage.getLevelCount(),
resolveImage.getLayerCount(), isRobustResourceInitEnabled, false, nullptr));
ANGLE_TRY(initExternal(context, textureType, resolveImage.getExtents(),
resolveImage.getFormat(), samples, kMultisampledUsageFlags,
kMultisampledCreateFlags, ImageLayout::Undefined, nullptr,
resolveImage.getFirstAllocatedLevel(), resolveImage.getLevelCount(),
resolveImage.getLayerCount(), isRobustResourceInitEnabled, nullptr));
const VkMemoryPropertyFlags kMultisampledMemoryFlags =
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
......@@ -4561,9 +4551,6 @@ bool ImageHelper::isReleasedToExternal() const
void ImageHelper::setFirstAllocatedLevel(gl::LevelIndex firstLevel)
{
// For immutable texture, we always allocate the entire mipmap chain [0, mLevelCount-1].
// For mutable textures, we will try to reallocate based on baseLevel change
ASSERT(!mImmutable);
ASSERT(!valid());
mFirstAllocatedLevel = firstLevel;
}
......
......@@ -1418,8 +1418,7 @@ class ImageHelper final : public Resource, public angle::Subject
const Format &format,
GLint samples,
VkImageUsageFlags usage,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled);
......@@ -1430,8 +1429,7 @@ class ImageHelper final : public Resource, public angle::Subject
const Format &format,
GLint samples,
VkImageUsageFlags usage,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled);
......@@ -1444,12 +1442,10 @@ class ImageHelper final : public Resource, public angle::Subject
VkImageCreateFlags additionalCreateFlags,
ImageLayout initialLayout,
const void *externalImageCreateInfo,
gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstLevel,
uint32_t mipLevels,
uint32_t layerCount,
bool isRobustResourceInitEnabled,
bool immutable,
bool *imageFormatListEnabledOut);
angle::Result initMemory(Context *context,
const MemoryProperties &memoryProperties,
......@@ -2043,9 +2039,6 @@ class ImageHelper final : public Resource, public angle::Subject
// different between the rotated and non-rotated extents.
VkExtent3D mExtents;
bool mRotatedAspectRatio;
// True if this is created by an immutable texture glTexStorage. For immutable texture, the
// underlying VkImage object is always created from level 0 to mLevelCount-1.
bool mImmutable;
const Format *mFormat;
GLint mSamples;
ImageSerial mImageSerial;
......
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