The cache is actually stored by the application, and the UUID of the
cache is application visible, so it should be able to store multiple
caches. We might want to use different files for the driver cache of
builtin shaders though.

And as I'm writing this, I realized that PCI vendor and device are
also stored in the cache header, so this patch is probably redundant
...

- Bas

On Tue, Nov 22, 2016 at 9:49 AM, Mike Lothian <m...@fireburn.co.uk> wrote:
> Would it be possible to have a cache for each family? I imagine this might
> cause issues when someone has multiple cards in their system
>
> On Tue, 22 Nov 2016 at 01:20 Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
> wrote:
>>
>> Invalidates the cache when someone switches cards.
>>
>> Signed-off-by: Bas Nieuwenhuizen <ba...@google.com>
>> ---
>>  src/amd/vulkan/radv_device.c | 8 +++++---
>>  1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
>> index 04c0bdc..8595973 100644
>> --- a/src/amd/vulkan/radv_device.c
>> +++ b/src/amd/vulkan/radv_device.c
>> @@ -61,9 +61,10 @@ radv_get_function_timestamp(void *ptr, uint32_t*
>> timestamp)
>>  }
>>
>>  static int
>> -radv_device_get_cache_uuid(void *uuid)
>> +radv_device_get_cache_uuid(enum radeon_family family, void *uuid)
>>  {
>>         uint32_t mesa_timestamp, llvm_timestamp;
>> +       uint16_t f = family;
>>         memset(uuid, 0, VK_UUID_SIZE);
>>         if (radv_get_function_timestamp(radv_device_get_cache_uuid,
>> &mesa_timestamp) ||
>>             radv_get_function_timestamp(LLVMInitializeAMDGPUTargetInfo,
>> &llvm_timestamp))
>> @@ -71,7 +72,8 @@ radv_device_get_cache_uuid(void *uuid)
>>
>>         memcpy(uuid, &mesa_timestamp, 4);
>>         memcpy((char*)uuid + 4, &llvm_timestamp, 4);
>> -       snprintf((char*)uuid + 8, VK_UUID_SIZE - 8, "radv");
>> +       memcpy((char*)uuid + 8, &f, 2);
>> +       snprintf((char*)uuid + 10, VK_UUID_SIZE - 10, "radv");
>>         return 0;
>>  }
>>
>> @@ -120,7 +122,7 @@ radv_physical_device_init(struct radv_physical_device
>> *device,
>>                 goto fail;
>>         }
>>
>> -       if (radv_device_get_cache_uuid(device->uuid)) {
>> +       if (radv_device_get_cache_uuid(device->rad_info.family,
>> device->uuid)) {
>>                 radv_finish_wsi(device);
>>                 device->ws->destroy(device->ws);
>>                 goto fail;
>> --
>> 2.10.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to