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

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


On 11/20/19 9:14 PM, Sveinar Søpler wrote:
>
> 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 :)

That's new to me. I'm doing whatever git send-email/format-patch does.

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