Hash :
6fc0066a
Author :
Date :
2020-04-21T17:40:54
Vulkan: Add a sampler cache. This uses a packed sampler description to re-use samplers for multliple VkImages. The samplers will persist for the lifetime of RendererVk. In the future we could look at doing cache eviction for large object counts. Reduces the active VkSampler cache in Manhattan from over 1200 to 9. Also should reduce the number of VkSamplers used with Chrome. Bug: angleproject:4491 Change-Id: Idca00e4ed8cb660a0865281544aaa57cf884bbdb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2160771 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
//
// Copyright 2016 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// SamplerVk.h:
// Defines the class interface for SamplerVk, implementing SamplerImpl.
//
#ifndef LIBANGLE_RENDERER_VULKAN_SAMPLERVK_H_
#define LIBANGLE_RENDERER_VULKAN_SAMPLERVK_H_
#include "libANGLE/renderer/SamplerImpl.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
namespace rx
{
class SamplerVk : public SamplerImpl
{
public:
SamplerVk(const gl::SamplerState &state);
~SamplerVk() override;
void onDestroy(const gl::Context *context) override;
angle::Result syncState(const gl::Context *context, const bool dirty) override;
const vk::Sampler &getSampler() const
{
ASSERT(mSampler.valid());
return mSampler.get();
}
Serial getSerial() const { return mSerial; }
private:
vk::BindingPointer<vk::Sampler> mSampler;
// The serial is used for cache indexing.
Serial mSerial;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_SAMPLERVK_H_