mirror of
https://github.com/Smithay/smithay.git
synced 2024-09-28 03:21:14 +02:00
drm/gbm: Don't use the legacy code path for import client dmabufs
Some checks are pending
Continuous Integration / format (push) Waiting to run
Continuous Integration / clippy-check (push) Waiting to run
Continuous Integration / check-msrv (push) Blocked by required conditions
Continuous Integration / check-minimal (push) Blocked by required conditions
Continuous Integration / smithay-check-features (push) Waiting to run
Continuous Integration / smithay-tests (push) Blocked by required conditions
Continuous Integration / smallvil-check (push) Blocked by required conditions
Continuous Integration / anvil-check-features (push) Blocked by required conditions
Continuous Integration / WLCS: Bad Buffer Test (push) Blocked by required conditions
Continuous Integration / WLCS: Core tests (push) Blocked by required conditions
Continuous Integration / WLCS: Output tests (push) Blocked by required conditions
Continuous Integration / WLCS: Pointer input tests (push) Blocked by required conditions
Continuous Integration / Documentation on Github Pages (push) Blocked by required conditions
Some checks are pending
Continuous Integration / format (push) Waiting to run
Continuous Integration / clippy-check (push) Waiting to run
Continuous Integration / check-msrv (push) Blocked by required conditions
Continuous Integration / check-minimal (push) Blocked by required conditions
Continuous Integration / smithay-check-features (push) Waiting to run
Continuous Integration / smithay-tests (push) Blocked by required conditions
Continuous Integration / smallvil-check (push) Blocked by required conditions
Continuous Integration / anvil-check-features (push) Blocked by required conditions
Continuous Integration / WLCS: Bad Buffer Test (push) Blocked by required conditions
Continuous Integration / WLCS: Core tests (push) Blocked by required conditions
Continuous Integration / WLCS: Output tests (push) Blocked by required conditions
Continuous Integration / WLCS: Pointer input tests (push) Blocked by required conditions
Continuous Integration / Documentation on Github Pages (push) Blocked by required conditions
This commit is contained in:
parent
c542d097b9
commit
c4844428f8
1 changed files with 17 additions and 2 deletions
|
@ -85,7 +85,9 @@ pub fn framebuffer_from_wayland_buffer<A: AsFd + 'static>(
|
|||
* not knowing its layout can result in garbage being displayed. In
|
||||
* short, importing a buffer to KMS requires explicit modifiers. */
|
||||
if dmabuf.format().modifier != DrmModifier::Invalid {
|
||||
return Ok(Some(framebuffer_from_dmabuf(drm, gbm, dmabuf, use_opaque)?));
|
||||
return Ok(Some(framebuffer_from_dmabuf(
|
||||
drm, gbm, dmabuf, use_opaque, false,
|
||||
)?));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,6 +108,7 @@ pub fn framebuffer_from_wayland_buffer<A: AsFd + 'static>(
|
|||
pitches: None,
|
||||
},
|
||||
use_opaque,
|
||||
true,
|
||||
)
|
||||
.map_err(Error::Drm)?;
|
||||
|
||||
|
@ -140,6 +143,7 @@ pub fn framebuffer_from_dmabuf<A: AsFd + 'static>(
|
|||
gbm: &gbm::Device<A>,
|
||||
dmabuf: &Dmabuf,
|
||||
use_opaque: bool,
|
||||
allow_legacy: bool,
|
||||
) -> Result<GbmFramebuffer, Error> {
|
||||
let bo: GbmBuffer = dmabuf
|
||||
.import_to(gbm, gbm::BufferObjectFlags::SCANOUT)
|
||||
|
@ -167,6 +171,7 @@ pub fn framebuffer_from_dmabuf<A: AsFd + 'static>(
|
|||
pitches: Some(pitches),
|
||||
},
|
||||
use_opaque,
|
||||
allow_legacy,
|
||||
)
|
||||
.map_err(Error::Drm)
|
||||
.map(|(fb, format)| GbmFramebuffer {
|
||||
|
@ -191,6 +196,7 @@ pub fn framebuffer_from_bo(
|
|||
pitches: None,
|
||||
},
|
||||
use_opaque,
|
||||
true,
|
||||
)
|
||||
.map(|(fb, format)| GbmFramebuffer {
|
||||
fb,
|
||||
|
@ -289,6 +295,7 @@ fn framebuffer_from_bo_internal<D>(
|
|||
drm: &D,
|
||||
bo: BufferObjectInternal<'_>,
|
||||
use_opaque: bool,
|
||||
allow_legacy: bool,
|
||||
) -> Result<(framebuffer::Handle, drm_fourcc::DrmFormat), AccessError>
|
||||
where
|
||||
D: drm::control::Device + DevPath,
|
||||
|
@ -326,9 +333,17 @@ where
|
|||
let (fb, format) = match ret {
|
||||
Ok(fb) => fb,
|
||||
Err(source) => {
|
||||
warn_legacy_fb_export();
|
||||
if !allow_legacy {
|
||||
return Err(AccessError {
|
||||
errmsg: "Failed to add framebuffer",
|
||||
dev: drm.dev_path(),
|
||||
source,
|
||||
});
|
||||
}
|
||||
|
||||
// We only support this as a fallback of last resort like xf86-video-modesetting does.
|
||||
warn_legacy_fb_export();
|
||||
|
||||
if bo.plane_count().unwrap() > 1 {
|
||||
return Err(AccessError {
|
||||
errmsg: "Failed to add framebuffer",
|
||||
|
|
Loading…
Reference in a new issue