[PATCH] wined3d: Prevent buildup of retired buffer objects' memory.
Jan Sikorski
jsikorski at codeweavers.com
Tue Apr 20 09:09:57 CDT 2021
> On 20 Apr 2021, at 15:30, Henri Verbeet <hverbeet at gmail.com> wrote:
>
> On Tue, 20 Apr 2021 at 11:37, Jan Sikorski <jsikorski at codeweavers.com> wrote:
>> @@ -921,6 +921,9 @@ void wined3d_context_vk_destroy_bo(struct wined3d_context_vk *context_vk, const
>> if (bo->map_ptr)
>> VK_CALL(vkUnmapMemory(device_vk->vk_device, bo->vk_memory));
>> wined3d_context_vk_destroy_vk_memory(context_vk, bo->vk_memory, bo->command_buffer_id);
>> +
>> + if (bo->command_buffer_id == context_vk->current_command_buffer.id)
>> + context_vk->retired_bo_counter += bo->size;
>> }
> Should we guard "retired_bo_counter" against overflow? On 32-bit
> builds that has a maximum of 4GiB, which is perhaps not as much as it
> once was in terms of VRAM.
Right, that wouldn’t hurt even if it’s not that likely to happen, would you mind if I simply changed it to VkDeviceSize instead of doing overflow checks?
>> diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
>> index c3e3752ed71..694436ddad2 100644
>> --- a/dlls/wined3d/wined3d_private.h
>> +++ b/dlls/wined3d/wined3d_private.h
>> @@ -2549,6 +2549,8 @@ struct wined3d_context_vk
>> VkCommandPool vk_command_pool;
>> struct wined3d_command_buffer_vk current_command_buffer;
>> uint64_t completed_command_buffer_id;
>> +#define WINED3D_RETIRED_BO_COUNTER_THRESHOLD (64 << 20)
>> + size_t retired_bo_counter;
>>
> I'd prefer not having the WINED3D_RETIRED_BO_COUNTER_THRESHOLD #define
> in the middle of a structure. Perhaps next to the other allocator
> constants (i.e., WINED3D_ALLOCATOR_CHUNK_SIZE and the like) would be a
> good place. I think "retired_bo_counter" is perhaps a little awkward,
> in the sense that it doesn't count the number of retired bo's, but
> tracks their size; "retired_bo_size", perhaps?
>
> In terms of the commit message, it's perhaps helpful to mention that
> one way this can occur is by the application doing resource updates
> without flushing either explicitly or implicitly, causing retired
> staging bo's for the current command buffer to accumulate.
Sure
More information about the wine-devel
mailing list