summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPedro J. Estébanez <pedrojrulez@gmail.com>2024-01-31 20:12:48 +0100
committerPedro J. Estébanez <pedrojrulez@gmail.com>2024-01-31 20:19:12 +0100
commitf3ef83517a82539cabb39d78258ce2dd30370a85 (patch)
treece84cada4598f91971b71594f78cdedfc7894734
parent107f2961ccfac179af7682eb5f6e7ea91e80040c (diff)
downloadredot-engine-f3ef83517a82539cabb39d78258ce2dd30370a85.tar.gz
Namespace shader cache files by graphics API
-rw-r--r--servers/rendering/renderer_rd/shader_rd.cpp16
-rw-r--r--servers/rendering/renderer_rd/shader_rd.h1
2 files changed, 11 insertions, 6 deletions
diff --git a/servers/rendering/renderer_rd/shader_rd.cpp b/servers/rendering/renderer_rd/shader_rd.cpp
index 1c54ce5657..8701c8dcec 100644
--- a/servers/rendering/renderer_rd/shader_rd.cpp
+++ b/servers/rendering/renderer_rd/shader_rd.cpp
@@ -36,6 +36,7 @@
#include "core/object/worker_thread_pool.h"
#include "core/version.h"
#include "renderer_compositor_rd.h"
+#include "servers/rendering/renderer_rd/api_context_rd.h"
#include "servers/rendering/rendering_device.h"
#include "thirdparty/misc/smolv.h"
@@ -395,10 +396,15 @@ String ShaderRD::_version_get_sha1(Version *p_version) const {
static const char *shader_file_header = "GDSC";
static const uint32_t cache_file_version = 3;
-bool ShaderRD::_load_from_cache(Version *p_version, int p_group) {
- String sha1 = _version_get_sha1(p_version);
- String path = shader_cache_dir.path_join(name).path_join(group_sha256[p_group]).path_join(sha1) + ".cache";
+String ShaderRD::_get_cache_file_path(Version *p_version, int p_group) {
+ const String &sha1 = _version_get_sha1(p_version);
+ const String &api_safe_name = String(RD::get_singleton()->get_context()->get_api_name()).validate_filename().to_lower();
+ const String &path = shader_cache_dir.path_join(name).path_join(group_sha256[p_group]).path_join(sha1) + "." + api_safe_name + ".cache";
+ return path;
+}
+bool ShaderRD::_load_from_cache(Version *p_version, int p_group) {
+ const String &path = _get_cache_file_path(p_version, p_group);
Ref<FileAccess> f = FileAccess::open(path, FileAccess::READ);
if (f.is_null()) {
return false;
@@ -464,9 +470,7 @@ bool ShaderRD::_load_from_cache(Version *p_version, int p_group) {
void ShaderRD::_save_to_cache(Version *p_version, int p_group) {
ERR_FAIL_COND(!shader_cache_dir_valid);
- String sha1 = _version_get_sha1(p_version);
- String path = shader_cache_dir.path_join(name).path_join(group_sha256[p_group]).path_join(sha1) + ".cache";
-
+ const String &path = _get_cache_file_path(p_version, p_group);
Ref<FileAccess> f = FileAccess::open(path, FileAccess::WRITE);
ERR_FAIL_COND(f.is_null());
f->store_buffer((const uint8_t *)shader_file_header, 4);
diff --git a/servers/rendering/renderer_rd/shader_rd.h b/servers/rendering/renderer_rd/shader_rd.h
index 9ce510386f..22a21086af 100644
--- a/servers/rendering/renderer_rd/shader_rd.h
+++ b/servers/rendering/renderer_rd/shader_rd.h
@@ -143,6 +143,7 @@ private:
void _add_stage(const char *p_code, StageType p_stage_type);
String _version_get_sha1(Version *p_version) const;
+ String _get_cache_file_path(Version *p_version, int p_group);
bool _load_from_cache(Version *p_version, int p_group);
void _save_to_cache(Version *p_version, int p_group);
void _initialize_cache();