[PATCH vkd3d 2/2] vkd3d: Optimise the GPU VA allocator.

Hans-Kristian Arntzen post at arntzen-software.no
Wed Nov 20 12:14:43 CST 2019


On 11/20/19 6:06 PM, Sveinar Søpler wrote:
> I am getting a compile warning when compiling 32-bit with this patch.
>
> -- 
>
> In file included from ./include/private/vkd3d_memory.h:26,
>                  from libs/vkd3d/vkd3d_private.h:27,
>                  from libs/vkd3d/device.c:19:
> libs/vkd3d/device.c: In function 
> ‘vkd3d_gpu_va_allocator_dereference_slab’:
> libs/vkd3d/device.c:1963:13: warning: format ‘%zu’ expects argument of 
> type ‘size_t’, but argument 7 has type ‘SIZE_T’ {aka ‘const long 
> unsigned int’} [-Wformat=]
>  1963 |         ERR("Address %#"PRIx64" is %#"PRIx64" bytes into slab 
> %u of size %zu.\n",
>       |             ^~~~~~~~~~~~
>  1964 |                 address, base_offset, slab_idx, slab->size);
>       |                                                 ~~~~~~~~~~
>       |                                                     |
>       |                                                     SIZE_T 
> {aka const long unsigned int}
> ./include/private/vkd3d_debug.h:71:57: note: in definition of macro 
> ‘VKD3D_DBG_PRINTF’
>    71 |         vkd3d_dbg_printf(vkd3d_dbg_level, __FUNCTION__, 
> __VA_ARGS__); } while (0)

I expect just changing slab->size's type to size_t would suffice.

Cheers,
Hans-Kristian

>       | ^~~~~~~~~~~
> ./include/private/vkd3d_debug.h:85:15: note: in expansion of macro 
> ‘VKD3D_DBG_LOG’
>    85 | #define ERR   VKD3D_DBG_LOG(ERR)
>       |               ^~~~~~~~~~~~~
> libs/vkd3d/device.c:1963:9: note: in expansion of macro ‘ERR’
>  1963 |         ERR("Address %#"PRIx64" is %#"PRIx64" bytes into slab 
> %u of size %zu.\n",
>       |         ^~~
> libs/vkd3d/device.c:1963:76: note: format string is defined here
>  1963 |         ERR("Address %#"PRIx64" is %#"PRIx64" bytes into slab 
> %u of size %zu.\n",
> | ~~^
> | |
> | unsigned int
> | %lu
>
> -- 
>
> %zu expects this to be unsigned int and not long for my 32-bit 
> compiler. I dunno if this is different for MSVC or some other compiler 
> for 32-bit? Should it just be changed for %lu to get rid of the 
> warning, or is there some weirdness with Ubuntu gcc-9 behavior? (Or my 
> setup for that matter).
>
> Compile log from OBS in case there is something i have done wrong: 
> https://build.opensuse.org/build/home:SveSop/xUbuntu_18.04/i586/vkd3d/_log 
>
>
> Sveinar
>
> On 24.10.2019 16:33, hverbeet at codeweavers.com (Henri Verbeet) wrote:
>> From: Hans-Kristian Arntzen <post at arntzen-software.no>
>>
>> The GPU VA allocator was allocating memory in a way where dereferencing
>> GPU VA required a lock + bsearch() to find the right VA range.
>>
>> Rather than going this route, we turn the common case into O(1) and
>> lock-free by creating a slab allocator which allows us to lookup a
>> pointer directly from a GPU VA with (VA - Base) / PageSize.
>>
>> The number of allocations in the fast path must be limited since we
>> cannot trivially grow the allocator while remaining lock-free for
>> dereferences.
>>
>> Signed-off-by: Hans-Kristian Arntzen <post at arntzen-software.no>
>> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
>> ---
>> This supersedes patch 171219.
>>
>>   libs/vkd3d/device.c        | 226 
>> +++++++++++++++++++++++++++++++++++++--------
>>   libs/vkd3d/vkd3d_private.h |  28 ++++--
>>   2 files changed, 204 insertions(+), 50 deletions(-)
>>
>
>



More information about the wine-devel mailing list