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, ...@@ -1938,21 +1938,14 @@ void BufferHelper::updateWriteBarrier(VkAccessFlags writeAccessType,
// ImageHelper implementation. // ImageHelper implementation.
ImageHelper::ImageHelper() ImageHelper::ImageHelper()
: mExtents{}, {
mFormat(nullptr), resetCachedProperties();
mSamples(1), }
mSerial(rx::kZeroSerial),
mCurrentLayout(ImageLayout::Undefined),
mCurrentQueueFamilyIndex(std::numeric_limits<uint32_t>::max()),
mBaseLevel(0),
mMaxLevel(0),
mLayerCount(0),
mLevelCount(0)
{}
ImageHelper::ImageHelper(ImageHelper &&other) ImageHelper::ImageHelper(ImageHelper &&other)
: mImage(std::move(other.mImage)), : mImage(std::move(other.mImage)),
mDeviceMemory(std::move(other.mDeviceMemory)), mDeviceMemory(std::move(other.mDeviceMemory)),
mImageType(other.mImageType),
mExtents(other.mExtents), mExtents(other.mExtents),
mFormat(other.mFormat), mFormat(other.mFormat),
mSamples(other.mSamples), mSamples(other.mSamples),
...@@ -1967,12 +1960,7 @@ ImageHelper::ImageHelper(ImageHelper &&other) ...@@ -1967,12 +1960,7 @@ ImageHelper::ImageHelper(ImageHelper &&other)
mSubresourceUpdates(std::move(other.mSubresourceUpdates)) mSubresourceUpdates(std::move(other.mSubresourceUpdates))
{ {
ASSERT(this != &other); ASSERT(this != &other);
other.mCurrentLayout = ImageLayout::Undefined; other.resetCachedProperties();
other.mBaseLevel = 0;
other.mMaxLevel = 0;
other.mLayerCount = 0;
other.mLevelCount = 0;
other.mSerial = rx::kZeroSerial;
} }
ImageHelper::~ImageHelper() ImageHelper::~ImageHelper()
...@@ -1980,6 +1968,21 @@ ImageHelper::~ImageHelper() ...@@ -1980,6 +1968,21 @@ ImageHelper::~ImageHelper()
ASSERT(!valid()); 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, void ImageHelper::initStagingBuffer(RendererVk *renderer,
const Format &format, const Format &format,
VkBufferUsageFlags usageFlags, VkBufferUsageFlags usageFlags,
...@@ -2021,6 +2024,7 @@ angle::Result ImageHelper::initExternal(Context *context, ...@@ -2021,6 +2024,7 @@ angle::Result ImageHelper::initExternal(Context *context,
{ {
ASSERT(!valid()); ASSERT(!valid());
mImageType = gl_vk::GetImageType(textureType);
mExtents = extents; mExtents = extents;
mFormat = &format; mFormat = &format;
mSamples = samples; mSamples = samples;
...@@ -2040,7 +2044,7 @@ angle::Result ImageHelper::initExternal(Context *context, ...@@ -2040,7 +2044,7 @@ angle::Result ImageHelper::initExternal(Context *context,
imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageInfo.pNext = externalImageCreateInfo; imageInfo.pNext = externalImageCreateInfo;
imageInfo.flags = GetImageCreateFlags(textureType); imageInfo.flags = GetImageCreateFlags(textureType);
imageInfo.imageType = gl_vk::GetImageType(textureType); imageInfo.imageType = mImageType;
imageInfo.format = format.vkImageFormat; imageInfo.format = format.vkImageFormat;
imageInfo.extent = mExtents; imageInfo.extent = mExtents;
imageInfo.mipLevels = mipLevels; imageInfo.mipLevels = mipLevels;
...@@ -2225,6 +2229,7 @@ void ImageHelper::destroy(RendererVk *renderer) ...@@ -2225,6 +2229,7 @@ void ImageHelper::destroy(RendererVk *renderer)
mDeviceMemory.destroy(device); mDeviceMemory.destroy(device);
mStagingBuffer.destroy(renderer); mStagingBuffer.destroy(renderer);
mCurrentLayout = ImageLayout::Undefined; mCurrentLayout = ImageLayout::Undefined;
mImageType = VK_IMAGE_TYPE_2D;
mLayerCount = 0; mLayerCount = 0;
mLevelCount = 0; mLevelCount = 0;
mSerial = rx::kZeroSerial; mSerial = rx::kZeroSerial;
...@@ -2260,6 +2265,7 @@ angle::Result ImageHelper::init2DStaging(Context *context, ...@@ -2260,6 +2265,7 @@ angle::Result ImageHelper::init2DStaging(Context *context,
ASSERT(!valid()); ASSERT(!valid());
gl_vk::GetExtent(glExtents, &mExtents); gl_vk::GetExtent(glExtents, &mExtents);
mImageType = VK_IMAGE_TYPE_2D;
mFormat = &format; mFormat = &format;
mSamples = 1; mSamples = 1;
mLayerCount = layerCount; mLayerCount = layerCount;
...@@ -2270,7 +2276,7 @@ angle::Result ImageHelper::init2DStaging(Context *context, ...@@ -2270,7 +2276,7 @@ angle::Result ImageHelper::init2DStaging(Context *context,
VkImageCreateInfo imageInfo = {}; VkImageCreateInfo imageInfo = {};
imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageInfo.flags = 0; imageInfo.flags = 0;
imageInfo.imageType = VK_IMAGE_TYPE_2D; imageInfo.imageType = mImageType;
imageInfo.format = format.vkImageFormat; imageInfo.format = format.vkImageFormat;
imageInfo.extent = mExtents; imageInfo.extent = mExtents;
imageInfo.mipLevels = 1; imageInfo.mipLevels = 1;
......
...@@ -813,6 +813,7 @@ class ImageHelper final : public Resource, public angle::Subject ...@@ -813,6 +813,7 @@ class ImageHelper final : public Resource, public angle::Subject
const Image &getImage() const { return mImage; } const Image &getImage() const { return mImage; }
const DeviceMemory &getDeviceMemory() const { return mDeviceMemory; } const DeviceMemory &getDeviceMemory() const { return mDeviceMemory; }
VkImageType getType() const { return mImageType; }
const VkExtent3D &getExtents() const { return mExtents; } const VkExtent3D &getExtents() const { return mExtents; }
uint32_t getLayerCount() const { return mLayerCount; } uint32_t getLayerCount() const { return mLayerCount; }
uint32_t getLevelCount() const { return mLevelCount; } uint32_t getLevelCount() const { return mLevelCount; }
...@@ -1110,12 +1111,14 @@ class ImageHelper final : public Resource, public angle::Subject ...@@ -1110,12 +1111,14 @@ class ImageHelper final : public Resource, public angle::Subject
void appendSubresourceUpdate(SubresourceUpdate &&update); void appendSubresourceUpdate(SubresourceUpdate &&update);
void prependSubresourceUpdate(SubresourceUpdate &&update); void prependSubresourceUpdate(SubresourceUpdate &&update);
void resetCachedProperties();
// Vulkan objects. // Vulkan objects.
Image mImage; Image mImage;
DeviceMemory mDeviceMemory; DeviceMemory mDeviceMemory;
// Image properties. // Image properties.
VkImageType mImageType;
VkExtent3D mExtents; VkExtent3D mExtents;
const Format *mFormat; const Format *mFormat;
GLint mSamples; 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