Zhiyi Zhang (@zhiyi) commented about dlls/win32u/sysparams.c:
+ if (gpu->luid.LowPart || gpu->luid.HighPart) + { + open_adapter_from_luid.AdapterLuid = gpu->luid; + + /* give the GDI driver a chance to be notified about new adapter handle */ + if (NT_SUCCESS( NtGdiDdDDIOpenAdapterFromLuid( &open_adapter_from_luid ) )) + { + desc->pAdapters[idx].AdapterLuid = gpu->luid; + desc->pAdapters[idx].hAdapter = open_adapter_from_luid.hAdapter; + desc->pAdapters[idx].bPrecisePresentRegionsPreferred = FALSE; + desc->pAdapters[idx].NumOfSources = 0; + + LIST_FOR_EACH_ENTRY( adapter, &adapters, struct adapter, entry ) + { + if (!memcmp( &gpu->luid, &adapter->gpu_luid, sizeof(LUID) ) ) + desc->pAdapters[idx].NumOfSources++; You can cache NumOfSources during the GPU cache construction. That will save us from calculating NumOfSources for each NtGdiDdDDIEnumAdapters2 call.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4857#note_59889