radv: create on-disk shader cache
This is the drivers on-disk cache intended to be used as a fallback as opposed to the pipeline cache provided by apps. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
7664aaf331
commit
1421625292
|
@ -352,6 +352,18 @@ radv_physical_device_init(struct radv_physical_device *device,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* These flags affect shader compilation. */
|
||||
uint64_t shader_env_flags =
|
||||
(device->instance->perftest_flags & RADV_PERFTEST_SISCHED ? 0x1 : 0) |
|
||||
(device->instance->debug_flags & RADV_DEBUG_UNSAFE_MATH ? 0x2 : 0);
|
||||
|
||||
/* The gpu id is already embeded in the uuid so we just pass "radv"
|
||||
* when creating the cache.
|
||||
*/
|
||||
char buf[VK_UUID_SIZE + 1];
|
||||
disk_cache_format_hex_id(buf, device->cache_uuid, VK_UUID_SIZE);
|
||||
device->disk_cache = disk_cache_create("radv", buf, shader_env_flags);
|
||||
|
||||
result = radv_extensions_register(instance,
|
||||
&device->extensions,
|
||||
common_device_extensions,
|
||||
|
@ -402,6 +414,7 @@ radv_physical_device_finish(struct radv_physical_device *device)
|
|||
radv_extensions_finish(device->instance, &device->extensions);
|
||||
radv_finish_wsi(device);
|
||||
device->ws->destroy(device->ws);
|
||||
disk_cache_destroy(device->disk_cache);
|
||||
close(device->local_fd);
|
||||
}
|
||||
|
||||
|
|
|
@ -277,6 +277,12 @@ struct radv_physical_device {
|
|||
|
||||
bool has_rbplus; /* if RB+ register exist */
|
||||
bool rbplus_allowed; /* if RB+ is allowed */
|
||||
|
||||
|
||||
/* This is the drivers on-disk cache used as a fallback as opposed to
|
||||
* the pipeline cache defined by apps.
|
||||
*/
|
||||
struct disk_cache * disk_cache;
|
||||
};
|
||||
|
||||
struct radv_instance {
|
||||
|
|
|
@ -65,6 +65,21 @@ struct cache_item_metadata {
|
|||
|
||||
struct disk_cache;
|
||||
|
||||
static inline char *
|
||||
disk_cache_format_hex_id(char *buf, const uint8_t *hex_id, unsigned size)
|
||||
{
|
||||
static const char hex_digits[] = "0123456789abcdef";
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < size; i += 2) {
|
||||
buf[i] = hex_digits[hex_id[i >> 1] >> 4];
|
||||
buf[i + 1] = hex_digits[hex_id[i >> 1] & 0x0f];
|
||||
}
|
||||
buf[i] = '\0';
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue