Add a cache of GrVkSamplers in GrVkResourceProvider.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1765523002
Review URL: https://codereview.chromium.org/1765523002
diff --git a/src/gpu/vk/GrVkSampler.cpp b/src/gpu/vk/GrVkSampler.cpp
index 4bba662..9938340 100644
--- a/src/gpu/vk/GrVkSampler.cpp
+++ b/src/gpu/vk/GrVkSampler.cpp
@@ -23,7 +23,7 @@
return gWrapModes[tm];
}
-GrVkSampler* GrVkSampler::Create(const GrVkGpu* gpu, const GrTextureAccess& textureAccess) {
+GrVkSampler* GrVkSampler::Create(const GrVkGpu* gpu, const GrTextureParams& params) {
static VkFilter vkMinFilterModes[] = {
VK_FILTER_NEAREST,
@@ -36,8 +36,6 @@
VK_FILTER_LINEAR
};
- const GrTextureParams& params = textureAccess.getParams();
-
VkSamplerCreateInfo createInfo;
memset(&createInfo, 0, sizeof(VkSamplerCreateInfo));
createInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
@@ -65,10 +63,24 @@
nullptr,
&sampler));
- return new GrVkSampler(sampler);
+ return new GrVkSampler(sampler, GenerateKey(params));
}
void GrVkSampler::freeGPUData(const GrVkGpu* gpu) const {
SkASSERT(fSampler);
GR_VK_CALL(gpu->vkInterface(), DestroySampler(gpu->device(), fSampler, nullptr));
}
+
+uint8_t GrVkSampler::GenerateKey(const GrTextureParams& params) {
+
+ uint8_t key = params.filterMode();
+
+ SkASSERT(params.filterMode() <= 3);
+ key |= (params.getTileModeX() << 2);
+
+ GR_STATIC_ASSERT(SkShader::kTileModeCount <= 4);
+ key |= (params.getTileModeY() << 4);
+
+ return key;
+}
+