vkd3d: Store heap in resource descriptors.

Otherwise, we won't know which descriptor set to write
to when using bindless.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-03-06 19:38:38 +01:00 committed by Hans-Kristian Arntzen
parent a1e6a1510f
commit 2f7781e3c1
2 changed files with 36 additions and 2 deletions

View File

@ -2217,7 +2217,9 @@ void d3d12_desc_write_atomic(struct d3d12_desc *dst, const struct d3d12_desc *sr
&& !InterlockedDecrement(&dst->u.view->refcount))
destroy_desc = *dst;
*dst = *src;
dst->magic = src->magic;
dst->vk_descriptor_type = src->vk_descriptor_type;
dst->u = src->u;
pthread_mutex_unlock(mutex);
@ -3743,6 +3745,36 @@ fail:
return hr;
}
static void d3d12_descriptor_heap_init_descriptors(struct d3d12_descriptor_heap *descriptor_heap,
size_t descriptor_size)
{
struct d3d12_desc *desc;
unsigned int i;
memset(descriptor_heap->descriptors, 0, descriptor_size * descriptor_heap->desc.NumDescriptors);
switch (descriptor_heap->desc.Type)
{
case D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV:
case D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER:
desc = (struct d3d12_desc *)descriptor_heap->descriptors;
for (i = 0; i < descriptor_heap->desc.NumDescriptors; i++)
{
desc[i].heap = descriptor_heap;
desc[i].heap_offset = i;
}
break;
case D3D12_DESCRIPTOR_HEAP_TYPE_RTV:
case D3D12_DESCRIPTOR_HEAP_TYPE_DSV:
break;
default:
WARN("Unhandled descriptor heap type: %d.\n", descriptor_heap->desc.Type);
}
}
HRESULT d3d12_descriptor_heap_create(struct d3d12_device *device,
const D3D12_DESCRIPTOR_HEAP_DESC *desc, struct d3d12_descriptor_heap **descriptor_heap)
{
@ -3780,7 +3812,7 @@ HRESULT d3d12_descriptor_heap_create(struct d3d12_device *device,
return hr;
}
memset(object->descriptors, 0, descriptor_size * desc->NumDescriptors);
d3d12_descriptor_heap_init_descriptors(object, descriptor_size);
TRACE("Created descriptor heap %p.\n", object);

View File

@ -524,6 +524,8 @@ bool vkd3d_create_texture_view(struct d3d12_device *device, VkImage vk_image,
struct d3d12_desc
{
struct d3d12_descriptor_heap *heap;
uint32_t heap_offset;
uint32_t magic;
VkDescriptorType vk_descriptor_type;
union