Mesa (main): util/disk_cache: Implement disk_cache_get_function_identifier for Windows
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 27 16:50:32 UTC 2022
Module: Mesa
Branch: main
Commit: 2dcbe87271bea04d4572063f28af33bca32e12f1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2dcbe87271bea04d4572063f28af33bca32e12f1
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Thu Jun 23 07:31:10 2022 -0700
util/disk_cache: Implement disk_cache_get_function_identifier for Windows
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17208>
---
src/util/disk_cache.h | 4 ++++
src/util/disk_cache_os.c | 47 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h
index 978e1dee5ef..e76e1362784 100644
--- a/src/util/disk_cache.h
+++ b/src/util/disk_cache.h
@@ -34,6 +34,7 @@
#include <stdbool.h>
#include <sys/stat.h>
#include "util/mesa-sha1.h"
+#include "util/detect_os.h"
#ifdef __cplusplus
extern "C" {
@@ -133,6 +134,9 @@ disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx)
return false;
return true;
}
+#elif DETECT_OS_WINDOWS
+bool
+disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx);
#else
static inline bool
disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx)
diff --git a/src/util/disk_cache_os.c b/src/util/disk_cache_os.c
index c28853d8d9e..a1d60321511 100644
--- a/src/util/disk_cache_os.c
+++ b/src/util/disk_cache_os.c
@@ -21,7 +21,6 @@
* IN THE SOFTWARE.
*/
-#ifdef ENABLE_SHADER_CACHE
#include <assert.h>
#include <inttypes.h>
@@ -30,17 +29,59 @@
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include <dirent.h>
#include <fcntl.h>
#include "util/compress.h"
#include "util/crc32.h"
+#include "util/disk_cache.h"
+#include "util/disk_cache_os.h"
struct cache_entry_file_data {
uint32_t crc32;
uint32_t uncompressed_size;
};
+#if DETECT_OS_WINDOWS
+
+bool
+disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx)
+{
+ HMODULE mod = NULL;
+ GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ (LPCWSTR)ptr,
+ &mod);
+ if (!mod)
+ return false;
+
+ WCHAR filename[MAX_PATH];
+ DWORD filename_length = GetModuleFileNameW(mod, filename, ARRAY_SIZE(filename));
+
+ if (filename_length == 0 || filename_length == ARRAY_SIZE(filename))
+ return false;
+
+ HANDLE mod_as_file = CreateFileW(
+ filename,
+ GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+ if (mod_as_file == INVALID_HANDLE_VALUE)
+ return false;
+
+ FILETIME time;
+ bool ret = GetFileTime(mod_as_file, NULL, NULL, &time);
+ if (ret)
+ _mesa_sha1_update(ctx, &time, sizeof(time));
+ CloseHandle(mod_as_file);
+ return ret;
+}
+
+#endif
+
+#ifdef ENABLE_SHADER_CACHE
+
#if DETECT_OS_WINDOWS
/* TODO: implement disk cache support on windows */
@@ -60,8 +101,6 @@ struct cache_entry_file_data {
#include "util/blob.h"
#include "util/crc32.h"
#include "util/debug.h"
-#include "util/disk_cache.h"
-#include "util/disk_cache_os.h"
#include "util/ralloc.h"
#include "util/rand_xor.h"
More information about the mesa-commit
mailing list