mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-10-25 21:39:48 +00:00
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>
This commit is contained in:
parent
4cbaeb7eaa
commit
ba7c6035f8
2 changed files with 10 additions and 4 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -466,7 +466,7 @@ impl Renderer {
|
|||
/// Imports a resource from an EGLImage.
|
||||
pub fn import_resource(&self,
|
||||
mut args: virgl_renderer_resource_create_args,
|
||||
image: Image)
|
||||
image: &Image)
|
||||
-> Result<Resource> {
|
||||
let ret = unsafe { virgl_renderer_resource_import_eglimage(&mut args, image.image) };
|
||||
ret_to_res(ret)?;
|
||||
|
|
Loading…
Reference in a new issue