Hash :
b9b5fa55
Author :
Date :
2020-08-02T00:17:20
Vulkan: Redo Sampler Serials. Instead of refreshing sampler serials every time the SamplerVk or TextureVk has a state change we can give a VkSampler a unique serial. The serial is unique to this VkSampler and repeated state changes will fetch the same Serial from the SamplerCache. This allows for more cache hits. We store the the new Serial together with the VkSampler in a SamplerHelper class and store references to a SamplerHelper in SamplerVk and TextureVk instead of the VkSampler directly. In a follow-up change we will improve image view caching by also improving how we store serials for ImageViews. Bug: angleproject:4911 Change-Id: I9168c2700e383bca796cca925b38cfd30132d982 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2333988 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@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
//
// 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::SamplerHelper &getSampler() const
{
ASSERT(mSampler.valid());
return mSampler.get();
}
private:
vk::SamplerBinding mSampler;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_SAMPLERVK_H_