@@ -4,7 +4,8 @@ use wgpu_test::{
44
55pub fn all_tests ( vec : & mut Vec < GpuTestInitializer > ) {
66 vec. extend ( [
7- EMPTY_BUFFER ,
7+ EMPTY_BUFFER_READ ,
8+ EMPTY_BUFFER_READ_WRITE ,
89 MAP_OFFSET ,
910 MAP_WITHOUT_SUBMIT ,
1011 MINIMUM_BUFFER_BINDING_SIZE_LAYOUT ,
@@ -14,19 +15,72 @@ pub fn all_tests(vec: &mut Vec<GpuTestInitializer>) {
1415 ] ) ;
1516}
1617
17- async fn test_empty_buffer_range ( ctx : & TestingContext , buffer_size : u64 , label : & str ) {
18- let r = wgpu:: BufferUsages :: MAP_READ ;
19- let rw = wgpu:: BufferUsages :: MAP_READ | wgpu:: BufferUsages :: MAP_WRITE ;
20- for usage in [ r, rw] {
21- let b0 = ctx. device . create_buffer ( & wgpu:: BufferDescriptor {
22- label : Some ( label) ,
23- size : buffer_size,
24- usage,
25- mapped_at_creation : false ,
18+ async fn test_empty_buffer_range_with_usage (
19+ ctx : & TestingContext ,
20+ buffer_size : u64 ,
21+ label : & str ,
22+ usage : wgpu:: BufferUsages ,
23+ ) {
24+ let b0 = ctx. device . create_buffer ( & wgpu:: BufferDescriptor {
25+ label : Some ( label) ,
26+ size : buffer_size,
27+ usage,
28+ mapped_at_creation : false ,
29+ } ) ;
30+
31+ b0. slice ( 0 ..0 )
32+ . map_async ( wgpu:: MapMode :: Read , Result :: unwrap) ;
33+
34+ ctx. async_poll ( wgpu:: PollType :: wait_indefinitely ( ) )
35+ . await
36+ . unwrap ( ) ;
37+
38+ {
39+ let view = b0. slice ( 0 ..0 ) . get_mapped_range ( ) . unwrap ( ) ;
40+ assert ! ( view. is_empty( ) ) ;
41+ }
42+
43+ b0. unmap ( ) ;
44+
45+ // Map and unmap right away.
46+ b0. slice ( 0 ..0 ) . map_async ( wgpu:: MapMode :: Read , move |_| { } ) ;
47+ b0. unmap ( ) ;
48+
49+ // Map multiple times before unmapping.
50+ b0. slice ( 0 ..0 ) . map_async ( wgpu:: MapMode :: Read , move |_| { } ) ;
51+ b0. slice ( 0 ..0 )
52+ . map_async ( wgpu:: MapMode :: Read , move |result| {
53+ assert ! ( result. is_err( ) ) ;
54+ } ) ;
55+ b0. slice ( 0 ..0 )
56+ . map_async ( wgpu:: MapMode :: Read , move |result| {
57+ assert ! ( result. is_err( ) ) ;
58+ } ) ;
59+ b0. slice ( 0 ..0 )
60+ . map_async ( wgpu:: MapMode :: Read , move |result| {
61+ assert ! ( result. is_err( ) ) ;
2662 } ) ;
63+ b0. unmap ( ) ;
64+
65+ // Ensure mapping errors didn't break it permanently.
66+ b0. slice ( 0 ..0 )
67+ . map_async ( wgpu:: MapMode :: Read , Result :: unwrap) ;
68+
69+ ctx. async_poll ( wgpu:: PollType :: wait_indefinitely ( ) )
70+ . await
71+ . unwrap ( ) ;
72+
73+ {
74+ let view = b0. slice ( 0 ..0 ) . get_mapped_range ( ) . unwrap ( ) ;
75+ assert ! ( view. is_empty( ) ) ;
76+ }
77+
78+ b0. unmap ( ) ;
2779
80+ // Write mode.
81+ if usage. contains ( wgpu:: BufferUsages :: MAP_WRITE ) {
2882 b0. slice ( 0 ..0 )
29- . map_async ( wgpu:: MapMode :: Read , Result :: unwrap) ;
83+ . map_async ( wgpu:: MapMode :: Write , Result :: unwrap) ;
3084
3185 ctx. async_poll ( wgpu:: PollType :: wait_indefinitely ( ) )
3286 . await
@@ -37,60 +91,35 @@ async fn test_empty_buffer_range(ctx: &TestingContext, buffer_size: u64, label:
3791 assert ! ( view. is_empty( ) ) ;
3892 }
3993
40- b0. unmap ( ) ;
94+ {
95+ let view = b0. slice ( 0 ..0 ) . get_mapped_range_mut ( ) . unwrap ( ) ;
96+ assert ! ( view. is_empty( ) ) ;
97+ }
4198
42- // Map and unmap right away.
43- b0. slice ( 0 ..0 ) . map_async ( wgpu:: MapMode :: Read , move |_| { } ) ;
4499 b0. unmap ( ) ;
45100
46- // Map multiple times before unmapping.
47- b0. slice ( 0 ..0 ) . map_async ( wgpu:: MapMode :: Read , move |_| { } ) ;
48- b0. slice ( 0 ..0 )
49- . map_async ( wgpu:: MapMode :: Read , move |result| {
50- assert ! ( result. is_err( ) ) ;
51- } ) ;
52- b0. slice ( 0 ..0 )
53- . map_async ( wgpu:: MapMode :: Read , move |result| {
54- assert ! ( result. is_err( ) ) ;
55- } ) ;
101+ // Map and unmap right away.
56102 b0. slice ( 0 ..0 )
57- . map_async ( wgpu:: MapMode :: Read , move |result| {
58- assert ! ( result. is_err( ) ) ;
59- } ) ;
103+ . map_async ( wgpu:: MapMode :: Write , Result :: unwrap) ;
60104 b0. unmap ( ) ;
61-
62- // Write mode.
63- if usage == rw {
64- b0. slice ( 0 ..0 )
65- . map_async ( wgpu:: MapMode :: Write , Result :: unwrap) ;
66-
67- ctx. async_poll ( wgpu:: PollType :: wait_indefinitely ( ) )
68- . await
69- . unwrap ( ) ;
70-
71- //{
72- // let view = b0.slice(0..0).get_mapped_range_mut();
73- // assert!(view.is_empty());
74- //}
75-
76- b0. unmap ( ) ;
77-
78- // Map and unmap right away.
79- b0. slice ( 0 ..0 ) . map_async ( wgpu:: MapMode :: Write , move |_| { } ) ;
80- b0. unmap ( ) ;
81- }
82105 }
83106
107+ // Test buffer mapped at creation.
84108 let b1 = ctx. device . create_buffer ( & wgpu:: BufferDescriptor {
85109 label : Some ( label) ,
86110 size : buffer_size,
87- usage : rw ,
111+ usage,
88112 mapped_at_creation : true ,
89113 } ) ;
90114
91115 {
116+ let view = b1. slice ( 0 ..0 ) . get_mapped_range ( ) . unwrap ( ) ;
117+ assert ! ( view. is_empty( ) ) ;
118+ }
119+
120+ if usage. contains ( wgpu:: BufferUsages :: MAP_WRITE ) {
92121 let view = b1. slice ( 0 ..0 ) . get_mapped_range_mut ( ) . unwrap ( ) ;
93- assert_eq ! ( view. len ( ) , 0 ) ;
122+ assert ! ( view. is_empty ( ) ) ;
94123 }
95124
96125 b1. unmap ( ) ;
@@ -101,15 +130,25 @@ async fn test_empty_buffer_range(ctx: &TestingContext, buffer_size: u64, label:
101130}
102131
103132#[ gpu_test]
104- static EMPTY_BUFFER : GpuTestConfiguration = GpuTestConfiguration :: new ( )
133+ static EMPTY_BUFFER_READ : GpuTestConfiguration = GpuTestConfiguration :: new ( )
134+ . parameters ( TestParameters :: default ( ) . enable_noop ( ) )
135+ . run_async ( |ctx| async move {
136+ let usage = wgpu:: BufferUsages :: MAP_READ ;
137+ test_empty_buffer_range_with_usage ( & ctx, 2048 , "regular buffer" , usage) . await ;
138+ test_empty_buffer_range_with_usage ( & ctx, 0 , "zero-sized buffer" , usage) . await ;
139+ } ) ;
140+
141+ #[ gpu_test]
142+ static EMPTY_BUFFER_READ_WRITE : GpuTestConfiguration = GpuTestConfiguration :: new ( )
105143 . parameters (
106144 TestParameters :: default ( )
107145 . expect_fail ( FailureCase :: always ( ) )
108146 . enable_noop ( ) ,
109147 )
110148 . run_async ( |ctx| async move {
111- test_empty_buffer_range ( & ctx, 2048 , "regular buffer" ) . await ;
112- test_empty_buffer_range ( & ctx, 0 , "zero-sized buffer" ) . await ;
149+ let usage = wgpu:: BufferUsages :: MAP_READ | wgpu:: BufferUsages :: MAP_WRITE ;
150+ test_empty_buffer_range_with_usage ( & ctx, 2048 , "regular buffer" , usage) . await ;
151+ test_empty_buffer_range_with_usage ( & ctx, 0 , "zero-sized buffer" , usage) . await ;
113152 } ) ;
114153
115154#[ gpu_test]
0 commit comments