@@ -98,7 +98,13 @@ g.test('call_after_successful_finish')
98
98
. desc ( `Test that encoding command after a successful finish generates a validation error.` )
99
99
. params ( u =>
100
100
u
101
- . combine ( 'callCmd' , [ 'beginComputePass' , 'beginRenderPass' , 'insertDebugMarker' ] )
101
+ . combine ( 'callCmd' , [
102
+ 'beginComputePass' ,
103
+ 'beginRenderPass' ,
104
+ 'finishAndSubmitFirst' ,
105
+ 'finishAndSubmitSecond' ,
106
+ 'insertDebugMarker' ,
107
+ ] )
102
108
. beginSubcases ( )
103
109
. combine ( 'prePassType' , [ 'compute' , 'render' , 'no-op' ] )
104
110
. combine ( 'IsEncoderFinished' , [ false , true ] )
@@ -115,8 +121,9 @@ g.test('call_after_successful_finish')
115
121
pass . end ( ) ;
116
122
}
117
123
124
+ let buffer ;
118
125
if ( IsEncoderFinished ) {
119
- encoder . finish ( ) ;
126
+ buffer = encoder . finish ( ) ;
120
127
}
121
128
122
129
switch ( callCmd ) {
@@ -129,6 +136,9 @@ g.test('call_after_successful_finish')
129
136
t . expectValidationError ( ( ) => {
130
137
pass . end ( ) ;
131
138
} , IsEncoderFinished ) ;
139
+ if ( buffer ) {
140
+ t . device . queue . submit ( [ buffer ] ) ;
141
+ }
132
142
}
133
143
break ;
134
144
case 'beginRenderPass' :
@@ -140,16 +150,41 @@ g.test('call_after_successful_finish')
140
150
t . expectValidationError ( ( ) => {
141
151
pass . end ( ) ;
142
152
} , IsEncoderFinished ) ;
153
+ if ( buffer ) {
154
+ t . device . queue . submit ( [ buffer ] ) ;
155
+ }
156
+ }
157
+ break ;
158
+ case 'finishAndSubmitFirst' :
159
+ t . expectValidationError ( ( ) => {
160
+ encoder . finish ( ) ;
161
+ } , IsEncoderFinished ) ;
162
+ if ( buffer ) {
163
+ t . device . queue . submit ( [ buffer ] ) ;
164
+ }
165
+ break ;
166
+ case 'finishAndSubmitSecond' :
167
+ {
168
+ let secondBuffer : GPUCommandBuffer ;
169
+ t . expectValidationError ( ( ) => {
170
+ secondBuffer = encoder . finish ( ) ;
171
+ } , IsEncoderFinished ) ;
172
+ t . expectValidationError ( ( ) => {
173
+ t . device . queue . submit ( [ secondBuffer ] ) ;
174
+ } , IsEncoderFinished ) ;
143
175
}
144
176
break ;
145
177
case 'insertDebugMarker' :
146
178
t . expectValidationError ( ( ) => {
147
179
encoder . insertDebugMarker ( '' ) ;
148
180
} , IsEncoderFinished ) ;
181
+ if ( buffer ) {
182
+ t . device . queue . submit ( [ buffer ] ) ;
183
+ }
149
184
break ;
150
185
}
151
186
152
- if ( ! IsEncoderFinished ) {
187
+ if ( ! IsEncoderFinished && ! callCmd . startsWith ( "finish" ) ) {
153
188
encoder . finish ( ) ;
154
189
}
155
190
} ) ;
0 commit comments