radv: Store UUID in physical device.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 21 Nov 2016 23:31:44 +0000 (00:31 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tue, 22 Nov 2016 06:58:35 +0000 (07:58 +0100)
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 <basni@google.com>
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_pipeline_cache.c
src/amd/vulkan/radv_private.h

index 390fde0f3ddff0aa825591e2bb49cb824c8cb715..b73117128dea0578443c5be6768f0313ed88c7ba 100644 (file)
 #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(
index b4293555452f514d2c6d7960d0c37d346605b169..db824a26306a2fc4f017741c504a42deecfde19d 100644 (file)
@@ -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;
index ad5232b76eb25ae86801206d4cca2e2a87351add..3d17895a1181da72f3bfe64ce734e089e027475d 100644 (file)
@@ -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;