vkd3d: Refactor SetName implementation

As per MSDN, SetName is just a wrapper around SetPrivateData and a specific GUID.

Some apps and tools will use this to retrieve their name back.

So instead, just forward the name to Vulkan in the SetPrivateData call.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
Joshua Ashton 2021-02-25 06:59:33 +00:00 committed by Hans-Kristian Arntzen
parent 04b86b80b6
commit 8c9527cdf7
12 changed files with 266 additions and 280 deletions

View File

@ -305,7 +305,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_pipeline_library_SetPrivateData(d3d12_pip
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&pipeline_library->private_store, guid, data_size, data);
return vkd3d_set_private_data(&pipeline_library->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_library_SetPrivateDataInterface(d3d12_pipeline_library_iface *iface,
@ -315,14 +316,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_pipeline_library_SetPrivateDataInterface(
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&pipeline_library->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_library_SetName(d3d12_pipeline_library_iface *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&pipeline_library->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_library_GetDevice(d3d12_pipeline_library_iface *iface,
@ -604,7 +599,7 @@ static CONST_VTBL struct ID3D12PipelineLibrary1Vtbl d3d12_pipeline_library_vtbl
d3d12_pipeline_library_GetPrivateData,
d3d12_pipeline_library_SetPrivateData,
d3d12_pipeline_library_SetPrivateDataInterface,
d3d12_pipeline_library_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_pipeline_library_GetDevice,
/* ID3D12PipelineLibrary methods */

View File

@ -851,7 +851,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_SetPrivateData(d3d12_fence_iface *i
TRACE("iface %p, guid %s, data_size %u, data %p.\n",
iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&fence->private_store, guid, data_size, data);
return vkd3d_set_private_data(&fence->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_fence_SetPrivateDataInterface(d3d12_fence_iface *iface,
@ -861,14 +862,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_SetPrivateDataInterface(d3d12_fence
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&fence->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_fence_SetName(d3d12_fence_iface *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&fence->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_fence_GetDevice(d3d12_fence_iface *iface, REFIID iid, void **device)
@ -976,7 +971,7 @@ static CONST_VTBL struct ID3D12Fence1Vtbl d3d12_fence_vtbl =
d3d12_fence_GetPrivateData,
d3d12_fence_SetPrivateData,
d3d12_fence_SetPrivateDataInterface,
d3d12_fence_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_fence_GetDevice,
/* ID3D12Fence methods */
@ -1494,6 +1489,12 @@ static void d3d12_command_allocator_free_resources(struct d3d12_command_allocato
allocator->pass_count = 0;
}
static void d3d12_command_allocator_set_name(struct d3d12_command_allocator *allocator, const char *name)
{
vkd3d_set_vk_object_name(allocator->device, (uint64_t)allocator->vk_command_pool,
VK_OBJECT_TYPE_COMMAND_POOL, name);
}
/* ID3D12CommandAllocator */
static inline struct d3d12_command_allocator *impl_from_ID3D12CommandAllocator(ID3D12CommandAllocator *iface)
{
@ -1598,7 +1599,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_SetPrivateData(ID3D12Co
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&allocator->private_store, guid, data_size, data);
return vkd3d_set_private_data(&allocator->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_command_allocator_set_name, allocator);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_SetPrivateDataInterface(ID3D12CommandAllocator *iface,
@ -1608,17 +1610,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_SetPrivateDataInterface
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&allocator->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_SetName(ID3D12CommandAllocator *iface, const WCHAR *name)
{
struct d3d12_command_allocator *allocator = impl_from_ID3D12CommandAllocator(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return vkd3d_set_vk_object_name(allocator->device, (uint64_t)allocator->vk_command_pool,
VK_OBJECT_TYPE_COMMAND_POOL, name);
return vkd3d_set_private_data_interface(&allocator->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_command_allocator_set_name, allocator);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_GetDevice(ID3D12CommandAllocator *iface, REFIID iid, void **device)
@ -1713,7 +1706,7 @@ static CONST_VTBL struct ID3D12CommandAllocatorVtbl d3d12_command_allocator_vtbl
d3d12_command_allocator_GetPrivateData,
d3d12_command_allocator_SetPrivateData,
d3d12_command_allocator_SetPrivateDataInterface,
d3d12_command_allocator_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_command_allocator_GetDevice,
/* ID3D12CommandAllocator methods */
@ -3531,7 +3524,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_SetPrivateData(d3d12_command
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&list->private_store, guid, data_size, data);
return vkd3d_set_private_data(&list->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_list_SetPrivateDataInterface(d3d12_command_list_iface *iface,
@ -3541,14 +3535,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_SetPrivateDataInterface(d3d1
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&list->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_list_SetName(d3d12_command_list_iface *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&list->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_list_GetDevice(d3d12_command_list_iface *iface, REFIID iid, void **device)
@ -8312,7 +8300,7 @@ static CONST_VTBL struct ID3D12GraphicsCommandList5Vtbl d3d12_command_list_vtbl
d3d12_command_list_GetPrivateData,
d3d12_command_list_SetPrivateData,
d3d12_command_list_SetPrivateDataInterface,
d3d12_command_list_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_command_list_GetDevice,
/* ID3D12CommandList methods */
@ -8572,7 +8560,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_queue_SetPrivateData(ID3D12Comman
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&command_queue->private_store, guid, data_size, data);
return vkd3d_set_private_data(&command_queue->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_queue_SetPrivateDataInterface(ID3D12CommandQueue *iface,
@ -8582,27 +8571,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_queue_SetPrivateDataInterface(ID3
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&command_queue->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_queue_SetName(ID3D12CommandQueue *iface, const WCHAR *name)
{
struct d3d12_command_queue *command_queue = impl_from_ID3D12CommandQueue(iface);
VkQueue vk_queue;
HRESULT hr;
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
if (!(vk_queue = vkd3d_queue_acquire(command_queue->vkd3d_queue)))
{
ERR("Failed to acquire queue %p.\n", command_queue->vkd3d_queue);
return E_FAIL;
}
hr = vkd3d_set_vk_object_name(command_queue->device, (uint64_t)(uintptr_t)vk_queue,
VK_OBJECT_TYPE_QUEUE, name);
vkd3d_queue_release(command_queue->vkd3d_queue);
return hr;
return vkd3d_set_private_data_interface(&command_queue->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_queue_GetDevice(ID3D12CommandQueue *iface, REFIID iid, void **device)
@ -9111,7 +9081,7 @@ static CONST_VTBL struct ID3D12CommandQueueVtbl d3d12_command_queue_vtbl =
d3d12_command_queue_GetPrivateData,
d3d12_command_queue_SetPrivateData,
d3d12_command_queue_SetPrivateDataInterface,
d3d12_command_queue_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_command_queue_GetDevice,
/* ID3D12CommandQueue methods */
@ -10186,7 +10156,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_signature_SetPrivateData(ID3D12Co
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&signature->private_store, guid, data_size, data);
return vkd3d_set_private_data(&signature->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_signature_SetPrivateDataInterface(ID3D12CommandSignature *iface,
@ -10196,14 +10167,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_signature_SetPrivateDataInterface
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&signature->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_signature_SetName(ID3D12CommandSignature *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&signature->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_signature_GetDevice(ID3D12CommandSignature *iface, REFIID iid, void **device)
@ -10225,7 +10190,7 @@ static CONST_VTBL struct ID3D12CommandSignatureVtbl d3d12_command_signature_vtbl
d3d12_command_signature_GetPrivateData,
d3d12_command_signature_SetPrivateData,
d3d12_command_signature_SetPrivateDataInterface,
d3d12_command_signature_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_command_signature_GetDevice,
};

View File

@ -469,7 +469,7 @@ static CONST_VTBL struct ID3D12GraphicsCommandList5Vtbl d3d12_command_list_vtbl_
d3d12_command_list_GetPrivateData,
d3d12_command_list_SetPrivateData,
d3d12_command_list_SetPrivateDataInterface,
d3d12_command_list_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_command_list_GetDevice,
/* ID3D12CommandList methods */

View File

@ -2368,6 +2368,12 @@ static void d3d12_device_destroy(struct d3d12_device *device)
vkd3d_instance_decref(device->vkd3d_instance);
}
static void d3d12_device_set_name(struct d3d12_device *device, const char *name)
{
vkd3d_set_vk_object_name(device, (uint64_t)(uintptr_t)device->vk_device,
VK_OBJECT_TYPE_DEVICE, name);
}
static ULONG STDMETHODCALLTYPE d3d12_device_Release(d3d12_device_iface *iface)
{
struct d3d12_device *device = impl_from_ID3D12Device(iface);
@ -2427,7 +2433,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_SetPrivateData(d3d12_device_iface
TRACE("iface %p, guid %s, data_size %u, data %p.\n",
iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&device->private_store, guid, data_size, data);
return vkd3d_set_private_data(&device->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_device_set_name, device);
}
static HRESULT STDMETHODCALLTYPE d3d12_device_SetPrivateDataInterface(d3d12_device_iface *iface,
@ -2437,17 +2444,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_SetPrivateDataInterface(d3d12_devi
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&device->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_device_SetName(d3d12_device_iface *iface, const WCHAR *name)
{
struct d3d12_device *device = impl_from_ID3D12Device(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return vkd3d_set_vk_object_name(device, (uint64_t)(uintptr_t)device->vk_device,
VK_OBJECT_TYPE_DEVICE, name);
return vkd3d_set_private_data_interface(&device->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_device_set_name, device);
}
static UINT STDMETHODCALLTYPE d3d12_device_GetNodeCount(d3d12_device_iface *iface)
@ -4313,7 +4311,7 @@ static CONST_VTBL struct ID3D12Device6Vtbl d3d12_device_vtbl =
d3d12_device_GetPrivateData,
d3d12_device_SetPrivateData,
d3d12_device_SetPrivateDataInterface,
d3d12_device_SetName,
(void *)d3d12_object_SetName,
/* ID3D12Device methods */
d3d12_device_GetNodeCount,
d3d12_device_CreateCommandQueue,

View File

@ -225,7 +225,7 @@ static CONST_VTBL struct ID3D12Device6Vtbl d3d12_device_vtbl_profiled =
d3d12_device_GetPrivateData,
d3d12_device_SetPrivateData,
d3d12_device_SetPrivateDataInterface,
d3d12_device_SetName,
(void *)d3d12_object_SetName,
/* ID3D12Device methods */
d3d12_device_GetNodeCount,
d3d12_device_CreateCommandQueue,

View File

@ -70,6 +70,13 @@ static void d3d12_heap_destroy(struct d3d12_heap *heap)
vkd3d_free(heap);
}
static void d3d12_heap_set_name(struct d3d12_heap *heap, const char *name)
{
if (!heap->allocation.chunk)
vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->allocation.vk_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, name);
}
static ULONG STDMETHODCALLTYPE d3d12_heap_Release(d3d12_heap_iface *iface)
{
struct d3d12_heap *heap = impl_from_ID3D12Heap(iface);
@ -100,7 +107,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_heap_SetPrivateData(d3d12_heap_iface *ifa
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_heap_set_name, heap);
}
static HRESULT STDMETHODCALLTYPE d3d12_heap_SetPrivateDataInterface(d3d12_heap_iface *iface,
@ -110,20 +118,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_heap_SetPrivateDataInterface(d3d12_heap_i
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&heap->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_heap_SetName(d3d12_heap_iface *iface, const WCHAR *name)
{
struct d3d12_heap *heap = impl_from_ID3D12Heap(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
if (!heap->allocation.chunk)
return vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->allocation.vk_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, name);
else
return S_OK;
return vkd3d_set_private_data_interface(&heap->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_heap_set_name, heap);
}
static HRESULT STDMETHODCALLTYPE d3d12_heap_GetDevice(d3d12_heap_iface *iface, REFIID iid, void **device)
@ -164,7 +160,7 @@ static CONST_VTBL struct ID3D12Heap1Vtbl d3d12_heap_vtbl =
d3d12_heap_GetPrivateData,
d3d12_heap_SetPrivateData,
d3d12_heap_SetPrivateDataInterface,
d3d12_heap_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_heap_GetDevice,
/* ID3D12Heap methods */

View File

@ -149,7 +149,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_state_object_SetPrivateData(ID3D12StateOb
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&state_object->private_store, guid, data_size, data);
return vkd3d_set_private_data(&state_object->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_state_object_SetPrivateDataInterface(ID3D12StateObject *iface,
@ -159,14 +160,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_state_object_SetPrivateDataInterface(ID3D
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&state_object->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_state_object_SetName(ID3D12StateObject *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&state_object->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_state_object_GetDevice(ID3D12StateObject *iface,
@ -270,7 +265,7 @@ static CONST_VTBL struct ID3D12StateObjectVtbl d3d12_state_object_vtbl =
d3d12_state_object_GetPrivateData,
d3d12_state_object_SetPrivateData,
d3d12_state_object_SetPrivateDataInterface,
d3d12_state_object_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_state_object_GetDevice,
};

View File

@ -1205,6 +1205,18 @@ static void d3d12_resource_get_level_box(const struct d3d12_resource *resource,
box->back = d3d12_resource_desc_get_depth(&resource->desc, level);
}
static void d3d12_resource_set_name(struct d3d12_resource *resource, const char *name)
{
/* Multiple committed and placed buffers may refer to the same VkBuffer,
* which may cause race conditions if the app calls this concurrently */
if (d3d12_resource_is_buffer(resource) && (resource->flags & VKD3D_RESOURCE_RESERVED))
vkd3d_set_vk_object_name(resource->device, (uint64_t)resource->res.vk_buffer,
VK_OBJECT_TYPE_BUFFER, name);
else if (d3d12_resource_is_texture(resource))
vkd3d_set_vk_object_name(resource->device, (uint64_t)resource->res.vk_image,
VK_OBJECT_TYPE_IMAGE, name);
}
/* ID3D12Resource */
static inline struct d3d12_resource *impl_from_ID3D12Resource(d3d12_resource_iface *iface)
{
@ -1282,7 +1294,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_SetPrivateData(d3d12_resource_if
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&resource->private_store, guid, data_size, data);
return vkd3d_set_private_data(&resource->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_resource_set_name, resource);
}
static HRESULT STDMETHODCALLTYPE d3d12_resource_SetPrivateDataInterface(d3d12_resource_iface *iface,
@ -1292,25 +1305,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_SetPrivateDataInterface(d3d12_re
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&resource->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_resource_SetName(d3d12_resource_iface *iface, const WCHAR *name)
{
struct d3d12_resource *resource = impl_from_ID3D12Resource(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
/* Multiple committed and placed buffers may refer to the same VkBuffer,
* which may cause race conditions if the app calls this concurrently */
if (d3d12_resource_is_buffer(resource) && (resource->flags & VKD3D_RESOURCE_RESERVED))
return vkd3d_set_vk_object_name(resource->device, (uint64_t)resource->res.vk_buffer,
VK_OBJECT_TYPE_BUFFER, name);
else if (d3d12_resource_is_texture(resource))
return vkd3d_set_vk_object_name(resource->device, (uint64_t)resource->res.vk_image,
VK_OBJECT_TYPE_IMAGE, name);
else
return S_OK;
return vkd3d_set_private_data_interface(&resource->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_resource_set_name, resource);
}
static HRESULT STDMETHODCALLTYPE d3d12_resource_GetDevice(d3d12_resource_iface *iface, REFIID iid, void **device)
@ -1683,7 +1679,7 @@ static CONST_VTBL struct ID3D12Resource1Vtbl d3d12_resource_vtbl =
d3d12_resource_GetPrivateData,
d3d12_resource_SetPrivateData,
d3d12_resource_SetPrivateDataInterface,
d3d12_resource_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_resource_GetDevice,
/* ID3D12Resource methods */
@ -4738,7 +4734,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_descriptor_heap_SetPrivateData(ID3D12Desc
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_descriptor_heap_SetPrivateDataInterface(ID3D12DescriptorHeap *iface,
@ -4748,14 +4745,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_descriptor_heap_SetPrivateDataInterface(I
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&heap->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_descriptor_heap_SetName(ID3D12DescriptorHeap *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&heap->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_descriptor_heap_GetDevice(ID3D12DescriptorHeap *iface, REFIID iid, void **device)
@ -4812,7 +4803,7 @@ static CONST_VTBL struct ID3D12DescriptorHeapVtbl d3d12_descriptor_heap_vtbl =
d3d12_descriptor_heap_GetPrivateData,
d3d12_descriptor_heap_SetPrivateData,
d3d12_descriptor_heap_SetPrivateDataInterface,
d3d12_descriptor_heap_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_descriptor_heap_GetDevice,
/* ID3D12DescriptorHeap methods */
@ -5307,6 +5298,20 @@ void d3d12_descriptor_heap_cleanup(struct d3d12_descriptor_heap *descriptor_heap
#endif
}
static void d3d12_query_heap_set_name(struct d3d12_query_heap *heap, const char *name)
{
if (heap->vk_query_pool)
{
vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->vk_query_pool,
VK_OBJECT_TYPE_QUERY_POOL, name);
}
else /*if (heap->vk_buffer)*/
{
vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->vk_buffer,
VK_OBJECT_TYPE_BUFFER, name);
}
}
/* ID3D12QueryHeap */
static inline struct d3d12_query_heap *impl_from_ID3D12QueryHeap(ID3D12QueryHeap *iface)
{
@ -5388,7 +5393,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_query_heap_SetPrivateData(ID3D12QueryHeap
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data);
return vkd3d_set_private_data(&heap->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_query_heap_set_name, heap);
}
static HRESULT STDMETHODCALLTYPE d3d12_query_heap_SetPrivateDataInterface(ID3D12QueryHeap *iface,
@ -5398,25 +5404,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_query_heap_SetPrivateDataInterface(ID3D12
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&heap->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_query_heap_SetName(ID3D12QueryHeap *iface, const WCHAR *name)
{
struct d3d12_query_heap *heap = impl_from_ID3D12QueryHeap(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
if (heap->vk_query_pool)
{
return vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->vk_query_pool,
VK_OBJECT_TYPE_QUERY_POOL, name);
}
else /*if (heap->vk_buffer)*/
{
return vkd3d_set_vk_object_name(heap->device, (uint64_t)heap->vk_buffer,
VK_OBJECT_TYPE_BUFFER, name);
}
return vkd3d_set_private_data_interface(&heap->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_query_heap_set_name, heap);
}
static HRESULT STDMETHODCALLTYPE d3d12_query_heap_GetDevice(ID3D12QueryHeap *iface, REFIID iid, void **device)
@ -5438,7 +5427,7 @@ static CONST_VTBL struct ID3D12QueryHeapVtbl d3d12_query_heap_vtbl =
d3d12_query_heap_GetPrivateData,
d3d12_query_heap_SetPrivateData,
d3d12_query_heap_SetPrivateDataInterface,
d3d12_query_heap_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_query_heap_GetDevice,
};
@ -5863,27 +5852,27 @@ HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources,
goto fail;
/* set Vulkan object names */
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_buffer,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_buffer,
VK_OBJECT_TYPE_BUFFER, "NULL buffer");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_buffer_view,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_buffer_view,
VK_OBJECT_TYPE_BUFFER_VIEW, "NULL buffer view");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_buffer_memory,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_buffer_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, "NULL memory");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_storage_buffer,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_storage_buffer,
VK_OBJECT_TYPE_BUFFER, "NULL UAV buffer");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_storage_buffer_view,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_storage_buffer_view,
VK_OBJECT_TYPE_BUFFER_VIEW, "NULL UAV buffer view");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_image,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_2d_image,
VK_OBJECT_TYPE_IMAGE, "NULL 2D SRV image");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_image_memory,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_2d_image_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, "NULL 2D SRV memory");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_storage_image,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_2d_storage_image,
VK_OBJECT_TYPE_IMAGE, "NULL 2D UAV image");
if (!use_sparse_resources)
{
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_storage_buffer_memory,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_storage_buffer_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, "NULL UAV buffer memory");
vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_storage_image_memory,
vkd3d_set_vk_object_name(device, (uint64_t)null_resources->vk_2d_storage_image_memory,
VK_OBJECT_TYPE_DEVICE_MEMORY, "NULL 2D UAV memory");
}

View File

@ -113,7 +113,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetPrivateData(ID3D12RootS
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&root_signature->private_store, guid, data_size, data);
return vkd3d_set_private_data(&root_signature->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetPrivateDataInterface(ID3D12RootSignature *iface,
@ -123,14 +124,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetPrivateDataInterface(ID
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&root_signature->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetName(ID3D12RootSignature *iface, const WCHAR *name)
{
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&root_signature->private_store, guid, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_GetDevice(ID3D12RootSignature *iface,
@ -153,7 +148,7 @@ static CONST_VTBL struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl =
d3d12_root_signature_GetPrivateData,
d3d12_root_signature_SetPrivateData,
d3d12_root_signature_SetPrivateDataInterface,
d3d12_root_signature_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_root_signature_GetDevice,
};
@ -1671,6 +1666,15 @@ static void d3d12_pipeline_state_destroy_graphics(struct d3d12_pipeline_state *s
VK_CALL(vkDestroyPipeline(device->vk_device, graphics->pipeline, NULL));
}
static void d3d12_pipeline_state_set_name(struct d3d12_pipeline_state *state, const char *name)
{
if (d3d12_pipeline_state_is_compute(state))
{
vkd3d_set_vk_object_name(state->device, (uint64_t)state->compute.vk_pipeline,
VK_OBJECT_TYPE_PIPELINE, name);
}
}
static ULONG STDMETHODCALLTYPE d3d12_pipeline_state_Release(ID3D12PipelineState *iface)
{
struct d3d12_pipeline_state *state = impl_from_ID3D12PipelineState(iface);
@ -1720,7 +1724,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetPrivateData(ID3D12Pipel
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&state->private_store, guid, data_size, data);
return vkd3d_set_private_data(&state->private_store, guid, data_size, data,
(vkd3d_set_name_callback) d3d12_pipeline_state_set_name, state);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetPrivateDataInterface(ID3D12PipelineState *iface,
@ -1730,22 +1735,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetPrivateDataInterface(ID
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return vkd3d_set_private_data_interface(&state->private_store, guid, data);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetName(ID3D12PipelineState *iface, const WCHAR *name)
{
struct d3d12_pipeline_state *state = impl_from_ID3D12PipelineState(iface);
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
if (d3d12_pipeline_state_is_compute(state))
{
return vkd3d_set_vk_object_name(state->device, (uint64_t)state->compute.vk_pipeline,
VK_OBJECT_TYPE_PIPELINE, name);
}
return name ? S_OK : E_INVALIDARG;
return vkd3d_set_private_data_interface(&state->private_store, guid, data,
(vkd3d_set_name_callback) d3d12_pipeline_state_set_name, state);
}
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_GetDevice(ID3D12PipelineState *iface,
@ -1803,7 +1794,7 @@ static CONST_VTBL struct ID3D12PipelineStateVtbl d3d12_pipeline_state_vtbl =
d3d12_pipeline_state_GetPrivateData,
d3d12_pipeline_state_SetPrivateData,
d3d12_pipeline_state_SetPrivateDataInterface,
d3d12_pipeline_state_SetName,
(void *)d3d12_object_SetName,
/* ID3D12DeviceChild methods */
d3d12_pipeline_state_GetDevice,
/* ID3D12PipelineState methods */
@ -1861,7 +1852,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device,
/* Helpful for tooling like RenderDoc. */
sprintf(hash_str, "%016"PRIx64, spirv.meta.hash);
vkd3d_set_vk_object_name_utf8(device, (uint64_t)stage_desc->module, VK_OBJECT_TYPE_SHADER_MODULE, hash_str);
vkd3d_set_vk_object_name(device, (uint64_t)stage_desc->module, VK_OBJECT_TYPE_SHADER_MODULE, hash_str);
return S_OK;
}

View File

@ -1595,7 +1595,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_swapchain_SetPrivateData(dxgi_swapchain_i
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return vkd3d_set_private_data(&swapchain->private_store, guid, data_size, data);
return vkd3d_set_private_data(&swapchain->private_store, guid, data_size, data,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_SetPrivateDataInterface(dxgi_swapchain_iface *iface,
@ -1605,7 +1606,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_swapchain_SetPrivateDataInterface(dxgi_sw
TRACE("iface %p, guid %s, object %p.\n", iface, debugstr_guid(guid), object);
return vkd3d_set_private_data_interface(&swapchain->private_store, guid, object);
return vkd3d_set_private_data_interface(&swapchain->private_store, guid, object,
NULL, NULL);
}
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetPrivateData(dxgi_swapchain_iface *iface,

View File

@ -1022,7 +1022,7 @@ static struct vkd3d_private_data *vkd3d_private_store_get_private_data(
return NULL;
}
static HRESULT vkd3d_private_store_set_private_data(struct vkd3d_private_store *store,
HRESULT vkd3d_private_store_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, const void *data, unsigned int data_size, bool is_object)
{
struct vkd3d_private_data *d, *old_data;
@ -1067,18 +1067,14 @@ HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int *out_size, void *out)
{
const struct vkd3d_private_data *data;
HRESULT hr = S_OK;
unsigned int size;
int rc;
HRESULT hr;
if (!out_size)
return E_INVALIDARG;
if ((rc = pthread_mutex_lock(&store->mutex)))
{
ERR("Failed to lock mutex, error %d.\n", rc);
return hresult_from_errno(rc);
}
if (FAILED(hr = vkd3d_private_data_lock(store)))
return hr;
if (!(data = vkd3d_private_store_get_private_data(store, tag)))
{
@ -1103,52 +1099,28 @@ HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store,
memcpy(out, data->data, data->size);
done:
pthread_mutex_unlock(&store->mutex);
vkd3d_private_data_unlock(store);
return hr;
}
HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int data_size, const void *data)
HRESULT STDMETHODCALLTYPE d3d12_object_SetName(ID3D12Object *iface, const WCHAR *name)
{
HRESULT hr;
int rc;
size_t size = 0;
if ((rc = pthread_mutex_lock(&store->mutex)))
{
ERR("Failed to lock mutex, error %d.\n", rc);
return hresult_from_errno(rc);
}
TRACE("iface %p, name %s.\n", iface, debugstr_w(name));
hr = vkd3d_private_store_set_private_data(store, tag, data, data_size, false);
if (name)
size = sizeof(WCHAR) * (vkd3d_wcslen(name) + 1);
pthread_mutex_unlock(&store->mutex);
return hr;
return ID3D12Object_SetPrivateData(iface, &WKPDID_D3DDebugObjectNameW, size, name);
}
HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store,
const GUID *tag, const IUnknown *object)
{
const void *data = object ? object : (void *)&object;
HRESULT hr;
int rc;
if ((rc = pthread_mutex_lock(&store->mutex)))
{
ERR("Failed to lock mutex, error %d.\n", rc);
return hresult_from_errno(rc);
}
hr = vkd3d_private_store_set_private_data(store, tag, data, sizeof(object), !!object);
pthread_mutex_unlock(&store->mutex);
return hr;
}
VkResult vkd3d_set_vk_object_name_utf8(struct d3d12_device *device, uint64_t vk_object,
HRESULT vkd3d_set_vk_object_name(struct d3d12_device *device, uint64_t vk_object,
VkObjectType vk_object_type, const char *name)
{
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
VkDebugUtilsObjectNameInfoEXT info;
VkResult vr;
if (!device->vk_info.EXT_debug_utils)
return VK_SUCCESS;
@ -1158,28 +1130,8 @@ VkResult vkd3d_set_vk_object_name_utf8(struct d3d12_device *device, uint64_t vk_
info.objectType = vk_object_type;
info.objectHandle = vk_object;
info.pObjectName = name;
return VK_CALL(vkSetDebugUtilsObjectNameEXT(device->vk_device, &info));
}
HRESULT vkd3d_set_vk_object_name(struct d3d12_device *device, uint64_t vk_object,
VkObjectType vk_object_type, const WCHAR *name)
{
char *name_utf8;
VkResult vr;
if (!name)
return E_INVALIDARG;
if (!device->vk_info.EXT_debug_utils)
return S_OK;
if (!(name_utf8 = vkd3d_strdup_w_utf8(name, 0)))
return E_OUTOFMEMORY;
vr = vkd3d_set_vk_object_name_utf8(device, vk_object, vk_object_type, name_utf8);
vkd3d_free(name_utf8);
vr = VK_CALL(vkSetDebugUtilsObjectNameEXT(device->vk_device, &info));
return hresult_from_vk_result(vr);
}

View File

@ -36,7 +36,7 @@
#include "vkd3d_threads.h"
#include "vkd3d_platform.h"
#include "vkd3d_swapchain_factory.h"
#include "vkd3d_string.h"
#include <assert.h>
#include <inttypes.h>
#include <limits.h>
@ -406,12 +406,117 @@ static inline void vkd3d_private_store_destroy(struct vkd3d_private_store *store
pthread_mutex_destroy(&store->mutex);
}
static inline HRESULT vkd3d_private_data_lock(struct vkd3d_private_store *store)
{
int rc;
if ((rc = pthread_mutex_lock(&store->mutex)))
{
ERR("Failed to lock mutex, error %d.\n", rc);
return hresult_from_errno(rc);
}
return S_OK;
}
static inline void vkd3d_private_data_unlock(struct vkd3d_private_store *store)
{
pthread_mutex_unlock(&store->mutex);
}
HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int *out_size, void *out);
HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int data_size, const void *data);
HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store,
const GUID *tag, const IUnknown *object);
HRESULT vkd3d_private_store_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, const void *data, unsigned int data_size, bool is_object);
typedef void(*vkd3d_set_name_callback)(void *, const char *);
static inline bool vkd3d_private_data_object_name_ptr(REFGUID guid,
UINT data_size, const void *data, const char **out_name)
{
if (out_name)
*out_name = NULL;
if (IsEqualGUID(guid, &WKPDID_D3DDebugObjectName))
{
const char *name = (const char *)data;
if (!data || !data_size)
return true;
if (out_name)
*out_name = name[data_size - 1] != '\0'
? vkd3d_strdup_n(name, data_size)
: name;
return true;
}
else if (IsEqualGUID(guid, &WKPDID_D3DDebugObjectNameW))
{
const WCHAR *name = (const WCHAR *)data;
if (!data || data_size < sizeof(WCHAR))
return true;
if (out_name)
*out_name = vkd3d_strdup_w_utf8(name, data_size / sizeof(WCHAR));
return true;
}
return false;
}
static inline HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int data_size, const void *data,
vkd3d_set_name_callback set_name_callback, void *calling_object)
{
const char *name;
HRESULT hr;
if (FAILED(hr = vkd3d_private_data_lock(store)))
return hr;
if (FAILED(hr = vkd3d_private_store_set_private_data(store, tag, data, data_size, false)))
{
vkd3d_private_data_unlock(store);
return hr;
}
if (set_name_callback && vkd3d_private_data_object_name_ptr(tag, data_size, data, &name))
{
set_name_callback(calling_object, name);
if (name && name != data)
vkd3d_free((void *)name);
}
vkd3d_private_data_unlock(store);
return hr;
}
static inline HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store,
const GUID *tag, const IUnknown *object,
vkd3d_set_name_callback set_name_callback, void *calling_object)
{
const void *data = object ? object : (void *)&object;
HRESULT hr;
if (FAILED(hr = vkd3d_private_data_lock(store)))
return hr;
if (FAILED(hr = vkd3d_private_store_set_private_data(store, tag, data, sizeof(object), !!object)))
{
vkd3d_private_data_unlock(store);
return hr;
}
if (set_name_callback && vkd3d_private_data_object_name_ptr(tag, 0, NULL, NULL))
set_name_callback(calling_object, NULL);
vkd3d_private_data_unlock(store);
return hr;
}
HRESULT STDMETHODCALLTYPE d3d12_object_SetName(ID3D12Object *iface, const WCHAR *name);
/* ID3D12Fence */
typedef ID3D12Fence1 d3d12_fence_iface;
@ -2669,10 +2774,8 @@ HRESULT vkd3d_load_vk_instance_procs(struct vkd3d_vk_instance_procs *procs,
HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
const struct vkd3d_vk_instance_procs *parent_procs, VkDevice device);
VkResult vkd3d_set_vk_object_name_utf8(struct d3d12_device *device, uint64_t vk_object,
VkObjectType vk_object_type, const char *name);
HRESULT vkd3d_set_vk_object_name(struct d3d12_device *device, uint64_t vk_object,
VkObjectType vk_object_type, const WCHAR *name);
VkObjectType vk_object_type, const char *name);
enum VkPrimitiveTopology vk_topology_from_d3d12_topology(D3D12_PRIMITIVE_TOPOLOGY topology);