1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

winex11: Introduce a new find_adapter_from_handle helper.

This commit is contained in:
Rémi Bernon 2024-03-08 13:59:29 +01:00 committed by Alexandre Julliard
parent 3686a04cdd
commit dc9229e6fa

View file

@ -871,6 +871,15 @@ BOOL X11DRV_SystemParametersInfo( UINT action, UINT int_param, void *ptr_param,
return FALSE; /* let user32 handle it */ return FALSE; /* let user32 handle it */
} }
/* d3dkmt_lock must be held */
static struct x11_d3dkmt_adapter *find_adapter_from_handle( D3DKMT_HANDLE handle )
{
struct x11_d3dkmt_adapter *adapter;
LIST_FOR_EACH_ENTRY( adapter, &x11_d3dkmt_adapters, struct x11_d3dkmt_adapter, entry )
if (adapter->handle == handle) return adapter;
return NULL;
}
NTSTATUS X11DRV_D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) NTSTATUS X11DRV_D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
{ {
struct x11_d3dkmt_adapter *adapter; struct x11_d3dkmt_adapter *adapter;
@ -879,16 +888,11 @@ NTSTATUS X11DRV_D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
pthread_mutex_lock(&d3dkmt_mutex); pthread_mutex_lock(&d3dkmt_mutex);
LIST_FOR_EACH_ENTRY(adapter, &x11_d3dkmt_adapters, struct x11_d3dkmt_adapter, entry) if ((adapter = find_adapter_from_handle( desc->hAdapter )))
{ list_remove( &adapter->entry );
if (adapter->handle == desc->hAdapter)
{
list_remove(&adapter->entry);
free(adapter);
break;
}
}
pthread_mutex_unlock(&d3dkmt_mutex); pthread_mutex_unlock(&d3dkmt_mutex);
free(adapter);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -1096,7 +1100,6 @@ NTSTATUS X11DRV_D3DKMTQueryVideoMemoryInfo( D3DKMT_QUERYVIDEOMEMORYINFO *desc )
{ {
VkPhysicalDeviceMemoryBudgetPropertiesEXT budget; VkPhysicalDeviceMemoryBudgetPropertiesEXT budget;
VkPhysicalDeviceMemoryProperties2 properties2; VkPhysicalDeviceMemoryProperties2 properties2;
NTSTATUS status = STATUS_INVALID_PARAMETER;
struct x11_d3dkmt_adapter *adapter; struct x11_d3dkmt_adapter *adapter;
unsigned int i; unsigned int i;
@ -1112,11 +1115,8 @@ NTSTATUS X11DRV_D3DKMTQueryVideoMemoryInfo( D3DKMT_QUERYVIDEOMEMORYINFO *desc )
} }
pthread_mutex_lock(&d3dkmt_mutex); pthread_mutex_lock(&d3dkmt_mutex);
LIST_FOR_EACH_ENTRY(adapter, &x11_d3dkmt_adapters, struct x11_d3dkmt_adapter, entry) if ((adapter = find_adapter_from_handle(desc->hAdapter)))
{ {
if (adapter->handle != desc->hAdapter)
continue;
memset(&budget, 0, sizeof(budget)); memset(&budget, 0, sizeof(budget));
budget.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT; budget.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2; properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
@ -1134,11 +1134,10 @@ NTSTATUS X11DRV_D3DKMTQueryVideoMemoryInfo( D3DKMT_QUERYVIDEOMEMORYINFO *desc )
} }
} }
desc->AvailableForReservation = desc->Budget / 2; desc->AvailableForReservation = desc->Budget / 2;
status = STATUS_SUCCESS;
break;
} }
pthread_mutex_unlock(&d3dkmt_mutex); pthread_mutex_unlock(&d3dkmt_mutex);
return status;
return adapter ? STATUS_SUCCESS : STATUS_INVALID_PARAMETER;
} }
NTSTATUS x11drv_client_func( enum x11drv_client_funcs id, const void *params, ULONG size ) NTSTATUS x11drv_client_func( enum x11drv_client_funcs id, const void *params, ULONG size )