mirror of
https://github.com/moonlight-stream/moonlight-qt
synced 2025-01-09 09:48:43 +00:00
Adjust MMAL and RPi workarounds for Pi 5 and Bookworm support
This commit is contained in:
parent
c14cc70a6a
commit
9120fd01a8
1 changed files with 41 additions and 29 deletions
|
@ -594,6 +594,35 @@ int DrmRenderer::getRendererAttributes()
|
||||||
// This renderer does not buffer any frames in the graphics pipeline
|
// This renderer does not buffer any frames in the graphics pipeline
|
||||||
attributes |= RENDERER_ATTRIBUTE_NO_BUFFERING;
|
attributes |= RENDERER_ATTRIBUTE_NO_BUFFERING;
|
||||||
|
|
||||||
|
#ifdef GL_IS_SLOW
|
||||||
|
// Restrict streaming resolution to 1080p on the Pi 4 while in the desktop environment.
|
||||||
|
// EGL performance is extremely poor and just barely hits 1080p60 on Bookworm. This also
|
||||||
|
// covers the MMAL H.264 case which maxes out at 1080p60 too.
|
||||||
|
if (!m_SupportsDirectRendering &&
|
||||||
|
(strcmp(m_Version->name, "vc4") == 0 || strcmp(m_Version->name, "v3d") == 0) &&
|
||||||
|
qgetenv("RPI_ALLOW_EGL_4K") != "1") {
|
||||||
|
drmDevicePtr device;
|
||||||
|
|
||||||
|
if (drmGetDevice(m_DrmFd, &device) == 0) {
|
||||||
|
if (device->bustype == DRM_BUS_PLATFORM) {
|
||||||
|
for (int i = 0; device->deviceinfo.platform->compatible[i]; i++) {
|
||||||
|
QString compatibleId(device->deviceinfo.platform->compatible[i]);
|
||||||
|
if (compatibleId == "brcm,bcm2835-vc4" || compatibleId == "brcm,bcm2711-vc5" || compatibleId == "brcm,2711-v3d") {
|
||||||
|
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
|
"Streaming resolution is limited to 1080p on the Pi 4 inside the desktop environment!");
|
||||||
|
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
|
"Run Moonlight directly from the console to stream above 1080p resolution!");
|
||||||
|
attributes |= RENDERER_ATTRIBUTE_1080P_MAX;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
drmFreeDevice(&device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return attributes;
|
return attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1210,39 +1239,22 @@ bool DrmRenderer::canExportEGL() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAL
|
||||||
// EGL rendering is so slow on the Raspberry Pi 4 that we should basically
|
// EGL rendering is so slow on the Raspberry Pi 4 that we should basically
|
||||||
// never use it. It is suitable for 1080p 30 FPS on a good day, and much
|
// never use it. It is suitable for 1080p 30 FPS on a good day, and much
|
||||||
// much less than that if you decide to do something crazy like stream
|
// much less than that if you decide to do something crazy like stream
|
||||||
// in full-screen. It's nice that it at least works now on Bullseye, but
|
// in full-screen. MMAL is the ideal rendering API for Buster and Bullseye,
|
||||||
// it's so slow that we actually wish it didn't.
|
// but it's gone in Bookworm. Fortunately, Bookworm has a more efficient
|
||||||
if ((strcmp(m_Version->name, "vc4") == 0 || strcmp(m_Version->name, "v3d") == 0) && qgetenv("RPI_ALLOW_EGL_RENDER") != "1") {
|
// rendering pipeline that makes EGL mostly usable as long as we stick
|
||||||
drmDevicePtr device;
|
// to a 1080p 60 FPS maximum.
|
||||||
bool matchedBadDevice = false;
|
if (qgetenv("RPI_ALLOW_EGL_RENDER") != "1") {
|
||||||
|
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
if (drmGetDevice(m_DrmFd, &device) == 0) {
|
"Disabling EGL rendering due to low performance on Raspberry Pi 4");
|
||||||
if (device->bustype == DRM_BUS_PLATFORM) {
|
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
for (int i = 0; device->deviceinfo.platform->compatible[i]; i++) {
|
"Set RPI_ALLOW_EGL_RENDER=1 to override");
|
||||||
QString compatibleId(device->deviceinfo.platform->compatible[i]);
|
return false;
|
||||||
if (compatibleId == "brcm,bcm2835-vc4" || compatibleId == "brcm,bcm2711-vc5" || compatibleId == "brcm,2711-v3d") {
|
|
||||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
|
||||||
"Disabling EGL rendering due to low performance on %s",
|
|
||||||
device->deviceinfo.platform->compatible[i]);
|
|
||||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
|
||||||
"Set RPI_ALLOW_EGL_RENDER=1 to override");
|
|
||||||
|
|
||||||
matchedBadDevice = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
drmFreeDevice(&device);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matchedBadDevice) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
"DRM backend supports exporting EGLImage");
|
"DRM backend supports exporting EGLImage");
|
||||||
|
|
Loading…
Reference in a new issue