@nativescript/canvas 2.0.0-webgpu.0 → 2.0.0-webgpu.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/Canvas/common.d.ts +3 -18
  2. package/Canvas/common.js +9 -72
  3. package/Canvas/common.js.map +1 -1
  4. package/Canvas/index.android.d.ts +6 -7
  5. package/Canvas/index.android.js +88 -42
  6. package/Canvas/index.android.js.map +1 -1
  7. package/Canvas/index.d.ts +7 -8
  8. package/Canvas/index.ios.d.ts +3 -2
  9. package/Canvas/index.ios.js +88 -46
  10. package/Canvas/index.ios.js.map +1 -1
  11. package/Canvas2D/CanvasRenderingContext2D/index.js +71 -72
  12. package/Canvas2D/CanvasRenderingContext2D/index.js.map +1 -1
  13. package/Canvas2D/DOMMatrix/index.js +1 -1
  14. package/Canvas2D/DOMMatrix/index.js.map +1 -1
  15. package/Canvas2D/ImageData/index.js.map +1 -1
  16. package/Canvas2D/Path2D/index.js.map +1 -1
  17. package/Dom/Dom.js +8 -1
  18. package/Dom/Dom.js.map +1 -1
  19. package/Dom/Group.js.map +1 -1
  20. package/Dom/Image.d.ts +4 -1
  21. package/Dom/Image.js +16 -2
  22. package/Dom/Image.js.map +1 -1
  23. package/Dom/Paint.js.map +1 -1
  24. package/Dom/Text.js.map +1 -1
  25. package/Dom/shaders/LinearGradient.js.map +1 -1
  26. package/Dom/shaders/TwoPointConicalGradient.js.map +1 -1
  27. package/Dom/shapes/Atlas.js.map +1 -1
  28. package/Dom/shapes/Circle.js.map +1 -1
  29. package/Dom/shapes/Line.js.map +1 -1
  30. package/Dom/shapes/Oval.js.map +1 -1
  31. package/Dom/shapes/Path.js.map +1 -1
  32. package/Dom/shapes/Rect.js.map +1 -1
  33. package/Dom/shapes/RoundedRect.js.map +1 -1
  34. package/Dom/shapes/index.js.map +1 -1
  35. package/ImageAsset/index.d.ts +3 -1
  36. package/ImageAsset/index.js +38 -6
  37. package/ImageAsset/index.js.map +1 -1
  38. package/ImageBitmap/index.js +3 -3
  39. package/ImageBitmap/index.js.map +1 -1
  40. package/README.md +64 -3
  41. package/TextDecoder/index.js +3 -3
  42. package/TextDecoder/index.js.map +1 -1
  43. package/TextEncoder/index.js +3 -3
  44. package/TextEncoder/index.js.map +1 -1
  45. package/WebGL/WebGLExtensions/index.js +5 -5
  46. package/WebGL/WebGLExtensions/index.js.map +1 -1
  47. package/WebGL/WebGLRenderingContext/common.js.map +1 -1
  48. package/WebGL/WebGLRenderingContext/index.js.map +1 -1
  49. package/WebGL2/WebGL2RenderingContext/index.js.map +1 -1
  50. package/WebGPU/Constants.js.map +1 -1
  51. package/WebGPU/GPU.js.map +1 -1
  52. package/WebGPU/GPUAdapter.js.map +1 -1
  53. package/WebGPU/GPUAdapterInfo.js.map +1 -1
  54. package/WebGPU/GPUBindGroup.js.map +1 -1
  55. package/WebGPU/GPUBindGroupLayout.js.map +1 -1
  56. package/WebGPU/GPUBuffer.js +5 -1
  57. package/WebGPU/GPUBuffer.js.map +1 -1
  58. package/WebGPU/GPUCanvasContext.d.ts +3 -1
  59. package/WebGPU/GPUCanvasContext.js +13 -4
  60. package/WebGPU/GPUCanvasContext.js.map +1 -1
  61. package/WebGPU/GPUCommandBuffer.js.map +1 -1
  62. package/WebGPU/GPUCommandEncoder.js +6 -1
  63. package/WebGPU/GPUCommandEncoder.js.map +1 -1
  64. package/WebGPU/GPUComputePassEncoder.js.map +1 -1
  65. package/WebGPU/GPUComputePipeline.js.map +1 -1
  66. package/WebGPU/GPUDevice.d.ts +2 -2
  67. package/WebGPU/GPUDevice.js +41 -65
  68. package/WebGPU/GPUDevice.js.map +1 -1
  69. package/WebGPU/GPUExternalTexture.js.map +1 -1
  70. package/WebGPU/GPUPipelineLayout.js.map +1 -1
  71. package/WebGPU/GPUQuerySet.js.map +1 -1
  72. package/WebGPU/GPUQueue.js.map +1 -1
  73. package/WebGPU/GPURenderBundle.js.map +1 -1
  74. package/WebGPU/GPURenderBundleEncoder.js.map +1 -1
  75. package/WebGPU/GPURenderPassEncoder.js +2 -2
  76. package/WebGPU/GPURenderPassEncoder.js.map +1 -1
  77. package/WebGPU/GPURenderPipeline.js.map +1 -1
  78. package/WebGPU/GPUSampler.js.map +1 -1
  79. package/WebGPU/GPUShaderModule.js.map +1 -1
  80. package/WebGPU/GPUTexture.d.ts +1 -0
  81. package/WebGPU/GPUTexture.js +3 -0
  82. package/WebGPU/GPUTexture.js.map +1 -1
  83. package/WebGPU/GPUTextureView.js.map +1 -1
  84. package/WebGPU/Types.d.ts +27 -27
  85. package/WebGPU/Utils.d.ts +1 -1
  86. package/WebGPU/Utils.js.map +1 -1
  87. package/angular/{esm2020 → esm2022}/index.mjs +5 -5
  88. package/angular/{fesm2015 → fesm2022}/nativescript-canvas-angular.mjs +4 -4
  89. package/angular/{fesm2020 → fesm2022}/nativescript-canvas-angular.mjs.map +1 -1
  90. package/common.d.ts +0 -3
  91. package/common.js +1 -5
  92. package/common.js.map +1 -1
  93. package/helpers.js.map +1 -1
  94. package/package.json +4 -2
  95. package/platforms/android/canvas-release.aar +0 -0
  96. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative +0 -0
  97. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h +21 -9
  98. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +2112 -2086
  99. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo +0 -0
  100. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json +5995 -5933
  101. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface +35 -9
  102. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface +35 -9
  103. package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  104. package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +644 -602
  105. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative +0 -0
  106. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h +42 -18
  107. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +2112 -2086
  108. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo +0 -0
  109. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo +0 -0
  110. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json +5995 -5933
  111. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +35 -9
  112. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface +35 -9
  113. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json +5995 -5933
  114. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +35 -9
  115. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +35 -9
  116. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +24 -24
  117. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  118. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +646 -604
  119. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +684 -638
  120. package/platforms/ios/src/cpp/CanvasJSIModule.cpp +12 -12
  121. package/platforms/ios/src/cpp/ImageAssetImpl.cpp +11 -11
  122. package/platforms/ios/src/cpp/ImageBitmapImpl.cpp +1 -1
  123. package/platforms/ios/src/cpp/JSIReadFileCallback.h +4 -4
  124. package/platforms/ios/src/cpp/OneByteStringResource.cpp +2 -2
  125. package/platforms/ios/src/cpp/RafImpl.h +2 -2
  126. package/platforms/ios/src/cpp/TextDecoderImpl.cpp +0 -6
  127. package/platforms/ios/src/cpp/TextDecoderImpl.h +3 -3
  128. package/platforms/ios/src/cpp/TextEncoderImpl.cpp +1 -1
  129. package/platforms/ios/src/cpp/TextEncoderImpl.h +3 -3
  130. package/platforms/ios/src/cpp/canvas2d/CanvasGradient.h +2 -2
  131. package/platforms/ios/src/cpp/canvas2d/CanvasPattern.h +2 -2
  132. package/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.cpp +140 -70
  133. package/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.h +66 -17
  134. package/platforms/ios/src/cpp/canvas2d/ImageDataImpl.cpp +3 -4
  135. package/platforms/ios/src/cpp/canvas2d/ImageDataImpl.h +3 -3
  136. package/platforms/ios/src/cpp/canvas2d/MatrixImpl.h +2 -2
  137. package/platforms/ios/src/cpp/canvas2d/Path2D.h +2 -2
  138. package/platforms/ios/src/cpp/canvas2d/TextMetricsImpl.h +3 -3
  139. package/platforms/ios/src/cpp/webgl/WebGLRenderingContext.cpp +8 -8
  140. package/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.cpp +1 -1
  141. package/platforms/ios/src/cpp/webgl2/WebGL2RenderingContext.cpp +722 -722
  142. package/platforms/ios/src/cpp/webgpu/GPUAdapterImpl.cpp +1 -1
  143. package/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp +11 -11
  144. package/platforms/ios/src/cpp/webgpu/GPUCommandEncoderImpl.cpp +207 -72
  145. package/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp +28 -20
  146. package/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.h +1 -1
  147. package/platforms/ios/src/cpp/webgpu/GPUImpl.cpp +2 -2
  148. package/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp +24 -53
  149. package/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h +2 -2
  150. package/platforms/ios/src/cpp/webgpu/GPUUtils.h +69 -2
  151. package/react/index.d.ts +1 -1
  152. package/utils.js.map +1 -1
  153. package/angular/fesm2015/nativescript-canvas-angular.mjs.map +0 -1
  154. package/angular/fesm2020/nativescript-canvas-angular.mjs +0 -24
  155. package/angular/package.json +0 -26
  156. package/typings/objc!CanvasNative.d.ts +0 -2038
  157. package/typings/objc!CanvasNative.js +0 -1
  158. package/typings/objc!CanvasNative.js.map +0 -1
  159. /package/angular/{esm2020 → esm2022}/nativescript-canvas-angular.mjs +0 -0
@@ -100,7 +100,7 @@ GPUAdapterImpl::GetFeatures(v8::Local<v8::Name> name,
100
100
  }
101
101
 
102
102
  }
103
- canvas_native_string_buffer_destroy(features);
103
+ canvas_native_string_buffer_release(features);
104
104
 
105
105
  info.GetReturnValue().Set(map);
106
106
 
@@ -270,7 +270,7 @@ void GPUCanvasContextImpl::GetCapabilities(const v8::FunctionCallbackInfo<v8::Va
270
270
  auto formats = v8::Array::New(isolate, (int) formats_len);
271
271
  for (int i = 0; i < formats_len; i++) {
272
272
  auto format = canvas_native_string_buffer_get_value_at(cap->formats, i);
273
- formats->Set(context, i, ConvertToV8String(isolate, format));
273
+ formats->Set(context, i, ConvertToV8String(isolate, format)).FromJust();
274
274
  canvas_native_string_destroy(format);
275
275
  }
276
276
 
@@ -280,7 +280,7 @@ void GPUCanvasContextImpl::GetCapabilities(const v8::FunctionCallbackInfo<v8::Va
280
280
 
281
281
  for (int i = 0; i < present_modes_len; i++) {
282
282
  auto mode = canvas_native_string_buffer_get_value_at(cap->present_modes, i);
283
- present_modes->Set(context, i, ConvertToV8String(isolate, mode));
283
+ present_modes->Set(context, i, ConvertToV8String(isolate, mode)).FromJust();
284
284
  canvas_native_string_destroy(mode);
285
285
  }
286
286
 
@@ -290,15 +290,15 @@ void GPUCanvasContextImpl::GetCapabilities(const v8::FunctionCallbackInfo<v8::Va
290
290
 
291
291
  for (int i = 0; i < alpha_modes_len; i++) {
292
292
  auto mode = canvas_native_string_buffer_get_value_at(cap->alpha_modes, i);
293
- alpha_modes->Set(context, i, ConvertToV8String(isolate, mode));
293
+ alpha_modes->Set(context, i, ConvertToV8String(isolate, mode)).FromJust();
294
294
  canvas_native_string_destroy(mode);
295
295
  }
296
296
 
297
- ret->Set(context, ConvertToV8String(isolate, "format"), formats);
298
- ret->Set(context, ConvertToV8String(isolate, "presentModes"), present_modes);
299
- ret->Set(context, ConvertToV8String(isolate, "alphaModes"), alpha_modes);
297
+ ret->Set(context, ConvertToV8String(isolate, "format"), formats).FromJust();
298
+ ret->Set(context, ConvertToV8String(isolate, "presentModes"), present_modes).FromJust();
299
+ ret->Set(context, ConvertToV8String(isolate, "alphaModes"), alpha_modes).FromJust();
300
300
  ret->Set(context, ConvertToV8String(isolate, "usages"),
301
- v8::Uint32::NewFromUnsigned(isolate, cap->usages));
301
+ v8::Uint32::NewFromUnsigned(isolate, cap->usages)).FromJust();
302
302
 
303
303
  canvas_native_webgpu_struct_surface_capabilities_release(cap);
304
304
 
@@ -309,9 +309,9 @@ void GPUCanvasContextImpl::GetCapabilities(const v8::FunctionCallbackInfo<v8::Va
309
309
 
310
310
  }
311
311
 
312
- ret->Set(context, ConvertToV8String(isolate, "format"), v8::Array::New(isolate));
313
- ret->Set(context, ConvertToV8String(isolate, "presentModes"), v8::Array::New(isolate));
314
- ret->Set(context, ConvertToV8String(isolate, "alphaModes"), v8::Array::New(isolate));
315
- ret->Set(context, ConvertToV8String(isolate, "usages"), v8::Uint32::New(isolate, 0));
312
+ ret->Set(context, ConvertToV8String(isolate, "format"), v8::Array::New(isolate)).FromJust();
313
+ ret->Set(context, ConvertToV8String(isolate, "presentModes"), v8::Array::New(isolate)).FromJust();
314
+ ret->Set(context, ConvertToV8String(isolate, "alphaModes"), v8::Array::New(isolate)).FromJust();
315
+ ret->Set(context, ConvertToV8String(isolate, "usages"), v8::Uint32::New(isolate, 0)).FromJust();
316
316
  args.GetReturnValue().Set(ret);
317
317
  }
@@ -28,7 +28,7 @@ void GPUCommandEncoderImpl::Init(v8::Local<v8::Object> canvasModule, v8::Isolate
28
28
  auto context = isolate->GetCurrentContext();
29
29
  auto func = ctor->GetFunction(context).ToLocalChecked();
30
30
 
31
- canvasModule->Set(context, ConvertToV8String(isolate, "GPUCommandEncoder"), func).FromJust();;
31
+ canvasModule->Set(context, ConvertToV8String(isolate, "GPUCommandEncoder"), func).FromJust();
32
32
  }
33
33
 
34
34
  GPUCommandEncoderImpl *GPUCommandEncoderImpl::GetPointer(const v8::Local<v8::Object> &object) {
@@ -257,45 +257,18 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
257
257
  v8::Local<v8::Value> clearValueVal;
258
258
  colorAttachment->Get(context, ConvertToV8String(isolate, "clearValue")).ToLocal(
259
259
  &clearValueVal);
260
- auto clearValue = CanvasColor{0, 0, 0, 0};
261
- if (!clearValueVal.IsEmpty() && clearValueVal->IsObject()) {
262
- auto clearValueObj = clearValueVal.As<v8::Object>();
263
-
264
- v8::Local<v8::Value> r;
265
- v8::Local<v8::Value> g;
266
- v8::Local<v8::Value> b;
267
- v8::Local<v8::Value> a;
268
-
269
- clearValueObj->Get(context, ConvertToV8String(isolate, "r")).ToLocal(&r);
270
- clearValueObj->Get(context, ConvertToV8String(isolate, "g")).ToLocal(&g);
271
- clearValueObj->Get(context, ConvertToV8String(isolate, "b")).ToLocal(&b);
272
- clearValueObj->Get(context, ConvertToV8String(isolate, "a")).ToLocal(&a);
273
-
274
- if (!r.IsEmpty() && r->IsNumber()) {
275
- clearValue.r = r.As<v8::Number>()->Value();
276
- }
277
-
278
- if (!g.IsEmpty() && g->IsNumber()) {
279
- clearValue.g = g.As<v8::Number>()->Value();
280
- }
281
-
282
-
283
- if (!b.IsEmpty() && b->IsNumber()) {
284
- clearValue.b = b.As<v8::Number>()->Value();
285
- }
286
-
287
- if (!a.IsEmpty() && a->IsNumber()) {
288
- clearValue.a = a.As<v8::Number>()->Value();
289
- }
290
- }
291
260
 
261
+ auto clearValue = ParseColor(isolate, clearValueVal);
292
262
 
293
- auto viewVal = colorAttachment->Get(context, ConvertToV8String(isolate,
294
- "view")).ToLocalChecked();
295
-
296
- auto view = GPUTextureViewImpl::GetPointer(viewVal.As<v8::Object>());
297
-
263
+ v8::Local<v8::Value> viewVal;
264
+ colorAttachment->Get(context, ConvertToV8String(isolate,
265
+ "view")).ToLocal(&viewVal);
298
266
 
267
+ const CanvasGPUTextureView *view = nullptr;
268
+
269
+ auto viewPtr = GPUTextureViewImpl::GetPointer(viewVal.As<v8::Object>());
270
+ view = viewPtr->GetTextureView();
271
+
299
272
  const CanvasGPUTextureView *resolve_target = nullptr;
300
273
 
301
274
  v8::Local<v8::Value> resolve_target_val;
@@ -313,34 +286,37 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
313
286
  // default
314
287
  CanvasLoadOp load = CanvasLoadOp::CanvasLoadOpClear;
315
288
  CanvasStoreOp store = CanvasStoreOp::CanvasStoreOpStore;
316
- auto loadVal = colorAttachment->Get(context, ConvertToV8String(isolate,
317
- "loadOp")).ToLocalChecked();
318
-
319
- if (loadVal->IsUint32()) {
320
- load = (CanvasLoadOp) loadVal->Uint32Value(
321
- context).ToChecked();
322
- } else if (loadVal->IsString()) {
323
- auto val = ConvertFromV8String(isolate, loadVal);
324
- if (val == "clear") {
325
- load = CanvasLoadOp::CanvasLoadOpClear;
326
- } else if (val == "load") {
327
- load = CanvasLoadOp::CanvasLoadOpLoad;
289
+ v8::Local<v8::Value> loadVal;
290
+
291
+ if(colorAttachment->Get(context, ConvertToV8String(isolate,
292
+ "loadOp")).ToLocal(&loadVal)){
293
+ if (loadVal->IsUint32()) {
294
+ load = (CanvasLoadOp) loadVal->Uint32Value(
295
+ context).ToChecked();
296
+ } else if (loadVal->IsString()) {
297
+ auto val = ConvertFromV8String(isolate, loadVal);
298
+ if (val == "clear") {
299
+ load = CanvasLoadOp::CanvasLoadOpClear;
300
+ } else if (val == "load") {
301
+ load = CanvasLoadOp::CanvasLoadOpLoad;
302
+ }
328
303
  }
329
304
  }
330
-
331
-
332
- auto storeVal = colorAttachment->Get(context, ConvertToV8String(isolate,
333
- "storeOp")).ToLocalChecked();
334
-
335
- if (!storeVal.IsEmpty() && storeVal->IsUint32()) {
336
- store = (CanvasStoreOp) storeVal->Uint32Value(
337
- context).ToChecked();
338
- } else if (storeVal->IsString()) {
339
- auto val = ConvertFromV8String(isolate, storeVal);
340
- if (val == "discard") {
341
- store = CanvasStoreOp::CanvasStoreOpDiscard;
342
- } else if (val == "store") {
343
- store = CanvasStoreOp::CanvasStoreOpStore;
305
+
306
+
307
+ v8::Local<v8::Value> storeVal;
308
+ if(colorAttachment->Get(context, ConvertToV8String(isolate,
309
+ "storeOp")).ToLocal(&storeVal)){
310
+ if (storeVal->IsUint32()) {
311
+ store = (CanvasStoreOp) storeVal->Uint32Value(
312
+ context).ToChecked();
313
+ } else if (storeVal->IsString()) {
314
+ auto val = ConvertFromV8String(isolate, storeVal);
315
+ if (val == "discard") {
316
+ store = CanvasStoreOp::CanvasStoreOpDiscard;
317
+ } else if (val == "store") {
318
+ store = CanvasStoreOp::CanvasStoreOpStore;
319
+ }
344
320
  }
345
321
  }
346
322
 
@@ -352,7 +328,7 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
352
328
  };
353
329
 
354
330
  auto attachment = CanvasRenderPassColorAttachment{
355
- view->GetTextureView(),
331
+ view,
356
332
  resolve_target,
357
333
  channel
358
334
  };
@@ -362,8 +338,8 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
362
338
  }
363
339
 
364
340
 
341
+ // todo add when supported
365
342
  v8::Local<v8::Value> maxDrawCountVal;
366
-
367
343
  desc->Get(context, ConvertToV8String(isolate, "maxDrawCount")).ToLocal(&maxDrawCountVal);
368
344
 
369
345
 
@@ -376,8 +352,164 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
376
352
 
377
353
  if (!depthStencilAttachmentVal.IsEmpty() && depthStencilAttachmentVal->IsObject()) {
378
354
  auto depthStencilAttachmentObj = depthStencilAttachmentVal.As<v8::Object>();
379
- }
355
+ depthStencilAttachment = new CanvasRenderPassDepthStencilAttachment{};
356
+
357
+
358
+ v8::Local<v8::Value> viewVal;
359
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
360
+ "view")).ToLocal(&viewVal);
380
361
 
362
+ auto viewPtr = GPUTextureViewImpl::GetPointer(viewVal.As<v8::Object>());
363
+ depthStencilAttachment->view = viewPtr->GetTextureView();
364
+
365
+
366
+ v8::Local<v8::Value> depthClearValue;
367
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
368
+ "depthClearValue")).ToLocal(
369
+ &depthClearValue);
370
+
371
+ depthStencilAttachment->depth_clear_value = 0;
372
+
373
+ if (!depthClearValue.IsEmpty() && depthClearValue->IsNumber()) {
374
+ depthStencilAttachment->depth_clear_value = (float) depthClearValue->NumberValue(
375
+ context).FromJust();
376
+ }
377
+
378
+ v8::Local<v8::Value> depthLoadOp;
379
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
380
+ "depthLoadOp")).ToLocal(
381
+ &depthLoadOp);
382
+
383
+ depthStencilAttachment->depth_load_op = CanvasOptionalLoadOp{
384
+ CanvasOptionalLoadOpNone
385
+ };
386
+
387
+ if (!depthLoadOp.IsEmpty() && depthLoadOp->IsString()) {
388
+ auto value = ConvertFromV8String(isolate, depthLoadOp);
389
+ if (value == "load") {
390
+ depthStencilAttachment->depth_load_op = CanvasOptionalLoadOp{
391
+ CanvasOptionalLoadOpSome,
392
+ CanvasLoadOpLoad
393
+ };
394
+ } else if (value == "clear") {
395
+ depthStencilAttachment->depth_load_op = CanvasOptionalLoadOp{
396
+ CanvasOptionalLoadOpSome,
397
+ CanvasLoadOpClear
398
+ };
399
+ }
400
+ }
401
+
402
+
403
+ v8::Local<v8::Value> depthStoreOp;
404
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
405
+ "depthStoreOp")).ToLocal(
406
+ &depthStoreOp);
407
+
408
+ depthStencilAttachment->depth_store_op = CanvasOptionalStoreOp{
409
+ CanvasOptionalStoreOpNone
410
+ };
411
+
412
+ if (!depthStoreOp.IsEmpty() && depthStoreOp->IsString()) {
413
+ auto value = ConvertFromV8String(isolate, depthStoreOp);
414
+ if (value == "store") {
415
+ depthStencilAttachment->depth_store_op = depthStencilAttachment->depth_store_op = CanvasOptionalStoreOp{
416
+ CanvasOptionalStoreOpSome,
417
+ CanvasStoreOpStore
418
+ };
419
+ } else if (value == "discard") {
420
+ depthStencilAttachment->depth_store_op = depthStencilAttachment->depth_store_op = CanvasOptionalStoreOp{
421
+ CanvasOptionalStoreOpSome,
422
+ CanvasStoreOpDiscard
423
+ };
424
+ }
425
+ }
426
+
427
+
428
+ v8::Local<v8::Value> depthReadOnly;
429
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
430
+ "depthReadOnly")).ToLocal(
431
+ &depthReadOnly);
432
+
433
+ depthStencilAttachment->depth_read_only = false;
434
+ if (!depthReadOnly.IsEmpty() && depthReadOnly->IsBoolean()) {
435
+ depthStencilAttachment->depth_read_only = depthReadOnly->BooleanValue(isolate);
436
+ }
437
+
438
+
439
+ v8::Local<v8::Value> stencilClearValue;
440
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
441
+ "stencilClearValue")).ToLocal(
442
+ &stencilClearValue);
443
+
444
+ depthStencilAttachment->stencil_clear_value = 0;
445
+
446
+ if (!stencilClearValue.IsEmpty() && stencilClearValue->IsUint32()) {
447
+ depthStencilAttachment->stencil_clear_value = stencilClearValue->Uint32Value(
448
+ context).FromJust();
449
+ }
450
+
451
+
452
+ v8::Local<v8::Value> stencilLoadOp;
453
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
454
+ "stencilLoadOp")).ToLocal(
455
+ &stencilLoadOp);
456
+
457
+ depthStencilAttachment->stencil_load_op = CanvasOptionalLoadOp{
458
+ CanvasOptionalLoadOpNone
459
+ };
460
+
461
+ if (!stencilLoadOp.IsEmpty() && stencilLoadOp->IsString()) {
462
+ auto value = ConvertFromV8String(isolate, stencilLoadOp);
463
+ if (value == "load") {
464
+ depthStencilAttachment->stencil_load_op = CanvasOptionalLoadOp{
465
+ CanvasOptionalLoadOpSome,
466
+ CanvasLoadOpLoad
467
+ };
468
+ } else if (value == "clear") {
469
+ depthStencilAttachment->stencil_load_op = CanvasOptionalLoadOp{
470
+ CanvasOptionalLoadOpSome,
471
+ CanvasLoadOpClear
472
+ };
473
+ }
474
+ }
475
+
476
+
477
+ v8::Local<v8::Value> stencilStoreOp;
478
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
479
+ "stencilStoreOp")).ToLocal(
480
+ &stencilStoreOp);
481
+
482
+ depthStencilAttachment->stencil_store_op = CanvasOptionalStoreOp{
483
+ CanvasOptionalStoreOpNone
484
+ };
485
+
486
+ if (!stencilStoreOp.IsEmpty() && stencilStoreOp->IsString()) {
487
+ auto value = ConvertFromV8String(isolate, stencilStoreOp);
488
+ if (value == "store") {
489
+ depthStencilAttachment->stencil_store_op = CanvasOptionalStoreOp{
490
+ CanvasOptionalStoreOpSome,
491
+ CanvasStoreOpStore
492
+ };
493
+ } else if (value == "discard") {
494
+ depthStencilAttachment->stencil_store_op = CanvasOptionalStoreOp{
495
+ CanvasOptionalStoreOpSome,
496
+ CanvasStoreOpDiscard
497
+ };
498
+ }
499
+ }
500
+
501
+
502
+ v8::Local<v8::Value> stencilReadOnly;
503
+ depthStencilAttachmentObj->Get(context, ConvertToV8String(isolate,
504
+ "stencilReadOnly")).ToLocal(
505
+ &stencilReadOnly);
506
+
507
+ depthStencilAttachment->stencil_read_only = false;
508
+ if (!stencilReadOnly.IsEmpty() && stencilReadOnly->IsBoolean()) {
509
+ depthStencilAttachment->stencil_read_only = stencilReadOnly->BooleanValue(isolate);
510
+ }
511
+
512
+ }
381
513
 
382
514
  const CanvasGPUQuerySet *occlusion_query_set = nullptr;
383
515
  v8::Local<v8::Value> occlusionQuerySetVal;
@@ -386,8 +518,8 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
386
518
  desc->Get(context, ConvertToV8String(isolate, "occlusionQuerySet")).ToLocal(
387
519
  &occlusionQuerySetVal);
388
520
 
389
-
390
- if (!occlusionQuerySetVal.IsEmpty() && occlusionQuerySetVal->IsObject()) {
521
+
522
+ if (GetNativeType(occlusionQuerySetVal) == NativeType::GPUQuerySet) {
391
523
  auto occlusionQuerySet = GPUQuerySetImpl::GetPointer(
392
524
  occlusionQuerySetVal.As<v8::Object>());
393
525
  occlusion_query_set = occlusionQuerySet->GetQuerySet();
@@ -410,7 +542,7 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
410
542
  &querySetVal);
411
543
 
412
544
 
413
- if (!querySetVal.IsEmpty() && querySetVal->IsObject()) {
545
+ if (GetNativeType(querySetVal) == NativeType::GPUQuerySet) {
414
546
  auto queryPtr = GPUQuerySetImpl::GetPointer(querySetVal.As<v8::Object>());
415
547
  if (queryPtr != nullptr) {
416
548
  querySet = queryPtr->GetQuerySet();
@@ -451,6 +583,10 @@ void GPUCommandEncoderImpl::BeginRenderPass(const v8::FunctionCallbackInfo<v8::V
451
583
  querySet, beginningOfPassWriteIndex, endOfPassWriteIndex
452
584
  );
453
585
 
586
+ if (depthStencilAttachment != nullptr) {
587
+ delete depthStencilAttachment;
588
+ }
589
+
454
590
 
455
591
  }
456
592
 
@@ -970,10 +1106,9 @@ void GPUCommandEncoderImpl::Finish(const v8::FunctionCallbackInfo<v8::Value> &ar
970
1106
  if (descVal->IsObject()) {
971
1107
  auto desc = descVal.As<v8::Object>();
972
1108
  v8::Local<v8::Value> labelVal;
973
- desc->Get(context, ConvertToV8String(isolate, "label")).ToLocal(&labelVal);
974
- if (!labelVal.IsEmpty() && labelVal->IsString()) {
1109
+ didSet = desc->Get(context, ConvertToV8String(isolate, "label")).ToLocal(&labelVal);
1110
+ if (didSet && labelVal->IsString()) {
975
1111
  label = ConvertFromV8String(isolate, labelVal);
976
- didSet = true;
977
1112
  }
978
1113
  }
979
1114
 
@@ -248,13 +248,13 @@ GPUDeviceImpl::GetFeatures(v8::Local<v8::Name> name,
248
248
  for (int i = 0; i < len; ++i) {
249
249
  auto item = canvas_native_string_buffer_get_value_at(features, i);
250
250
  if (item != nullptr) {
251
- auto keyValue = ConvertToV8OneByteString(isolate, (char *) item);
251
+ auto keyValue = ConvertToV8String(isolate, (char *) item);
252
252
  map->Set(context, keyValue, keyValue);
253
253
  canvas_native_string_destroy(item);
254
254
  }
255
255
 
256
256
  }
257
- canvas_native_string_buffer_destroy(features);
257
+ canvas_native_string_buffer_release(features);
258
258
 
259
259
  info.GetReturnValue().Set(map);
260
260
 
@@ -378,6 +378,8 @@ void GPUDeviceImpl::CreateBindGroup(const v8::FunctionCallbackInfo<v8::Value> &a
378
378
 
379
379
  auto optionsVal = args[0];
380
380
 
381
+ std::vector<CanvasBindGroupEntry> entries;
382
+
381
383
  if (optionsVal->IsObject()) {
382
384
  auto options = optionsVal.As<v8::Object>();
383
385
  v8::Local<v8::Value> labelVal;
@@ -401,7 +403,6 @@ void GPUDeviceImpl::CreateBindGroup(const v8::FunctionCallbackInfo<v8::Value> &a
401
403
  }
402
404
  }
403
405
 
404
- std::vector<CanvasBindGroupEntry> entries;
405
406
 
406
407
  v8::Local<v8::Value> entriesVal;
407
408
  options->Get(context, ConvertToV8String(isolate, "entries")).ToLocal(&entriesVal);
@@ -466,7 +467,8 @@ void GPUDeviceImpl::CreateBindGroup(const v8::FunctionCallbackInfo<v8::Value> &a
466
467
  int64_t offset = -1;
467
468
 
468
469
  v8::Local<v8::Value> offsetVal;
469
- bufferObj->Get(context,
470
+
471
+ resourceObj->Get(context,
470
472
  ConvertToV8String(isolate,
471
473
  "offset")).ToLocal(
472
474
  &offsetVal);
@@ -478,9 +480,9 @@ void GPUDeviceImpl::CreateBindGroup(const v8::FunctionCallbackInfo<v8::Value> &a
478
480
  int64_t size = -1;
479
481
 
480
482
  v8::Local<v8::Value> sizeVal;
481
- bufferObj->Get(context,
483
+ resourceObj->Get(context,
482
484
  ConvertToV8String(isolate, "size")).ToLocal(
483
- &offsetVal);
485
+ &sizeVal);
484
486
  if (!sizeVal.IsEmpty() && sizeVal->IsNumber()) {
485
487
  size = (int64_t) sizeVal->NumberValue(
486
488
  context).ToChecked();
@@ -595,7 +597,7 @@ void GPUDeviceImpl::CreateBindGroupLayout(const v8::FunctionCallbackInfo<v8::Val
595
597
 
596
598
  v8::Local<v8::Value> hasDynamicOffsetVal;
597
599
  bufferObj->Get(context,
598
- ConvertToV8String(isolate, "hasDynamicOffset ")).ToLocal(
600
+ ConvertToV8String(isolate, "hasDynamicOffset")).ToLocal(
599
601
  &hasDynamicOffsetVal);
600
602
 
601
603
 
@@ -607,7 +609,7 @@ void GPUDeviceImpl::CreateBindGroupLayout(const v8::FunctionCallbackInfo<v8::Val
607
609
 
608
610
  v8::Local<v8::Value> minBindingSizeVal;
609
611
  bufferObj->Get(context,
610
- ConvertToV8String(isolate, "minBindingSize ")).ToLocal(
612
+ ConvertToV8String(isolate, "minBindingSize")).ToLocal(
611
613
  &minBindingSizeVal);
612
614
 
613
615
 
@@ -1086,9 +1088,10 @@ void GPUDeviceImpl::CreateComputePipeline(const v8::FunctionCallbackInfo<v8::Val
1086
1088
 
1087
1089
  if (!keyVal.IsEmpty() && keyVal->IsString() && !valueVal.IsEmpty() &&
1088
1090
  valueVal->IsNumber()) {
1091
+ auto val = ConvertFromV8String(isolate, keyVal);
1089
1092
  canvas_native_webgpu_constants_insert(
1090
1093
  store,
1091
- *v8::String::Utf8Value(isolate, keyVal),
1094
+ val.c_str(),
1092
1095
  valueVal.As<v8::Number>()->Value()
1093
1096
  );
1094
1097
  }
@@ -1231,7 +1234,6 @@ void GPUDeviceImpl::CreateQuerySet(const v8::FunctionCallbackInfo<v8::Value> &ar
1231
1234
  label = *v8::String::Utf8Value(isolate, labelVal);
1232
1235
  }
1233
1236
 
1234
-
1235
1237
  v8::Local<v8::Value> typeVal;
1236
1238
  options->Get(context, ConvertToV8String(isolate, "type")).ToLocal(&labelVal);
1237
1239
 
@@ -1412,9 +1414,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
1412
1414
 
1413
1415
  stencilObj->Get(context, ConvertToV8String(isolate, "format")).ToLocal(&formatValue);
1414
1416
  if (!formatValue.IsEmpty() && formatValue->IsString()) {
1415
- auto val = *v8::String::Utf8Value(isolate, formatValue);
1417
+ auto val = ConvertFromV8String(isolate, formatValue);
1416
1418
  auto format = canvas_native_webgpu_enum_string_to_gpu_texture(
1417
- val);
1419
+ val.c_str());
1418
1420
  if (format.tag ==
1419
1421
  CanvasOptionalGPUTextureFormat_Tag::CanvasOptionalGPUTextureFormatSome) {
1420
1422
  stencil->format = format.some;
@@ -1434,8 +1436,8 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
1434
1436
  stencilObj->Get(context, ConvertToV8String(isolate, "depthBiasClamp")).ToLocal(
1435
1437
  &depthBiasClampVal);
1436
1438
 
1437
- if (!depthBiasClampVal.IsEmpty() && depthBiasClampVal->IsInt32()) {
1438
- stencil->depth_bias_clamp = depthBiasClampVal->Int32Value(context).FromJust();
1439
+ if (!depthBiasClampVal.IsEmpty() && depthBiasClampVal->IsNumber()) {
1440
+ stencil->depth_bias_clamp = (float)depthBiasClampVal->NumberValue(context).FromJust();
1439
1441
  }
1440
1442
 
1441
1443
 
@@ -1443,8 +1445,8 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
1443
1445
  stencilObj->Get(context, ConvertToV8String(isolate, "depthBiasSlopeScale")).ToLocal(
1444
1446
  &depthBiasSlopeScaleVal);
1445
1447
 
1446
- if (!depthBiasSlopeScaleVal.IsEmpty() && depthBiasSlopeScaleVal->IsInt32()) {
1447
- stencil->depth_bias_slope_scale = depthBiasSlopeScaleVal->Int32Value(
1448
+ if (!depthBiasSlopeScaleVal.IsEmpty() && depthBiasSlopeScaleVal->IsNumber()) {
1449
+ stencil->depth_bias_slope_scale = (float)depthBiasSlopeScaleVal->NumberValue(
1448
1450
  context).FromJust();
1449
1451
  }
1450
1452
 
@@ -1571,6 +1573,8 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
1571
1573
  stencil->stencil_write_mask = stencilWriteMaskVal->Uint32Value(context).FromJust();
1572
1574
  }
1573
1575
 
1576
+ descriptor.depth_stencil = stencil;
1577
+
1574
1578
  }
1575
1579
 
1576
1580
 
@@ -1907,6 +1911,8 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
1907
1911
  case 2:
1908
1912
  primitive->cull_mode = CanvasCullMode::CanvasCullModeBack;
1909
1913
  break;
1914
+ default:
1915
+ break;
1910
1916
  }
1911
1917
  } else if (cullModeValue->IsString()) {
1912
1918
 
@@ -2059,7 +2065,6 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
2059
2065
 
2060
2066
  std::vector<std::vector<CanvasVertexAttribute>> attributes;
2061
2067
 
2062
-
2063
2068
  if (!vertexValue.IsEmpty() && vertexValue->IsObject()) {
2064
2069
  auto vertexObj = vertexValue.As<v8::Object>();
2065
2070
  vertex = new CanvasVertexState{};
@@ -2257,6 +2262,10 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo<v8::Valu
2257
2262
 
2258
2263
  }
2259
2264
 
2265
+ if(descriptor.depth_stencil != nullptr){
2266
+ delete descriptor.depth_stencil;
2267
+ }
2268
+
2260
2269
 
2261
2270
  if (pipeline != nullptr) {
2262
2271
  auto ret = GPURenderPipelineImpl::NewInstance(isolate, new GPURenderPipelineImpl(pipeline));
@@ -2599,10 +2608,9 @@ void GPUDeviceImpl::CreateTexture(const v8::FunctionCallbackInfo<v8::Value> &arg
2599
2608
 
2600
2609
 
2601
2610
  v8::Local<v8::Value> formatVal;
2602
- options->Get(context, ConvertToV8String(isolate, "format")).ToLocal(
2603
- &formatVal);
2604
2611
 
2605
- if (formatVal->IsString()) {
2612
+ if (options->Get(context, ConvertToV8String(isolate, "format")).ToLocal(
2613
+ &formatVal) && formatVal->IsString()) {
2606
2614
  auto format = ConvertFromV8String(isolate, formatVal);
2607
2615
 
2608
2616
  // todo use enum
@@ -11,7 +11,7 @@
11
11
 
12
12
  class GPUDeviceImpl : ObjectWrapperImpl {
13
13
  public:
14
- GPUDeviceImpl(const CanvasGPUDevice *device);
14
+ explicit GPUDeviceImpl(const CanvasGPUDevice *device);
15
15
 
16
16
  ~GPUDeviceImpl() {
17
17
  canvas_native_webgpu_device_release(this->device_);
@@ -180,7 +180,7 @@ void GPUImpl::__GetPointer(const v8::FunctionCallbackInfo<v8::Value> &args) {
180
180
 
181
181
  auto isolate = args.GetIsolate();
182
182
 
183
- auto pointer = (intptr_t *) ptr->GetGPUInstance();
184
- auto ret = std::to_string((intptr_t) pointer);
183
+ auto pointer = canvas_native_webgpu_get_pointer_addr(ptr->GetGPUInstance());
184
+ auto ret = std::to_string(pointer);
185
185
  args.GetReturnValue().Set(ConvertToV8String(isolate, ret));
186
186
  }