[PATCH v3 2/7] wined3d: Add functions to support device local and non-local memory info management.

Henri Verbeet hverbeet at gmail.com
Tue Nov 26 14:01:21 CST 2019


On Mon, 25 Nov 2019 at 17:43, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> +void CDECL wined3d_update_adapter_memory_info(const struct wined3d *wined3d, unsigned int adapter_idx,
> +        unsigned int non_local, UINT64 bytes_total, INT64 bytes_added)
Is it ever necessary to override the total amount of video memory? I
think it would make most sense to add support for events and different
memory types to adapter_adjust_memory(), and then implement this
function on top of that one.

> +HRESULT CDECL wined3d_get_adapter_memory_info(const struct wined3d *wined3d, unsigned int adapter_idx,
> +        unsigned int non_local, struct wined3d_adapter_memory_info *info)
If we have wined3d_get_adapter_memory_info(), the memory information
in struct wined3d_adapter_identifier becomes redundant and could be
removed. I'd consider splitting this patch set in a slightly different
way, essentially introducing the wined3d functions in the same dxgi
patch that uses them. E.g., introducing
wined3d_get_adapter_memory_info() would be part of the patch that
modifies dxgi_adapter_QueryVideoMemoryInfo().

> +static BOOL wined3d_set_unused_event_handle(struct wined3d_adapter *adapter, HANDLE event, DWORD *cookie)
> +{
> +    DWORD i;
> +    for (i = 0; i < adapter->event_count; ++i)
> +    {
> +        if (!adapter->memory_events[i])
> +        {
> +            adapter->memory_events[i] = event;
> +            *cookie = i;
> +            return TRUE;
> +        }
> +    }
> +    return FALSE;
> +}
> +
> +HRESULT CDECL wined3d_register_adapter_memory_event(const struct wined3d *wined3d, unsigned int adapter_idx,
> +        HANDLE event, DWORD *cookie)
> +{
<snip>
> +    if (!wined3d_set_unused_event_handle(adapter, event, cookie))
> +    {
> +        if(!(new_buffer = heap_realloc(adapter->memory_events, (adapter->event_count + 1) * sizeof(*adapter->memory_events))))
That looks like something that should use a free-list and
wined3d_array_reserve().



More information about the wine-devel mailing list