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, ...@@ -2719,4 +2719,43 @@ void FramebufferVk::updateRenderPassReadOnlyDepthMode(ContextVk *contextVk,
renderPass->updateStartedRenderPassWithDepthMode(readOnlyDepthStencilMode); 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 } // namespace rx
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "libANGLE/renderer/vulkan/ResourceVk.h" #include "libANGLE/renderer/vulkan/ResourceVk.h"
#include "libANGLE/renderer/vulkan/UtilsVk.h" #include "libANGLE/renderer/vulkan/UtilsVk.h"
#include "libANGLE/renderer/vulkan/vk_cache_utils.h" #include "libANGLE/renderer/vulkan/vk_cache_utils.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
namespace rx namespace rx
{ {
...@@ -24,6 +25,26 @@ class RendererVk; ...@@ -24,6 +25,26 @@ class RendererVk;
class RenderTargetVk; class RenderTargetVk;
class WindowSurfaceVk; 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 class FramebufferVk : public FramebufferImpl
{ {
public: public:
......
...@@ -3661,45 +3661,6 @@ angle::Result SamplerCache::getSampler(ContextVk *contextVk, ...@@ -3661,45 +3661,6 @@ angle::Result SamplerCache::getSampler(ContextVk *contextVk,
return angle::Result::Continue; 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. // DriverUniformsDescriptorSetCache implementation.
void DriverUniformsDescriptorSetCache::destroy(RendererVk *rendererVk) void DriverUniformsDescriptorSetCache::destroy(RendererVk *rendererVk)
{ {
......
...@@ -53,7 +53,6 @@ enum DescriptorSetIndex : uint32_t ...@@ -53,7 +53,6 @@ enum DescriptorSetIndex : uint32_t
namespace vk namespace vk
{ {
class DynamicDescriptorPool; class DynamicDescriptorPool;
class FramebufferHelper;
class ImageHelper; class ImageHelper;
enum class ImageLayout; enum class ImageLayout;
...@@ -1551,26 +1550,6 @@ class SamplerYcbcrConversionCache final : angle::NonCopyable ...@@ -1551,26 +1550,6 @@ class SamplerYcbcrConversionCache final : angle::NonCopyable
CacheStats mCacheStats; 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 // DescriptorSet Cache
class DriverUniformsDescriptorSetCache final : angle::NonCopyable 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