Commit d21d682d by Stephan Hartmann Committed by Commit Bot

libstdc++: fix incomplete type for FramebufferCache

libstdc++ does not allow incomplete type for T2 with std::pair<T1,T2> and fails with: .../../src/libANGLE/renderer/vulkan/vk_cache_utils.h:1570:64: required from here /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/stl_pair.h:215:11: error: std::pair<_T1, _T2>::second has incomplete type 215 | _T2 second; /// @c second is a copy of the second object | ^~~~~~ https://chromium-review.googlesource.com/c/angle/angle/+/2580111 added class FramebufferCache with incomplete type in |mPayload| to vk::FramebufferHelper. Changing include order is not an option. However, FramebufferCache is only used in FramebufferVk and we can make it local there. Bug: chromium:957519 Change-Id: I5fbdca23adbb9f4aecc266988c02fb0d051504cb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2621473Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent de32c3d2
......@@ -2719,4 +2719,43 @@ void FramebufferVk::updateRenderPassReadOnlyDepthMode(ContextVk *contextVk,
renderPass->updateStartedRenderPassWithDepthMode(readOnlyDepthStencilMode);
}
// FramebufferCache implementation.
void FramebufferCache::destroy(RendererVk *rendererVk)
{
rendererVk->accumulateCacheStats(VulkanCacheType::Framebuffer, mCacheStats);
mPayload.clear();
}
bool FramebufferCache::get(ContextVk *contextVk,
const vk::FramebufferDesc &desc,
vk::FramebufferHelper **framebufferHelperOut)
{
auto iter = mPayload.find(desc);
if (iter != mPayload.end())
{
*framebufferHelperOut = &iter->second;
mCacheStats.hit();
return true;
}
mCacheStats.miss();
return false;
}
void FramebufferCache::insert(const vk::FramebufferDesc &desc,
vk::FramebufferHelper &&framebufferHelper)
{
mPayload.emplace(desc, std::move(framebufferHelper));
}
void FramebufferCache::clear(ContextVk *contextVk)
{
for (auto &entry : mPayload)
{
vk::FramebufferHelper &tmpFB = entry.second;
tmpFB.release(contextVk);
}
mPayload.clear();
}
} // namespace rx
......@@ -17,6 +17,7 @@
#include "libANGLE/renderer/vulkan/ResourceVk.h"
#include "libANGLE/renderer/vulkan/UtilsVk.h"
#include "libANGLE/renderer/vulkan/vk_cache_utils.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
namespace rx
{
......@@ -24,6 +25,26 @@ class RendererVk;
class RenderTargetVk;
class WindowSurfaceVk;
// FramebufferVk Cache
class FramebufferCache final : angle::NonCopyable
{
public:
FramebufferCache() = default;
~FramebufferCache() { ASSERT(mPayload.empty()); }
void destroy(RendererVk *rendererVk);
bool get(ContextVk *contextVk,
const vk::FramebufferDesc &desc,
vk::FramebufferHelper **framebufferOut);
void insert(const vk::FramebufferDesc &desc, vk::FramebufferHelper &&framebufferHelper);
void clear(ContextVk *contextVk);
private:
angle::HashMap<vk::FramebufferDesc, vk::FramebufferHelper> mPayload;
CacheStats mCacheStats;
};
class FramebufferVk : public FramebufferImpl
{
public:
......
......@@ -3661,45 +3661,6 @@ angle::Result SamplerCache::getSampler(ContextVk *contextVk,
return angle::Result::Continue;
}
// FramebufferCache implementation.
void FramebufferCache::destroy(RendererVk *rendererVk)
{
rendererVk->accumulateCacheStats(VulkanCacheType::Framebuffer, mCacheStats);
mPayload.clear();
}
bool FramebufferCache::get(ContextVk *contextVk,
const vk::FramebufferDesc &desc,
vk::FramebufferHelper **framebufferHelperOut)
{
auto iter = mPayload.find(desc);
if (iter != mPayload.end())
{
*framebufferHelperOut = &iter->second;
mCacheStats.hit();
return true;
}
mCacheStats.miss();
return false;
}
void FramebufferCache::insert(const vk::FramebufferDesc &desc,
vk::FramebufferHelper &&framebufferHelper)
{
mPayload.emplace(desc, std::move(framebufferHelper));
}
void FramebufferCache::clear(ContextVk *contextVk)
{
for (auto &entry : mPayload)
{
vk::FramebufferHelper &tmpFB = entry.second;
tmpFB.release(contextVk);
}
mPayload.clear();
}
// DriverUniformsDescriptorSetCache implementation.
void DriverUniformsDescriptorSetCache::destroy(RendererVk *rendererVk)
{
......
......@@ -53,7 +53,6 @@ enum DescriptorSetIndex : uint32_t
namespace vk
{
class DynamicDescriptorPool;
class FramebufferHelper;
class ImageHelper;
enum class ImageLayout;
......@@ -1551,26 +1550,6 @@ class SamplerYcbcrConversionCache final : angle::NonCopyable
CacheStats mCacheStats;
};
// FramebufferVk Cache
class FramebufferCache final : angle::NonCopyable
{
public:
FramebufferCache() = default;
~FramebufferCache() { ASSERT(mPayload.empty()); }
void destroy(RendererVk *rendererVk);
bool get(ContextVk *contextVk,
const vk::FramebufferDesc &desc,
vk::FramebufferHelper **framebufferOut);
void insert(const vk::FramebufferDesc &desc, vk::FramebufferHelper &&framebufferHelper);
void clear(ContextVk *contextVk);
private:
angle::HashMap<vk::FramebufferDesc, vk::FramebufferHelper> mPayload;
CacheStats mCacheStats;
};
// DescriptorSet Cache
class DriverUniformsDescriptorSetCache final : angle::NonCopyable
{
......
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