From 43ee4917cadbba7677def091333edbf3cf069f8a Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Tue, 22 Nov 2016 00:31:44 +0100 Subject: [PATCH] radv: Store UUID in physical device. No sense in repeatedly determining it. Also, it might be dependent on the device as shaders get compiled differently for SI/CIK/VI etc. Signed-off-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_device.c | 18 ++++++++++-------- src/amd/vulkan/radv_pipeline_cache.c | 8 ++++---- src/amd/vulkan/radv_private.h | 4 ++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 390fde0f3dd..b73117128de 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -44,6 +44,13 @@ #include "util/debug.h" struct radv_dispatch_table dtable; +static void +radv_device_get_cache_uuid(void *uuid) +{ + memset(uuid, 0, VK_UUID_SIZE); + snprintf(uuid, VK_UUID_SIZE, "radv-%s", RADV_TIMESTAMP); +} + static VkResult radv_physical_device_init(struct radv_physical_device *device, struct radv_instance *instance, @@ -89,6 +96,8 @@ radv_physical_device_init(struct radv_physical_device *device, goto fail; } + radv_device_get_cache_uuid(device->uuid); + fprintf(stderr, "WARNING: radv is not a conformant vulkan implementation, testing use only.\n"); device->name = device->rad_info.name; return VK_SUCCESS; @@ -361,13 +370,6 @@ void radv_GetPhysicalDeviceFeatures( }; } -void -radv_device_get_cache_uuid(void *uuid) -{ - memset(uuid, 0, VK_UUID_SIZE); - snprintf(uuid, VK_UUID_SIZE, "radv-%s", RADV_TIMESTAMP); -} - void radv_GetPhysicalDeviceProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) @@ -498,7 +500,7 @@ void radv_GetPhysicalDeviceProperties( }; strcpy(pProperties->deviceName, pdevice->name); - radv_device_get_cache_uuid(pProperties->pipelineCacheUUID); + memcpy(pProperties->pipelineCacheUUID, pdevice->uuid, VK_UUID_SIZE); } void radv_GetPhysicalDeviceQueueFamilyProperties( diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index b4293555452..db824a26306 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -308,8 +308,8 @@ radv_pipeline_cache_load(struct radv_pipeline_cache *cache, const void *data, size_t size) { struct radv_device *device = cache->device; + struct radv_physical_device *pdevice = &device->instance->physicalDevice; struct cache_header header; - uint8_t uuid[VK_UUID_SIZE]; if (size < sizeof(header)) return; @@ -322,8 +322,7 @@ radv_pipeline_cache_load(struct radv_pipeline_cache *cache, return; if (header.device_id != device->instance->physicalDevice.rad_info.pci_id) return; - radv_device_get_cache_uuid(uuid); - if (memcmp(header.uuid, uuid, VK_UUID_SIZE) != 0) + if (memcmp(header.uuid, pdevice->uuid, VK_UUID_SIZE) != 0) return; char *end = (void *) data + size; @@ -405,6 +404,7 @@ VkResult radv_GetPipelineCacheData( { RADV_FROM_HANDLE(radv_device, device, _device); RADV_FROM_HANDLE(radv_pipeline_cache, cache, _cache); + struct radv_physical_device *pdevice = &device->instance->physicalDevice; struct cache_header *header; VkResult result = VK_SUCCESS; const size_t size = sizeof(*header) + cache->total_size; @@ -422,7 +422,7 @@ VkResult radv_GetPipelineCacheData( header->header_version = VK_PIPELINE_CACHE_HEADER_VERSION_ONE; header->vendor_id = 0x1002; header->device_id = device->instance->physicalDevice.rad_info.pci_id; - radv_device_get_cache_uuid(header->uuid); + memcpy(header->uuid, pdevice->uuid, VK_UUID_SIZE); p += header->header_size; struct cache_entry *entry; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index ad5232b76eb..3d17895a118 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -258,6 +258,8 @@ struct radv_physical_device { uint32_t pci_vendor_id; uint32_t pci_device_id; + uint8_t uuid[VK_UUID_SIZE]; + struct wsi_device wsi_device; }; @@ -453,8 +455,6 @@ struct radv_device { float sample_locations_16x[16][2]; }; -void radv_device_get_cache_uuid(void *uuid); - struct radv_device_memory { struct radeon_winsys_bo *bo; uint32_t type_index; -- 2.30.2