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

Sveinar Søpler cybermax at dexter.no
Wed Nov 20 14:14:55 CST 2019


Sveinar

On 20.11.2019 19:14, Hans-Kristian Arntzen wrote:
>
> 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
>
Yes, that did the trick. Tested your patch vkd3d: Fix printf warning...

Thanks :)

PS. I think when submitting vkd3d patches, i read someplace that "they" 
prefer that its added with brackets like this [PATCH vkd3d] , and not 
[PATCH] vkd3d... Something about easier sorting this rather than seeing 
it as "wine patches". Correct me if i remember wrong tho :)

>>       | ^~~~~~~~~~~
>> ./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