mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
libs/vkd3d: Add helpers for dereferencing descriptor handles.
This commit is contained in:
@@ -1935,7 +1935,7 @@ static void d3d12_command_list_update_descriptor_table(struct d3d12_command_list
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
descriptor = (struct d3d12_desc *)(intptr_t)base_descriptor.ptr;
|
descriptor = d3d12_desc_from_gpu_handle(base_descriptor);
|
||||||
|
|
||||||
d3d12_command_list_prepare_descriptors(list, bind_point);
|
d3d12_command_list_prepare_descriptors(list, bind_point);
|
||||||
|
|
||||||
@@ -1948,8 +1948,7 @@ static void d3d12_command_list_update_descriptor_table(struct d3d12_command_list
|
|||||||
|
|
||||||
if (range->offset != D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
|
if (range->offset != D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
|
||||||
{
|
{
|
||||||
descriptor = (struct d3d12_desc *)(intptr_t)base_descriptor.ptr;
|
descriptor = d3d12_desc_from_gpu_handle(base_descriptor) + range->offset;
|
||||||
descriptor += range->offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < range->descriptor_count; ++j, ++descriptor)
|
for (j = 0; j < range->descriptor_count; ++j, ++descriptor)
|
||||||
|
@@ -1290,7 +1290,8 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
|
|||||||
{
|
{
|
||||||
struct d3d12_device *device = impl_from_ID3D12Device(iface);
|
struct d3d12_device *device = impl_from_ID3D12Device(iface);
|
||||||
unsigned int dst_range_idx, dst_idx, src_range_idx, src_idx;
|
unsigned int dst_range_idx, dst_idx, src_range_idx, src_idx;
|
||||||
struct d3d12_desc *dst, *src;
|
const struct d3d12_desc *src;
|
||||||
|
struct d3d12_desc *dst;
|
||||||
|
|
||||||
TRACE("iface %p, dst_descriptor_range_count %u, dst_descriptor_range_offsets %p, "
|
TRACE("iface %p, dst_descriptor_range_count %u, dst_descriptor_range_offsets %p, "
|
||||||
"dst_descriptor_range_sizes %p, src_descriptor_range_count %u, "
|
"dst_descriptor_range_sizes %p, src_descriptor_range_count %u, "
|
||||||
@@ -1308,16 +1309,16 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dst_range_idx = dst_idx = 0;
|
dst_range_idx = dst_idx = 0;
|
||||||
dst = (struct d3d12_desc *)dst_descriptor_range_offsets[0].ptr;
|
dst = d3d12_desc_from_cpu_handle(dst_descriptor_range_offsets[0]);
|
||||||
for (src_range_idx = 0; src_range_idx < src_descriptor_range_count; ++src_range_idx)
|
for (src_range_idx = 0; src_range_idx < src_descriptor_range_count; ++src_range_idx)
|
||||||
{
|
{
|
||||||
src = (struct d3d12_desc *)src_descriptor_range_offsets[src_range_idx].ptr;
|
src = d3d12_desc_from_cpu_handle(src_descriptor_range_offsets[src_range_idx]);
|
||||||
for (src_idx = 0; src_idx < src_descriptor_range_sizes[src_range_idx]; ++src_idx)
|
for (src_idx = 0; src_idx < src_descriptor_range_sizes[src_range_idx]; ++src_idx)
|
||||||
{
|
{
|
||||||
if (dst_idx >= dst_descriptor_range_sizes[dst_range_idx])
|
if (dst_idx >= dst_descriptor_range_sizes[dst_range_idx])
|
||||||
{
|
{
|
||||||
++dst_range_idx;
|
++dst_range_idx;
|
||||||
dst = (struct d3d12_desc *)dst_descriptor_range_offsets[dst_range_idx].ptr;
|
dst = d3d12_desc_from_cpu_handle(dst_descriptor_range_offsets[dst_range_idx]);
|
||||||
dst_idx = 0;
|
dst_idx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -826,7 +826,7 @@ static void d3d12_desc_destroy(struct d3d12_desc *descriptor,
|
|||||||
memset(descriptor, 0, sizeof(*descriptor));
|
memset(descriptor, 0, sizeof(*descriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
void d3d12_desc_copy(struct d3d12_desc *dst, struct d3d12_desc *src,
|
void d3d12_desc_copy(struct d3d12_desc *dst, const struct d3d12_desc *src,
|
||||||
struct d3d12_device *device)
|
struct d3d12_device *device)
|
||||||
{
|
{
|
||||||
d3d12_desc_destroy(dst, device);
|
d3d12_desc_destroy(dst, device);
|
||||||
|
@@ -211,7 +211,17 @@ struct d3d12_desc
|
|||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
void d3d12_desc_copy(struct d3d12_desc *dst, struct d3d12_desc *src,
|
static inline struct d3d12_desc *d3d12_desc_from_cpu_handle(D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle)
|
||||||
|
{
|
||||||
|
return (struct d3d12_desc *)cpu_handle.ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct d3d12_desc *d3d12_desc_from_gpu_handle(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle)
|
||||||
|
{
|
||||||
|
return (struct d3d12_desc *)(intptr_t)gpu_handle.ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void d3d12_desc_copy(struct d3d12_desc *dst, const struct d3d12_desc *src,
|
||||||
struct d3d12_device *device) DECLSPEC_HIDDEN;
|
struct d3d12_device *device) DECLSPEC_HIDDEN;
|
||||||
void d3d12_desc_create_cbv(struct d3d12_desc *descriptor,
|
void d3d12_desc_create_cbv(struct d3d12_desc *descriptor,
|
||||||
struct d3d12_device *device, const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc) DECLSPEC_HIDDEN;
|
struct d3d12_device *device, const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc) DECLSPEC_HIDDEN;
|
||||||
|
Reference in New Issue
Block a user