From 73b7aefd81ef1476b95410d13cff750992accd04 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Fri, 17 Jul 2020 11:52:42 +0100 Subject: [PATCH] vkd3d: Move copy descriptors implementation into a new func Calling this from CopyDescriptorsSimple on its own is a bad idea given its __stdcall and GCC doesn't like optimizing that. Also marked it as inline given it can easily be optimized greatly contextually for CopyDescriptorsSimple Signed-off-by: Joshua Ashton --- libs/vkd3d/device.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index ba97dac3..25a254eb 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -3226,26 +3226,17 @@ static void STDMETHODCALLTYPE d3d12_device_CreateSampler(d3d12_device_iface *ifa d3d12_desc_write_atomic(d3d12_desc_from_cpu_handle(descriptor), &tmp, device); } -static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(d3d12_device_iface *iface, +static inline void d3d12_device_copy_descriptors(struct d3d12_device *device, UINT dst_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets, const UINT *dst_descriptor_range_sizes, UINT src_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets, const UINT *src_descriptor_range_sizes, D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) { - struct d3d12_device *device = impl_from_ID3D12Device(iface); unsigned int dst_range_idx, dst_idx, src_range_idx, src_idx; unsigned int dst_range_size, src_range_size; struct d3d12_desc *dst, *src; - TRACE("iface %p, dst_descriptor_range_count %u, dst_descriptor_range_offsets %p, " - "dst_descriptor_range_sizes %p, src_descriptor_range_count %u, " - "src_descriptor_range_offsets %p, src_descriptor_range_sizes %p, " - "descriptor_heap_type %#x.\n", - iface, dst_descriptor_range_count, dst_descriptor_range_offsets, - dst_descriptor_range_sizes, src_descriptor_range_count, src_descriptor_range_offsets, - src_descriptor_range_sizes, descriptor_heap_type); - if (descriptor_heap_type != D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV && descriptor_heap_type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) { @@ -3279,6 +3270,29 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(d3d12_device_iface *i } } +static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(d3d12_device_iface *iface, + UINT dst_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets, + const UINT *dst_descriptor_range_sizes, + UINT src_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets, + const UINT *src_descriptor_range_sizes, + D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) +{ + TRACE("iface %p, dst_descriptor_range_count %u, dst_descriptor_range_offsets %p, " + "dst_descriptor_range_sizes %p, src_descriptor_range_count %u, " + "src_descriptor_range_offsets %p, src_descriptor_range_sizes %p, " + "descriptor_heap_type %#x.\n", + iface, dst_descriptor_range_count, dst_descriptor_range_offsets, + dst_descriptor_range_sizes, src_descriptor_range_count, src_descriptor_range_offsets, + src_descriptor_range_sizes, descriptor_heap_type); + + d3d12_device_copy_descriptors(impl_from_ID3D12Device(iface), + dst_descriptor_range_count, dst_descriptor_range_offsets, + dst_descriptor_range_sizes, + src_descriptor_range_count, src_descriptor_range_offsets, + src_descriptor_range_sizes, + descriptor_heap_type); +} + static void STDMETHODCALLTYPE d3d12_device_CopyDescriptorsSimple(d3d12_device_iface *iface, UINT descriptor_count, const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset, const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset, @@ -3289,8 +3303,10 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptorsSimple(d3d12_device_if iface, descriptor_count, dst_descriptor_range_offset.ptr, src_descriptor_range_offset.ptr, descriptor_heap_type); - d3d12_device_CopyDescriptors(iface, 1, &dst_descriptor_range_offset, &descriptor_count, - 1, &src_descriptor_range_offset, &descriptor_count, descriptor_heap_type); + d3d12_device_copy_descriptors(impl_from_ID3D12Device(iface), + 1, &dst_descriptor_range_offset, &descriptor_count, + 1, &src_descriptor_range_offset, &descriptor_count, + descriptor_heap_type); } static D3D12_RESOURCE_ALLOCATION_INFO* STDMETHODCALLTYPE d3d12_device_GetResourceAllocationInfo1(d3d12_device_iface *iface,