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.