@@ -1244,7 +1244,8 @@ var LibraryWebGPU = {
1244
1244
return WebGPU . mgrRenderBundleEncoder . create ( device . createRenderBundleEncoder ( desc ) ) ;
1245
1245
} ,
1246
1246
1247
- wgpuDeviceCreateComputePipeline : ( deviceId , descriptor ) = > {
1247
+ $generateComputePipelineDesc__internal : true ,
1248
+ $generateComputePipelineDesc : ( descriptor ) = > {
1248
1249
{ { { gpu . makeCheckDescriptor ( 'descriptor' ) } } }
1249
1250
1250
1251
var desc = {
@@ -1256,13 +1257,42 @@ var LibraryWebGPU = {
1256
1257
} ;
1257
1258
var labelPtr = { { { makeGetValue ( 'descriptor' , C_STRUCTS . WGPUComputePipelineDescriptor . label , '*' ) } } } ;
1258
1259
if ( labelPtr ) desc [ "label" ] = UTF8ToString ( labelPtr ) ;
1260
+ return desc ;
1261
+ } ,
1259
1262
1263
+ wgpuDeviceCreateComputePipeline__deps : [ '$generateComputePipelineDesc' ] ,
1264
+ wgpuDeviceCreateComputePipeline : ( deviceId , descriptor ) => {
1265
+ var desc = generateComputePipelineDesc ( descriptor ) ;
1260
1266
var device = WebGPU . mgrDevice . get ( deviceId ) ;
1261
1267
return WebGPU . mgrComputePipeline . create ( device . createComputePipeline ( desc ) ) ;
1262
1268
} ,
1263
1269
1270
+ wgpuDeviceCreateComputePipelineAsync__deps : [ '$callUserCallback' , '$stringToUTF8OnStack' , '$generateComputePipelineDesc' ] ,
1264
1271
wgpuDeviceCreateComputePipelineAsync : ( deviceId , descriptor , callback , userdata ) => {
1265
- abort ( 'TODO: wgpuDeviceCreateComputePipelineAsync unimplemented' ) ;
1272
+ var desc = generateComputePipelineDesc ( descriptor ) ;
1273
+ var device = WebGPU . mgrDevice . get ( deviceId ) ;
1274
+ { { { runtimeKeepalivePush ( ) } } }
1275
+ device . createComputePipelineAsync ( desc ) . then ( ( pipeline ) => {
1276
+ { { { runtimeKeepalivePop ( ) } } }
1277
+ callUserCallback ( ( ) => {
1278
+ var pipelineId = WebGPU . mgrComputePipeline . create ( pipeline ) ;
1279
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . Success } } } , pipelineId, 0 , userdata) ;
1280
+ } ) ;
1281
+ } , ( pipelineError ) => {
1282
+ { { { runtimeKeepalivePop ( ) } } }
1283
+ callUserCallback ( ( ) => {
1284
+ var sp = stackSave ( ) ;
1285
+ var messagePtr = stringToUTF8OnStack ( pipelineError . message ) ;
1286
+ if ( pipelineError . reason === 'validation' ) {
1287
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . ValidationError } } } , 0 , messagePtr, userdata) ;
1288
+ } else if ( pipelineError . reason === 'internal' ) {
1289
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . InternalError } } } , 0 , messagePtr, userdata) ;
1290
+ } else {
1291
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . Unknown } } } , 0 , messagePtr, userdata) ;
1292
+ }
1293
+ stackRestore ( sp ) ;
1294
+ } ) ;
1295
+ } ) ;
1266
1296
} ,
1267
1297
1268
1298
$generateRenderPipelineDesc__internal : true ,
0 commit comments