[Mesa-dev] [PATCH 1/3] radv: Store UUID in physical device.

Edward O'Callaghan funfunctor at folklore1984.net
Tue Nov 22 02:31:49 UTC 2016


This series is,
Acked-by: Edward O'Callaghan <funfunctor at folklore1984.net>

On 11/22/2016 12:19 PM, Bas Nieuwenhuizen wrote:
> 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 at google.com>
> ---
>  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 390fde0..b731171 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 b429355..db824a2 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 ad5232b..3d17895 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;
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161122/06b2a673/attachment.sig>


More information about the mesa-dev mailing list