opengl 选择要与SDL2一起使用的DRI设备

gwbalxhn  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(211)

我的系统中有两个GPU,一个是分立的AMD,一个是集成的Intel:

  1. $ drm_info | grep Driver:
  2. ├───Driver: amdgpu (AMD GPU) version 3.49.0 (20150101)
  3. ├───Driver: i915 (Intel Graphics) version 1.6.0 (20201103)

我使用SDL2创建我的OpenGL上下文,然后SDL为我的系统列出以下视频设备:

  1. SDL2 video driver #0: x11
  2. SDL2 video driver #1: wayland
  3. SDL2 video driver #2: KMSDRM
  4. SDL2 video driver #3: offscreen
  5. SDL2 video driver #4: dummy
  6. SDL2 video driver #5: evdev

我可以选择一个,通过编程方式,或者在运行时使用SDL_VIDEODRIVER环境变量。
这使我能够在wayland和x11之间切换。
但是,我如何影响SDL2选择AMD或英特尔GPU?
目前它似乎更青睐英特尔的那款,尽管我的主要4K显示器连接到了AMD设备。它在x11和wayland下实现了这一点。
我用下面的代码初始化我的视频设备:

  1. const int initerr2 = SDL_InitSubSystem( SDL_INIT_VIDEO );
  2. if ( initerr2 ) LOGE( "Failed to initialize video subsystem of SDL2: %s", SDL_GetError() );

我使用这些属性指定GL上下文:

  1. SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
  2. SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5);
  3. SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
  4. if ( opt_msaa>0 )
  5. {
  6. SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
  7. SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, opt_msaa);
  8. }
  9. SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
  1. $ inxi -G
  2. Graphics:
  3. Device-1: Intel AlderLake-S GT1 driver: i915 v: kernel
  4. Device-2: AMD Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
  5. driver: amdgpu v: kernel
  6. Device-3: Logitech BRIO Ultra HD Webcam type: USB
  7. driver: hid-generic,snd-usb-audio,usbhid,uvcvideo
  8. Display: wayland server: X.Org v: 1.22.1.8 with: Xwayland v: 22.1.8
  9. compositor: gnome-shell v: 44.0 driver: X: loaded: amdgpu,modesetting
  10. unloaded: fbdev,radeon,vesa dri: iris gpu: amdgpu,i915 resolution:
  11. 1: 1280x768~60Hz 2: 3840x2160~60Hz
  12. API: OpenGL v: 4.6 Mesa 23.0.2 renderer: Mesa Intel UHD Graphics 770
  13. (ADL-S GT1)

如何告诉SDL2在/dev/dri/card0/dev/dri/card1设备之间进行选择?

dy1byipe

dy1byipe1#

SDL2似乎没有这样的机制,但您可以使用此梅萨环境变量来控制操作系统中的GPU选择:
DRI_PRIME
您可以将其设置为PCI ID,也可以设置为vendor:device ID,如下所示:

  1. $ DRI_PRIME=1002:67df ./sdl2app

上面的行将强制应用程序在我的AMD RX580上运行,而不是在iGPU上运行。

相关问题