Hash :
fcf3a1c0
Author :
Date :
2024-07-02T16:33:28
GL: Allow shader compilation with cached translated source Write the translated shader source when serializing shaders. This does not increase the size of the shader cache because Vulkan only uses the compiledBinary field. Spawn a ShaderTranslateTask for loading shaders so the GL backend can compile the shader on the native driver. Bug: angleproject:350779978 Change-Id: I14413a7ca2a0d99653a1082f2c8b4a94cf58626a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5672740 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@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 46 47 48 49 50 51 52 53 54 55 56 57
//
// Copyright 2022 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.
//
// MemoryShaderCache: Stores compiled shaders in memory so they don't
// always have to be re-compiled. Can be used in conjunction with the platform
// layer to warm up the cache from disk.
#ifndef LIBANGLE_MEMORY_SHADER_CACHE_H_
#define LIBANGLE_MEMORY_SHADER_CACHE_H_
#include <array>
#include "GLSLANG/ShaderLang.h"
#include "common/MemoryBuffer.h"
#include "libANGLE/BlobCache.h"
#include "libANGLE/Error.h"
namespace gl
{
class Context;
class Shader;
class ShaderState;
class ShCompilerInstance;
class MemoryShaderCache final : angle::NonCopyable
{
public:
explicit MemoryShaderCache(egl::BlobCache &blobCache);
~MemoryShaderCache();
// Helper method that serializes a shader.
angle::Result putShader(const Context *context,
const egl::BlobCache::Key &shaderHash,
const Shader *shader);
// Check the cache, and deserialize and load the shader if found. Evict existing hash if load
// fails.
egl::CacheGetResult getShader(const Context *context,
Shader *shader,
const egl::BlobCache::Key &shaderHash,
angle::JobResultExpectancy resultExpectancy);
// Empty the cache.
void clear();
// Returns the maximum cache size in bytes.
size_t maxSize() const;
private:
egl::BlobCache &mBlobCache;
};
} // namespace gl
#endif // LIBANGLE_MEMORY_SHADER_CACHE_H_