@@ -15,7 +15,7 @@ use volatile::{ReadOnly, Volatile, WriteOnly};
15
15
/// and multiple scanouts (aka heads).
16
16
pub struct VirtIOGpu < ' a , H : Hal , T : Transport > {
17
17
transport : T ,
18
- rect : Rect ,
18
+ rect : Option < Rect > ,
19
19
/// DMA area of frame buffer.
20
20
frame_buffer_dma : Option < DMA < H > > ,
21
21
/// DMA area of cursor image buffer.
@@ -60,7 +60,7 @@ impl<H: Hal, T: Transport> VirtIOGpu<'_, H, T> {
60
60
transport,
61
61
frame_buffer_dma : None ,
62
62
cursor_buffer_dma : None ,
63
- rect : Rect :: default ( ) ,
63
+ rect : None ,
64
64
control_queue,
65
65
cursor_queue,
66
66
queue_buf_dma,
@@ -75,16 +75,17 @@ impl<H: Hal, T: Transport> VirtIOGpu<'_, H, T> {
75
75
}
76
76
77
77
/// Get the resolution (width, height).
78
- pub fn resolution ( & self ) -> ( u32 , u32 ) {
79
- ( self . rect . width , self . rect . height )
78
+ pub fn resolution ( & mut self ) -> Result < ( u32 , u32 ) > {
79
+ let display_info = self . get_display_info ( ) ?;
80
+ Ok ( ( display_info. rect . width , display_info. rect . height ) )
80
81
}
81
82
82
83
/// Setup framebuffer
83
84
pub fn setup_framebuffer ( & mut self ) -> Result < & mut [ u8 ] > {
84
85
// get display info
85
86
let display_info = self . get_display_info ( ) ?;
86
87
info ! ( "=> {:?}" , display_info) ;
87
- self . rect = display_info. rect ;
88
+ self . rect = Some ( display_info. rect ) ;
88
89
89
90
// create resource 2d
90
91
self . resource_create_2d (
@@ -110,10 +111,11 @@ impl<H: Hal, T: Transport> VirtIOGpu<'_, H, T> {
110
111
111
112
/// Flush framebuffer to screen.
112
113
pub fn flush ( & mut self ) -> Result {
114
+ let rect = self . rect . ok_or ( Error :: NotReady ) ?;
113
115
// copy data from guest to host
114
- self . transfer_to_host_2d ( self . rect , 0 , RESOURCE_ID_FB ) ?;
116
+ self . transfer_to_host_2d ( rect, 0 , RESOURCE_ID_FB ) ?;
115
117
// flush data to screen
116
- self . resource_flush ( self . rect , RESOURCE_ID_FB ) ?;
118
+ self . resource_flush ( rect, RESOURCE_ID_FB ) ?;
117
119
Ok ( ( ) )
118
120
}
119
121
0 commit comments