diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index e5649a9e29d1b48cb112f5b407542dbac6ed2ec1..32d420d655fa8c31dfeb9de763ce0a72b74dbbbd 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -1935,7 +1935,7 @@ static void d3d12_command_list_update_descriptor_table(struct d3d12_command_list 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); @@ -1948,8 +1948,7 @@ static void d3d12_command_list_update_descriptor_table(struct d3d12_command_list if (range->offset != D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) { - descriptor = (struct d3d12_desc *)(intptr_t)base_descriptor.ptr; - descriptor += range->offset; + descriptor = d3d12_desc_from_gpu_handle(base_descriptor) + range->offset; } for (j = 0; j < range->descriptor_count; ++j, ++descriptor) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 79647de7dcaf591dde0ec03380504dc91740b16a..a599a7a337dd319cc6b9e283a279c39ec27944b3 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1290,7 +1290,8 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface, { struct d3d12_device *device = impl_from_ID3D12Device(iface); 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, " "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 = (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) { - 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) { if (dst_idx >= dst_descriptor_range_sizes[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; } diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index b419e5bb2f60b3979443a9d86046c4c35a29ed8f..22f62a565e2ad433f8a73acc706af0f2bd1a95b4 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -826,7 +826,7 @@ static void d3d12_desc_destroy(struct d3d12_desc *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) { d3d12_desc_destroy(dst, device); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 496c9f4a5cf784cb0449c931bdb1d4ab3cb3111e..676bb9cc4924d57cc656e99459738c19a79d00e7 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -211,7 +211,17 @@ struct d3d12_desc } 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; void d3d12_desc_create_cbv(struct d3d12_desc *descriptor, struct d3d12_device *device, const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc) DECLSPEC_HIDDEN;