diff options
author | David Riley <davidriley@chromium.org> | 2018-05-17 17:08:16 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-07-30 23:08:04 -0700 |
commit | ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68 (patch) | |
tree | 02559d7609752afbaa0231a7d9288312de4d16ab /devices/src/virtio/gpu/backend.rs | |
parent | 4cbaeb7eaa2eea6581707b337775e614718cbf55 (diff) | |
download | crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar.gz crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar.bz2 crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar.lz crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar.xz crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.tar.zst crosvm-ba7c6035f8fb4b939b9c86f58c0f3009b04ebb68.zip |
gpu: hold image with resource
Ensure eglImage is not destroyed until the referencing resource is dropped. BUG=None TEST=build with --features=gpu; null_platform_test Change-Id: I55c33344f46b08f846e094451516fcd16c9d16ae Reviewed-on: https://chromium-review.googlesource.com/1073958 Commit-Ready: David Riley <davidriley@chromium.org> Tested-by: David Riley <davidriley@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/virtio/gpu/backend.rs')
-rw-r--r-- | devices/src/virtio/gpu/backend.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/devices/src/virtio/gpu/backend.rs b/devices/src/virtio/gpu/backend.rs index 561ce74..34aada8 100644 --- a/devices/src/virtio/gpu/backend.rs +++ b/devices/src/virtio/gpu/backend.rs @@ -18,6 +18,7 @@ use sys_util::{GuestAddress, GuestMemory}; use super::gpu_buffer::{Device, Buffer, Format, Flags}; use super::gpu_display::*; use super::gpu_renderer::{Box3, Renderer, Context as RendererContext, + Image as RendererImage, Resource as GpuRendererResource, ResourceCreateArgs, format_fourcc as renderer_fourcc}; @@ -156,16 +157,19 @@ struct BackedBuffer { backing: Vec<(GuestAddress, usize)>, buffer: Buffer, gpu_renderer_resource: Option<GpuRendererResource>, + _image: Option<RendererImage>, } impl BackedBuffer { fn new_renderer_registered(buffer: Buffer, - gpu_renderer_resource: GpuRendererResource) -> BackedBuffer { + gpu_renderer_resource: GpuRendererResource, + image: RendererImage) -> BackedBuffer { BackedBuffer { display_import: None, backing: Vec::new(), buffer, gpu_renderer_resource: Some(gpu_renderer_resource), + _image: Some(image), } } } @@ -177,6 +181,7 @@ impl From<Buffer> for BackedBuffer { backing: Vec::new(), buffer, gpu_renderer_resource: None, + _image: None, } } } @@ -748,12 +753,13 @@ impl Backend { }; let res = self.renderer - .import_resource(create_args, image); + .import_resource(create_args, &image); match res { Ok(res) => { let mut backed = BackedBuffer::new_renderer_registered(buffer, - res); + res, + image); slot.insert(Box::new(backed)); GpuResponse::OkNoData } |