@@ -94,6 +94,14 @@ wgpu${type}Release: (id) => WebGPU.mgr${type}.release(id),`;
94
94
OffsetOutOfRange : 7 ,
95
95
SizeOutOfRange : 8 ,
96
96
} ,
97
+ CreatePipelineAsyncStatus : {
98
+ Success : 0 ,
99
+ ValidationError : 1 ,
100
+ InternalError : 2 ,
101
+ DeviceLost : 3 ,
102
+ DeviceDestroyed : 4 ,
103
+ Unknown : 5 ,
104
+ } ,
97
105
ErrorType : {
98
106
NoError : 0 ,
99
107
Validation : 1 ,
@@ -1180,9 +1188,9 @@ var LibraryWebGPU = {
1180
1188
abort ( 'TODO: wgpuDeviceCreateComputePipelineAsync unimplemented' ) ;
1181
1189
} ,
1182
1190
1183
- wgpuDeviceCreateRenderPipeline : ( deviceId , descriptor ) = > {
1191
+ $generateRenderPipelineDesc__internal : true ,
1192
+ $generateRenderPipelineDesc : ( descriptor ) = > {
1184
1193
{ { { gpu . makeCheckDescriptor ( 'descriptor' ) } } }
1185
-
1186
1194
function makePrimitiveState ( rsPtr ) {
1187
1195
if ( ! rsPtr ) return undefined ;
1188
1196
{ { { gpu . makeCheckDescriptor ( 'rsPtr' ) } } }
@@ -1372,13 +1380,42 @@ var LibraryWebGPU = {
1372
1380
} ;
1373
1381
var labelPtr = { { { makeGetValue ( 'descriptor' , C_STRUCTS . WGPURenderPipelineDescriptor . label , '*' ) } } } ;
1374
1382
if ( labelPtr ) desc [ "label" ] = UTF8ToString ( labelPtr ) ;
1383
+ return desc ;
1384
+ } ,
1375
1385
1386
+ wgpuDeviceCreateRenderPipeline__deps : [ '$generateRenderPipelineDesc' ] ,
1387
+ wgpuDeviceCreateRenderPipeline : ( deviceId , descriptor ) = > {
1388
+ var desc = generateRenderPipelineDesc ( descriptor ) ;
1376
1389
var device = WebGPU . mgrDevice . get ( deviceId ) ;
1377
1390
return WebGPU . mgrRenderPipeline . create ( device [ "createRenderPipeline" ] ( desc ) ) ;
1378
1391
} ,
1379
1392
1393
+ wgpuDeviceCreateRenderPipelineAsync__deps : [ '$callUserCallback' , '$stringToUTF8OnStack' , '$generateRenderPipelineDesc' ] ,
1380
1394
wgpuDeviceCreateRenderPipelineAsync : ( deviceId , descriptor , callback , userdata ) = > {
1381
- abort ( 'TODO: wgpuDeviceCreateRenderPipelineAsync unimplemented' ) ;
1395
+ var desc = generateRenderPipelineDesc ( descriptor ) ;
1396
+ var device = WebGPU . mgrDevice . get ( deviceId ) ;
1397
+ { { { runtimeKeepalivePush ( ) } } }
1398
+ device [ "createRenderPipelineAsync" ] ( desc ) . then ( ( pipeline ) => {
1399
+ { { { runtimeKeepalivePop ( ) } } }
1400
+ callUserCallback ( ( ) => {
1401
+ var pipelineId = WebGPU . mgrRenderPipeline . create ( pipeline ) ;
1402
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . Success } } } , pipelineId, 0 , userdata) ;
1403
+ } ) ;
1404
+ } , ( pipelineError ) => {
1405
+ { { { runtimeKeepalivePop ( ) } } }
1406
+ callUserCallback ( ( ) => {
1407
+ withStackSave ( ( ) => {
1408
+ var messagePtr = stringToUTF8OnStack ( pipelineError . message ) ;
1409
+ if ( pipelineError . reason === 'validation' ) {
1410
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . ValidationError } } } , 0 , messagePtr, userdata) ;
1411
+ } else if ( pipelineError . reason === 'internal' ) {
1412
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . InternalError } } } , 0 , messagePtr, userdata) ;
1413
+ } else {
1414
+ { { { makeDynCall ( 'vippp' , 'callback' ) } } } ( { { { gpu . CreatePipelineAsyncStatus . Unknown } } } , 0 , messagePtr, userdata) ;
1415
+ }
1416
+ } ) ;
1417
+ } ) ;
1418
+ } ) ;
1382
1419
} ,
1383
1420
1384
1421
wgpuDeviceCreateShaderModule : ( deviceId , descriptor ) => {
0 commit comments