@@ -328,6 +328,7 @@ pub struct RutabagaVirtioGpu {
328
328
pub ( crate ) resources : BTreeMap < u32 , VirtioGpuResource > ,
329
329
pub ( crate ) fence_state : Arc < Mutex < FenceState > > ,
330
330
pub ( crate ) scanouts : [ Option < VirtioGpuScanout > ; VIRTIO_GPU_MAX_SCANOUTS as usize ] ,
331
+ pub ( crate ) component_type : RutabagaComponentType ,
331
332
}
332
333
333
334
const READ_RESOURCE_BYTES_PER_PIXEL : u32 = 4 ;
@@ -385,27 +386,33 @@ impl RutabagaVirtioGpu {
385
386
} )
386
387
}
387
388
388
- fn configure_rutabaga_builder ( gpu_config : & GpuConfig ) -> RutabagaBuilder {
389
+ fn configure_rutabaga_builder (
390
+ gpu_config : & GpuConfig ,
391
+ ) -> ( RutabagaBuilder , RutabagaComponentType ) {
389
392
let component = match gpu_config. gpu_mode ( ) {
390
393
GpuMode :: VirglRenderer => RutabagaComponentType :: VirglRenderer ,
391
394
#[ cfg( feature = "gfxstream" ) ]
392
395
GpuMode :: Gfxstream => RutabagaComponentType :: Gfxstream ,
393
396
} ;
394
397
395
- RutabagaBuilder :: new ( component, gpu_config. capsets ( ) . bits ( ) )
398
+ let builder = RutabagaBuilder :: new ( component, gpu_config. capsets ( ) . bits ( ) )
396
399
. set_use_egl ( gpu_config. flags ( ) . use_egl )
397
400
. set_use_glx ( gpu_config. flags ( ) . use_glx )
398
401
. set_use_gles ( gpu_config. flags ( ) . use_gles )
399
402
. set_use_surfaceless ( gpu_config. flags ( ) . use_surfaceless )
400
403
// Since vhost-user-gpu is out-of-process this is the only type of blob resource that
401
404
// could work, so this is always enabled
402
- . set_use_external_blob ( true )
405
+ . set_use_external_blob ( true ) ;
406
+
407
+ ( builder, component)
403
408
}
404
409
405
410
pub fn new ( queue_ctl : & VringRwLock , gpu_config : & GpuConfig , gpu_backend : GpuBackend ) -> Self {
406
411
let fence_state = Arc :: new ( Mutex :: new ( FenceState :: default ( ) ) ) ;
407
412
let fence = Self :: create_fence_handler ( queue_ctl. clone ( ) , fence_state. clone ( ) ) ;
408
- let rutabaga = Self :: configure_rutabaga_builder ( gpu_config)
413
+ let ( builder, component_type) = Self :: configure_rutabaga_builder ( gpu_config) ;
414
+
415
+ let rutabaga = builder
409
416
. build ( fence, None )
410
417
. expect ( "Rutabaga initialization failed!" ) ;
411
418
@@ -415,6 +422,7 @@ impl RutabagaVirtioGpu {
415
422
resources : BTreeMap :: default ( ) ,
416
423
fence_state,
417
424
scanouts : Default :: default ( ) ,
425
+ component_type,
418
426
}
419
427
}
420
428
@@ -941,21 +949,31 @@ mod tests {
941
949
GpuBackend :: from_stream ( backend)
942
950
}
943
951
944
- fn new_gpu ( ) -> RutabagaVirtioGpu {
945
- let config = GpuConfig :: new (
946
- GpuMode :: VirglRenderer ,
947
- Some ( GpuCapset :: VIRGL | GpuCapset :: VIRGL2 ) ,
948
- GpuFlags :: default ( ) ,
949
- )
950
- . unwrap ( ) ;
951
- let builder = RutabagaVirtioGpu :: configure_rutabaga_builder ( & config) ;
952
+ fn new_gpu ( component_type : RutabagaComponentType ) -> RutabagaVirtioGpu {
953
+ let ( gpu_mode, capsets) = match component_type {
954
+ RutabagaComponentType :: VirglRenderer => (
955
+ GpuMode :: VirglRenderer ,
956
+ Some ( GpuCapset :: VIRGL | GpuCapset :: VIRGL2 ) ,
957
+ ) ,
958
+ #[ cfg( feature = "gfxstream" ) ]
959
+ RutabagaComponentType :: Gfxstream => {
960
+ ( GpuMode :: Gfxstream , Some ( GpuCapset :: GFXSTREAM_GLES ) )
961
+ }
962
+ _ => panic ! ( "Unsupported component type for test" ) ,
963
+ } ;
964
+
965
+ let config = GpuConfig :: new ( gpu_mode, capsets, GpuFlags :: default ( ) ) . unwrap ( ) ;
966
+
967
+ let ( builder, actual_component_type) =
968
+ RutabagaVirtioGpu :: configure_rutabaga_builder ( & config) ;
952
969
let rutabaga = builder. build ( RutabagaHandler :: new ( |_| { } ) , None ) . unwrap ( ) ;
953
970
RutabagaVirtioGpu {
954
971
rutabaga,
955
972
gpu_backend : dummy_gpu_backend ( ) ,
956
973
resources : BTreeMap :: default ( ) ,
957
974
fence_state : Arc :: new ( Mutex :: new ( FenceState :: default ( ) ) ) ,
958
975
scanouts : Default :: default ( ) ,
976
+ component_type : actual_component_type,
959
977
}
960
978
}
961
979
@@ -999,7 +1017,7 @@ mod tests {
999
1017
rusty_fork_test ! {
1000
1018
#[ test]
1001
1019
fn test_update_cursor_fails( ) {
1002
- let mut virtio_gpu = new_gpu( ) ;
1020
+ let mut virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1003
1021
1004
1022
let cursor_pos = VhostUserGpuCursorPos {
1005
1023
scanout_id: 1 ,
@@ -1033,7 +1051,7 @@ mod tests {
1033
1051
1034
1052
#[ test]
1035
1053
fn test_move_cursor_fails( ) {
1036
- let mut virtio_gpu = new_gpu( ) ;
1054
+ let mut virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1037
1055
let cursor_pos = VhostUserGpuCursorPos {
1038
1056
scanout_id: 1 ,
1039
1057
x: 123 ,
@@ -1051,7 +1069,7 @@ mod tests {
1051
1069
1052
1070
#[ test]
1053
1071
fn test_process_fence( ) {
1054
- let mut virtio_gpu = new_gpu( ) ;
1072
+ let mut virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1055
1073
let fence = RutabagaFence {
1056
1074
flags: 0 ,
1057
1075
fence_id: 0 ,
@@ -1076,13 +1094,13 @@ mod tests {
1076
1094
1077
1095
#[ test]
1078
1096
fn test_event_poll( ) {
1079
- let virtio_gpu = new_gpu( ) ;
1097
+ let virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1080
1098
virtio_gpu. event_poll( ) ;
1081
1099
}
1082
1100
1083
1101
#[ test]
1084
1102
fn test_create_and_unref_resources( ) {
1085
- let mut virtio_gpu = new_gpu( ) ;
1103
+ let mut virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1086
1104
1087
1105
// No resources exists, cannot unref anything:
1088
1106
assert!( virtio_gpu. resources. is_empty( ) ) ;
@@ -1102,7 +1120,7 @@ mod tests {
1102
1120
1103
1121
#[ test]
1104
1122
fn test_gpu_capset( ) {
1105
- let virtio_gpu = new_gpu( ) ;
1123
+ let virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1106
1124
1107
1125
let capset_info = virtio_gpu. get_capset_info( 0 ) ;
1108
1126
assert_matches!( capset_info, Ok ( OkCapsetInfo { .. } ) ) ;
@@ -1117,7 +1135,7 @@ mod tests {
1117
1135
1118
1136
#[ test]
1119
1137
fn test_gpu_submit_command_fails( ) {
1120
- let mut virtio_gpu = new_gpu( ) ;
1138
+ let mut virtio_gpu = new_gpu( RutabagaComponentType :: VirglRenderer ) ;
1121
1139
let mut cmd_buf = [ 0 ; 10 ] ;
1122
1140
let fence_ids: Vec <u64 > = Vec :: with_capacity( 0 ) ;
1123
1141
virtio_gpu
0 commit comments