Metal: Minor improvements to #96052; update logger subsystem name

This commit is contained in:
Stuart Carnie 2024-08-26 08:29:19 +10:00
parent 28a72fa434
commit 6de70e6b8a
No known key found for this signature in database
GPG Key ID: 848D9C9718D78B4F
3 changed files with 22 additions and 31 deletions

View File

@ -506,10 +506,10 @@ enum class ShaderLoadStrategy {
LAZY,
};
/**
* A Metal shader library.
*/
@interface MDLibrary : NSObject
/// A Metal shader library.
@interface MDLibrary : NSObject {
ShaderCacheEntry *_entry;
};
- (id<MTLLibrary>)library;
- (NSError *)error;
- (void)setLabel:(NSString *)label;
@ -536,6 +536,10 @@ struct SHA256Digest {
SHA256Digest(const char *p_data, size_t p_length) {
CC_SHA256(p_data, (CC_LONG)p_length, data);
}
_FORCE_INLINE_ uint32_t short_sha() const {
return __builtin_bswap32(*(uint32_t *)&data[0]);
}
};
template <>
@ -545,22 +549,18 @@ struct HashMapComparatorDefault<SHA256Digest> {
}
};
/**
* A cache entry for a Metal shader library.
*/
/// A cache entry for a Metal shader library.
struct ShaderCacheEntry {
RenderingDeviceDriverMetal &owner;
/// A hash of the Metal shader source code.
SHA256Digest key;
CharString name;
CharString short_sha;
RD::ShaderStage stage = RD::SHADER_STAGE_VERTEX;
/**
* This reference must be weak, to ensure that when the last strong reference to the library
* is released, the cache entry is freed.
*/
/// This reference must be weak, to ensure that when the last strong reference to the library
/// is released, the cache entry is freed.
MDLibrary *__weak library = nil;
/** Notify the cache that this entry is no longer needed. */
/// Notify the cache that this entry is no longer needed.
void notify_free() const;
ShaderCacheEntry(RenderingDeviceDriverMetal &p_owner, SHA256Digest p_key) :

View File

@ -1396,9 +1396,9 @@ void ShaderCacheEntry::notify_free() const {
@interface MDLibrary ()
- (instancetype)initWithCacheEntry:(ShaderCacheEntry *)entry;
- (ShaderCacheEntry *)entry;
@end
/// Loads the MTLLibrary when the library is first accessed.
@interface MDLazyLibrary : MDLibrary {
id<MTLLibrary> _library;
NSError *_error;
@ -1414,6 +1414,7 @@ void ShaderCacheEntry::notify_free() const {
options:(MTLCompileOptions *)options;
@end
/// Loads the MTLLibrary immediately on initialization, using an asynchronous API.
@interface MDImmediateLibrary : MDLibrary {
id<MTLLibrary> _library;
NSError *_error;
@ -1428,9 +1429,7 @@ void ShaderCacheEntry::notify_free() const {
options:(MTLCompileOptions *)options;
@end
@implementation MDLibrary {
ShaderCacheEntry *_entry;
}
@implementation MDLibrary
+ (instancetype)newLibraryWithCacheEntry:(ShaderCacheEntry *)entry
device:(id<MTLDevice>)device
@ -1447,10 +1446,6 @@ void ShaderCacheEntry::notify_free() const {
}
}
- (ShaderCacheEntry *)entry {
return _entry;
}
- (id<MTLLibrary>)library {
CRASH_NOW_MSG("Not implemented");
return nil;
@ -1489,8 +1484,8 @@ void ShaderCacheEntry::notify_free() const {
__block os_signpost_id_t compile_id = (os_signpost_id_t)(uintptr_t)self;
os_signpost_interval_begin(LOG_INTERVALS, compile_id, "shader_compile",
"shader_name=%{public}s stage=%{public}s hash=%{public}s",
entry->name.get_data(), SHADER_STAGE_NAMES[entry->stage], entry->short_sha.get_data());
"shader_name=%{public}s stage=%{public}s hash=%X",
entry->name.get_data(), SHADER_STAGE_NAMES[entry->stage], entry->key.short_sha());
[device newLibraryWithSource:source
options:options
@ -1556,12 +1551,10 @@ void ShaderCacheEntry::notify_free() const {
return;
}
ShaderCacheEntry *entry = [self entry];
__block os_signpost_id_t compile_id = (os_signpost_id_t)(uintptr_t)self;
os_signpost_interval_begin(LOG_INTERVALS, compile_id, "shader_compile",
"shader_name=%{public}s stage=%{public}s hash=%{public}s",
entry->name.get_data(), SHADER_STAGE_NAMES[entry->stage], entry->short_sha.get_data());
"shader_name=%{public}s stage=%{public}s hash=%X",
_entry->name.get_data(), SHADER_STAGE_NAMES[_entry->stage], _entry->key.short_sha());
NSError *error;
_library = [_device newLibraryWithSource:_source options:_options error:&error];
os_signpost_interval_end(LOG_INTERVALS, compile_id, "shader_compile");

View File

@ -72,8 +72,8 @@ os_log_t LOG_DRIVER;
os_log_t LOG_INTERVALS;
__attribute__((constructor)) static void InitializeLogging(void) {
LOG_DRIVER = os_log_create("org.stuartcarnie.godot.metal", OS_LOG_CATEGORY_POINTS_OF_INTEREST);
LOG_INTERVALS = os_log_create("org.stuartcarnie.godot.metal", "events");
LOG_DRIVER = os_log_create("org.godotengine.godot.metal", OS_LOG_CATEGORY_POINTS_OF_INTEREST);
LOG_INTERVALS = os_log_create("org.godotengine.godot.metal", "events");
}
/*****************/
@ -2323,8 +2323,6 @@ RDD::ShaderID RenderingDeviceDriverMetal::shader_create_from_bytecode(const Vect
ShaderCacheEntry *cd = memnew(ShaderCacheEntry(*this, key));
cd->name = binary_data.shader_name;
String sha_hex = String::hex_encode_buffer(key.data, CC_SHA256_DIGEST_LENGTH);
cd->short_sha = sha_hex.substr(0, 8).utf8();
cd->stage = shader_data.stage;
MDLibrary *library = [MDLibrary newLibraryWithCacheEntry:cd