kms: Fix shaders for offscreen rendering

This commit is contained in:
Victoria Brekenfeld 2024-06-10 14:59:30 +02:00 • committed by Victoria Brekenfeld
parent 952f73dcc4
commit 800e01a484

View file

@ -36,6 +36,7 @@ use smithay::{
use tracing::{error, info, trace, warn}; use tracing::{error, info, trace, warn};
use std::{ use std::{
borrow::BorrowMut,
collections::{HashMap, HashSet}, collections::{HashMap, HashSet},
path::Path, path::Path,
sync::{Arc, Condvar, Mutex, RwLock}, sync::{Arc, Condvar, Mutex, RwLock},
@ -50,6 +51,8 @@ mod surface;
use device::*; use device::*;
pub use surface::Timings; pub use surface::Timings;
use super::render::init_shaders;
#[derive(Debug)] #[derive(Debug)]
pub struct KmsState { pub struct KmsState {
pub drm_devices: HashMap<DrmNode, Device>, pub drm_devices: HashMap<DrmNode, Device>,
@ -386,14 +389,7 @@ impl KmsState {
if device.in_use(self.primary_node.as_ref()) { if device.in_use(self.primary_node.as_ref()) {
if device.egl.is_none() { if device.egl.is_none() {
let egl = init_egl(&device.gbm).context("Failed to create EGL context")?; let egl = init_egl(&device.gbm).context("Failed to create EGL context")?;
self.api.as_mut().add_node( let mut renderer = unsafe {
device.render_node,
GbmAllocator::new(
device.gbm.clone(),
// SCANOUT because stride bugs
GbmBufferFlags::RENDERING | GbmBufferFlags::SCANOUT,
),
unsafe {
GlowRenderer::new( GlowRenderer::new(
EGLContext::new_shared_with_priority( EGLContext::new_shared_with_priority(
&egl.display, &egl.display,
@ -403,7 +399,16 @@ impl KmsState {
.context("Failed to create shared EGL context")?, .context("Failed to create shared EGL context")?,
) )
.context("Failed to create GL renderer")? .context("Failed to create GL renderer")?
}, };
init_shaders(renderer.borrow_mut()).context("Failed to compile shaders")?;
self.api.as_mut().add_node(
device.render_node,
GbmAllocator::new(
device.gbm.clone(),
// SCANOUT because stride bugs
GbmBufferFlags::RENDERING | GbmBufferFlags::SCANOUT,
),
renderer,
); );
device.egl = Some(egl); device.egl = Some(egl);
} }