Commit 4d10efbc by Jamie Madill Committed by Commit Bot

Vulkan: Store ImageType in ImageHelper.

We ended up needing this to recover the image type in the RenderTarget. Otherwise we don't have direct access to this information in the FramebufferVk sync state code. Bug: angleproject:4517 Change-Id: I387947e0b7394e1f63f313dd4792bb042b8da73a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2151170Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarCharlie Lao <cclao@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 8c693ae8
......@@ -1938,21 +1938,14 @@ void BufferHelper::updateWriteBarrier(VkAccessFlags writeAccessType,
// ImageHelper implementation.
ImageHelper::ImageHelper()
: mExtents{},
mFormat(nullptr),
mSamples(1),
mSerial(rx::kZeroSerial),
mCurrentLayout(ImageLayout::Undefined),
mCurrentQueueFamilyIndex(std::numeric_limits<uint32_t>::max()),
mBaseLevel(0),
mMaxLevel(0),
mLayerCount(0),
mLevelCount(0)
{}
{
resetCachedProperties();
}
ImageHelper::ImageHelper(ImageHelper &&other)
: mImage(std::move(other.mImage)),
mDeviceMemory(std::move(other.mDeviceMemory)),
mImageType(other.mImageType),
mExtents(other.mExtents),
mFormat(other.mFormat),
mSamples(other.mSamples),
......@@ -1967,12 +1960,7 @@ ImageHelper::ImageHelper(ImageHelper &&other)
mSubresourceUpdates(std::move(other.mSubresourceUpdates))
{
ASSERT(this != &other);
other.mCurrentLayout = ImageLayout::Undefined;
other.mBaseLevel = 0;
other.mMaxLevel = 0;
other.mLayerCount = 0;
other.mLevelCount = 0;
other.mSerial = rx::kZeroSerial;
other.resetCachedProperties();
}
ImageHelper::~ImageHelper()
......@@ -1980,6 +1968,21 @@ ImageHelper::~ImageHelper()
ASSERT(!valid());
}
void ImageHelper::resetCachedProperties()
{
mImageType = VK_IMAGE_TYPE_2D;
mExtents = {};
mFormat = nullptr;
mSamples = 1;
mSerial = rx::kZeroSerial;
mCurrentLayout = ImageLayout::Undefined;
mCurrentQueueFamilyIndex = std::numeric_limits<uint32_t>::max();
mBaseLevel = 0;
mMaxLevel = 0;
mLayerCount = 0;
mLevelCount = 0;
}
void ImageHelper::initStagingBuffer(RendererVk *renderer,
const Format &format,
VkBufferUsageFlags usageFlags,
......@@ -2021,6 +2024,7 @@ angle::Result ImageHelper::initExternal(Context *context,
{
ASSERT(!valid());
mImageType = gl_vk::GetImageType(textureType);
mExtents = extents;
mFormat = &format;
mSamples = samples;
......@@ -2040,7 +2044,7 @@ angle::Result ImageHelper::initExternal(Context *context,
imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageInfo.pNext = externalImageCreateInfo;
imageInfo.flags = GetImageCreateFlags(textureType);
imageInfo.imageType = gl_vk::GetImageType(textureType);
imageInfo.imageType = mImageType;
imageInfo.format = format.vkImageFormat;
imageInfo.extent = mExtents;
imageInfo.mipLevels = mipLevels;
......@@ -2225,6 +2229,7 @@ void ImageHelper::destroy(RendererVk *renderer)
mDeviceMemory.destroy(device);
mStagingBuffer.destroy(renderer);
mCurrentLayout = ImageLayout::Undefined;
mImageType = VK_IMAGE_TYPE_2D;
mLayerCount = 0;
mLevelCount = 0;
mSerial = rx::kZeroSerial;
......@@ -2260,6 +2265,7 @@ angle::Result ImageHelper::init2DStaging(Context *context,
ASSERT(!valid());
gl_vk::GetExtent(glExtents, &mExtents);
mImageType = VK_IMAGE_TYPE_2D;
mFormat = &format;
mSamples = 1;
mLayerCount = layerCount;
......@@ -2270,7 +2276,7 @@ angle::Result ImageHelper::init2DStaging(Context *context,
VkImageCreateInfo imageInfo = {};
imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageInfo.flags = 0;
imageInfo.imageType = VK_IMAGE_TYPE_2D;
imageInfo.imageType = mImageType;
imageInfo.format = format.vkImageFormat;
imageInfo.extent = mExtents;
imageInfo.mipLevels = 1;
......
......@@ -813,6 +813,7 @@ class ImageHelper final : public Resource, public angle::Subject
const Image &getImage() const { return mImage; }
const DeviceMemory &getDeviceMemory() const { return mDeviceMemory; }
VkImageType getType() const { return mImageType; }
const VkExtent3D &getExtents() const { return mExtents; }
uint32_t getLayerCount() const { return mLayerCount; }
uint32_t getLevelCount() const { return mLevelCount; }
......@@ -1110,12 +1111,14 @@ class ImageHelper final : public Resource, public angle::Subject
void appendSubresourceUpdate(SubresourceUpdate &&update);
void prependSubresourceUpdate(SubresourceUpdate &&update);
void resetCachedProperties();
// Vulkan objects.
Image mImage;
DeviceMemory mDeviceMemory;
// Image properties.
VkImageType mImageType;
VkExtent3D mExtents;
const Format *mFormat;
GLint mSamples;
......
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