in skiko/src/awtMain/cpp/windows/directXRedrawer.cc [274:302]
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_Direct3DRedrawer_chooseAdapter(
JNIEnv *env, jobject redrawer, jint adapterPriority) {
gr_cp<IDXGIFactory4> deviceFactory;
if (!SUCCEEDED(CreateDXGIFactory1(IID_PPV_ARGS(&deviceFactory)))) {
return 0;
}
gr_cp<IDXGIFactory6> factory6;
if (!SUCCEEDED(deviceFactory->QueryInterface(IID_PPV_ARGS(&factory6)))) {
return 0;
}
for (UINT adapterIndex = 0;; ++adapterIndex) {
IDXGIAdapter1 *adapter = nullptr;
if (!SUCCEEDED(factory6->EnumAdapterByGpuPreference(adapterIndex, (DXGI_GPU_PREFERENCE) adapterPriority, IID_PPV_ARGS(&adapter)))) {
break;
}
if (
SUCCEEDED(D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, _uuidof(ID3D12Device), nullptr)) &&
isAdapterSupported(env, redrawer, adapter)
) {
return toJavaPointer(adapter);
} else {
adapter->Release();
}
}
return 0;
}