mirror of
https://github.com/hyprwm/Hyprland.git
synced 2024-12-01 18:55:02 +03:00
update wlroots dep
This commit is contained in:
parent
fe007fd36a
commit
a34b747661
@ -746,48 +746,20 @@ void CHyprRenderer::setWindowScanoutMode(CWindow* pWindow) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto RENDERERDRMFD = wlr_renderer_get_drm_fd(g_pCompositor->m_sWLRRenderer);
|
||||
const auto BACKENDDRMFD = wlr_backend_get_drm_fd(g_pCompositor->m_sWLRBackend);
|
||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||
|
||||
if (RENDERERDRMFD < 0 || BACKENDDRMFD < 0)
|
||||
return;
|
||||
|
||||
auto deviceIDFromFD = [](int fd, unsigned long* deviceID) -> bool {
|
||||
struct stat stat;
|
||||
if (fstat(fd, &stat) != 0) {
|
||||
return false;
|
||||
}
|
||||
*deviceID = stat.st_rdev;
|
||||
return true;
|
||||
const wlr_linux_dmabuf_feedback_v1_init_options INIT_OPTIONS = {
|
||||
.main_renderer = g_pCompositor->m_sWLRRenderer,
|
||||
.scanout_primary_output = PMONITOR->output,
|
||||
};
|
||||
|
||||
unsigned long rendererDevice, scanoutDevice;
|
||||
if (!deviceIDFromFD(RENDERERDRMFD, &rendererDevice) || !deviceIDFromFD(BACKENDDRMFD, &scanoutDevice))
|
||||
wlr_linux_dmabuf_feedback_v1 feedback = {0};
|
||||
|
||||
if (!wlr_linux_dmabuf_feedback_v1_init_with_options(&feedback, &INIT_OPTIONS))
|
||||
return;
|
||||
|
||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||
|
||||
const auto POUTPUTFORMATS = wlr_output_get_primary_formats(PMONITOR->output, WLR_BUFFER_CAP_DMABUF);
|
||||
if (!POUTPUTFORMATS)
|
||||
return;
|
||||
|
||||
const auto PRENDERERFORMATS = wlr_renderer_get_dmabuf_texture_formats(g_pCompositor->m_sWLRRenderer);
|
||||
wlr_drm_format_set scanoutFormats = {0};
|
||||
|
||||
if (!wlr_drm_format_set_intersect(&scanoutFormats, POUTPUTFORMATS, PRENDERERFORMATS))
|
||||
return;
|
||||
|
||||
const wlr_linux_dmabuf_feedback_v1_tranche TRANCHES[] = {
|
||||
{.target_device = scanoutDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, .formats = &scanoutFormats},
|
||||
{.target_device = rendererDevice, .formats = PRENDERERFORMATS}};
|
||||
|
||||
const wlr_linux_dmabuf_feedback_v1 FEEDBACK = {.main_device = rendererDevice, .tranches_len = sizeof(TRANCHES) / sizeof(TRANCHES[0]), .tranches = TRANCHES};
|
||||
|
||||
if (!wlr_linux_dmabuf_v1_set_surface_feedback(g_pCompositor->m_sWLRLinuxDMABuf, g_pXWaylandManager->getWindowSurface(pWindow), &FEEDBACK)) {
|
||||
Debug::log(ERR, "Error in scanout mode setting: wlr_linux_dmabuf_v1_set_surface_feedback returned false.");
|
||||
}
|
||||
|
||||
wlr_drm_format_set_finish(&scanoutFormats);
|
||||
wlr_linux_dmabuf_v1_set_surface_feedback(g_pCompositor->m_sWLRLinuxDMABuf, g_pXWaylandManager->getWindowSurface(pWindow), &feedback);
|
||||
wlr_linux_dmabuf_feedback_v1_finish(&feedback);
|
||||
|
||||
Debug::log(LOG, "Scanout mode ON set for %x", pWindow);
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 677a3f2f8847ed2de49dd60868f9d9487a546f58
|
||||
Subproject commit 5ae17de23f5fd9bb252a698f3771c840280e2c05
|
Loading…
Reference in New Issue
Block a user