我的系统中有两个GPU,一个是分立的AMD,一个是集成的Intel:
$ drm_info | grep Driver:
├───Driver: amdgpu (AMD GPU) version 3.49.0 (20150101)
├───Driver: i915 (Intel Graphics) version 1.6.0 (20201103)
我使用SDL2创建我的OpenGL上下文,然后SDL为我的系统列出以下视频设备:
SDL2 video driver #0: x11
SDL2 video driver #1: wayland
SDL2 video driver #2: KMSDRM
SDL2 video driver #3: offscreen
SDL2 video driver #4: dummy
SDL2 video driver #5: evdev
我可以选择一个,通过编程方式,或者在运行时使用SDL_VIDEODRIVER
环境变量。
这使我能够在wayland和x11之间切换。
但是,我如何影响SDL2选择AMD或英特尔GPU?
目前它似乎更青睐英特尔的那款,尽管我的主要4K显示器连接到了AMD设备。它在x11和wayland下实现了这一点。
我用下面的代码初始化我的视频设备:
const int initerr2 = SDL_InitSubSystem( SDL_INIT_VIDEO );
if ( initerr2 ) LOGE( "Failed to initialize video subsystem of SDL2: %s", SDL_GetError() );
我使用这些属性指定GL上下文:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
if ( opt_msaa>0 )
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, opt_msaa);
}
SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
$ inxi -G
Graphics:
Device-1: Intel AlderLake-S GT1 driver: i915 v: kernel
Device-2: AMD Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
driver: amdgpu v: kernel
Device-3: Logitech BRIO Ultra HD Webcam type: USB
driver: hid-generic,snd-usb-audio,usbhid,uvcvideo
Display: wayland server: X.Org v: 1.22.1.8 with: Xwayland v: 22.1.8
compositor: gnome-shell v: 44.0 driver: X: loaded: amdgpu,modesetting
unloaded: fbdev,radeon,vesa dri: iris gpu: amdgpu,i915 resolution:
1: 1280x768~60Hz 2: 3840x2160~60Hz
API: OpenGL v: 4.6 Mesa 23.0.2 renderer: Mesa Intel UHD Graphics 770
(ADL-S GT1)
如何告诉SDL2在/dev/dri/card0
和/dev/dri/card1
设备之间进行选择?
1条答案
按热度按时间dy1byipe1#
SDL2似乎没有这样的机制,但您可以使用此梅萨环境变量来控制操作系统中的GPU选择:
DRI_PRIME
您可以将其设置为PCI ID,也可以设置为vendor:device ID,如下所示:
上面的行将强制应用程序在我的AMD RX580上运行,而不是在iGPU上运行。