dzn: Initialize UUIDs

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17140>
This commit is contained in:
Boris Brezillon 2022-06-23 04:06:54 -07:00 committed by Marge Bot
parent be019e69e2
commit b59abbe3d5
1 changed files with 46 additions and 5 deletions

View File

@ -31,8 +31,12 @@
#include "vk_sync_dummy.h"
#include "vk_util.h"
#include "git_sha1.h"
#include "util/debug.h"
#include "util/disk_cache.h"
#include "util/macros.h"
#include "util/mesa-sha1.h"
#include "glsl_types.h"
@ -236,6 +240,47 @@ dzn_DestroyInstance(VkInstance instance,
dzn_instance_destroy(dzn_instance_from_handle(instance), pAllocator);
}
static void
dzn_physical_device_init_uuids(struct dzn_physical_device *pdev)
{
const char *mesa_version = "Mesa " PACKAGE_VERSION MESA_GIT_SHA1;
struct mesa_sha1 sha1_ctx;
uint8_t sha1[SHA1_DIGEST_LENGTH];
STATIC_ASSERT(VK_UUID_SIZE <= sizeof(sha1));
/* The pipeline cache UUID is used for determining when a pipeline cache is
* invalid. Our cache is device-agnostic, but it does depend on the features
* provided by the D3D12 driver, so let's hash the build ID plus some
* caps that might impact our NIR lowering passes.
*/
_mesa_sha1_init(&sha1_ctx);
_mesa_sha1_update(&sha1_ctx, mesa_version, strlen(mesa_version));
disk_cache_get_function_identifier(dzn_physical_device_init_uuids, &sha1_ctx);
_mesa_sha1_update(&sha1_ctx, &pdev->options, sizeof(pdev->options));
_mesa_sha1_update(&sha1_ctx, &pdev->options2, sizeof(pdev->options2));
_mesa_sha1_final(&sha1_ctx, sha1);
memcpy(pdev->pipeline_cache_uuid, sha1, VK_UUID_SIZE);
/* The driver UUID is used for determining sharability of images and memory
* between two Vulkan instances in separate processes. People who want to
* share memory need to also check the device UUID (below) so all this
* needs to be is the build-id.
*/
_mesa_sha1_compute(mesa_version, strlen(mesa_version), sha1);
memcpy(pdev->driver_uuid, sha1, VK_UUID_SIZE);
/* The device UUID uniquely identifies the given device within the machine. */
_mesa_sha1_init(&sha1_ctx);
_mesa_sha1_update(&sha1_ctx, &pdev->adapter_desc.VendorId, sizeof(pdev->adapter_desc.VendorId));
_mesa_sha1_update(&sha1_ctx, &pdev->adapter_desc.DeviceId, sizeof(pdev->adapter_desc.DeviceId));
_mesa_sha1_update(&sha1_ctx, &pdev->adapter_desc.SubSysId, sizeof(pdev->adapter_desc.SubSysId));
_mesa_sha1_update(&sha1_ctx, &pdev->adapter_desc.Revision, sizeof(pdev->adapter_desc.Revision));
_mesa_sha1_update(&sha1_ctx, &pdev->adapter_desc.AdapterLuid, sizeof(pdev->adapter_desc.AdapterLuid));
_mesa_sha1_final(&sha1_ctx, sha1);
memcpy(pdev->device_uuid, sha1, VK_UUID_SIZE);
}
static VkResult
dzn_physical_device_create(struct dzn_instance *instance,
IDXGIAdapter1 *adapter,
@ -273,11 +318,6 @@ dzn_physical_device_create(struct dzn_instance *instance,
vk_warn_non_conformant_implementation("dzn");
/* TODO: correct UUIDs */
memset(pdev->pipeline_cache_uuid, 0, VK_UUID_SIZE);
memset(pdev->driver_uuid, 0, VK_UUID_SIZE);
memset(pdev->device_uuid, 0, VK_UUID_SIZE);
uint32_t num_sync_types = 0;
pdev->sync_types[num_sync_types++] = &dzn_sync_type;
pdev->sync_types[num_sync_types++] = &instance->sync_binary_type.sync;
@ -511,6 +551,7 @@ dzn_physical_device_get_d3d12_dev(struct dzn_physical_device *pdev)
dzn_physical_device_cache_caps(pdev);
dzn_physical_device_init_memory(pdev);
dzn_physical_device_init_uuids(pdev);
}
mtx_unlock(&pdev->dev_lock);