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