@shopify/react-native-skia 2.6.2 → 2.6.3-next.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.
- package/android/CMakeLists.txt +8 -4
- package/android/build.gradle +22 -3
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +62 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaWebGPUViewManagerDelegate.java +35 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaWebGPUViewManagerInterface.java +17 -0
- package/apple/RNSkApplePlatformContext.h +2 -0
- package/apple/RNSkApplePlatformContext.mm +71 -0
- package/apple/RNWebGPUAppleNativeBuffer.mm +33 -0
- package/cpp/api/JsiNativeBuffer.h +9 -1
- package/cpp/api/JsiSkAnimatedImage.h +1 -1
- package/cpp/api/JsiSkAnimatedImageFactory.h +1 -1
- package/cpp/api/JsiSkApi.h +3 -3
- package/cpp/api/JsiSkCanvas.h +34 -1
- package/cpp/api/JsiSkColor.h +1 -1
- package/cpp/api/JsiSkDataFactory.h +2 -2
- package/cpp/api/JsiSkFont.h +1 -1
- package/cpp/api/JsiSkFontMgr.h +1 -1
- package/cpp/api/JsiSkHostObjects.h +3 -3
- package/cpp/api/JsiSkImage.h +15 -7
- package/cpp/api/JsiSkImageFactory.h +2 -2
- package/cpp/api/JsiSkPath.h +1 -1
- package/cpp/api/JsiSkPathFactory.h +1 -1
- package/cpp/api/JsiSkSkottie.h +1 -1
- package/cpp/api/JsiSkSurface.h +18 -6
- package/cpp/api/JsiSkTypeface.h +1 -1
- package/cpp/api/JsiSkTypefaceFontProvider.h +1 -1
- package/cpp/api/JsiSkiaContext.h +2 -2
- package/cpp/api/JsiTextureInfo.h +1 -1
- package/cpp/api/JsiVideo.h +2 -2
- package/cpp/api/recorder/Convertor.h +1 -1
- package/cpp/api/recorder/Drawings.h +1 -1
- package/cpp/api/recorder/JsiRecorder.h +4 -4
- package/cpp/api/recorder/RNRecorder.h +1 -1
- package/cpp/api/third_party/SkottieUtils.cpp +1 -1
- package/cpp/api/third_party/base64.cpp +1 -1
- package/cpp/jsi/JsiHostObject.cpp +5 -7
- package/cpp/jsi/JsiPromises.h +1 -1
- package/cpp/jsi/ViewProperty.h +1 -1
- package/cpp/rnskia/RNDawnContext.h +13 -0
- package/cpp/rnskia/RNDawnUtils.h +11 -1
- package/cpp/rnskia/RNSkJsiViewApi.h +2 -2
- package/cpp/rnskia/RNSkManager.cpp +88 -2
- package/cpp/rnskia/RNSkPictureView.h +4 -4
- package/cpp/rnskia/RNSkPlatformContext.h +7 -0
- package/cpp/rnskia/RNSkView.h +9 -6
- package/cpp/rnwgpu/ArrayBuffer.h +51 -7
- package/cpp/rnwgpu/api/AppleNativeBuffer.h +22 -0
- package/cpp/rnwgpu/api/Convertors.h +33 -11
- package/cpp/rnwgpu/api/GPU.cpp +0 -3
- package/cpp/rnwgpu/api/GPUAdapter.cpp +37 -7
- package/cpp/rnwgpu/api/GPUBuffer.h +1 -1
- package/cpp/rnwgpu/api/GPUDevice.cpp +84 -6
- package/cpp/rnwgpu/api/GPUDevice.h +12 -0
- package/cpp/rnwgpu/api/GPUExternalTexture.cpp +139 -0
- package/cpp/rnwgpu/api/GPUExternalTexture.h +52 -2
- package/cpp/rnwgpu/api/GPUQueue.cpp +50 -45
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +1 -1
- package/cpp/rnwgpu/api/GPUSharedFence.cpp +80 -0
- package/cpp/rnwgpu/api/GPUSharedFence.h +53 -0
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +135 -0
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +75 -0
- package/cpp/rnwgpu/api/ImageBitmap.h +62 -0
- package/cpp/rnwgpu/api/NativeBufferUtils.h +87 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +4 -1
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +1 -1
- package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +10 -0
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +43 -24
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +9 -9
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +1 -1
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +2 -2
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceDescriptor.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceState.h +51 -0
- package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +73 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +1 -1
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +1 -1
- package/cpp/skia/include/android/GrAHardwareBufferUtils.h +1 -1
- package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +1 -1
- package/cpp/skia/include/android/SkAnimatedImage.h +1 -1
- package/cpp/skia/include/codec/SkCodec.h +0 -8
- package/cpp/skia/include/codec/SkEncodedOrigin.h +1 -1
- package/cpp/skia/include/codec/SkPngRustDecoder.h +1 -1
- package/cpp/skia/include/core/SkBitmap.h +2 -8
- package/cpp/skia/include/core/SkCPURecorder.h +3 -1
- package/cpp/skia/include/core/SkCanvasVirtualEnforcer.h +1 -1
- package/cpp/skia/include/core/SkColorType.h +5 -3
- package/cpp/skia/include/core/SkContourMeasure.h +1 -1
- package/cpp/skia/include/core/SkCoverageMode.h +1 -1
- package/cpp/skia/include/core/SkCubicMap.h +1 -1
- package/cpp/skia/include/core/SkExecutor.h +1 -1
- package/cpp/skia/include/core/SkFont.h +15 -0
- package/cpp/skia/include/core/SkFontArguments.h +6 -1
- package/cpp/skia/include/core/SkFontMetrics.h +1 -1
- package/cpp/skia/include/core/SkFontMgr.h +36 -1
- package/cpp/skia/include/core/SkFontParameters.h +1 -1
- package/cpp/skia/include/core/SkFontScanner.h +1 -1
- package/cpp/skia/include/core/SkFontTypes.h +1 -1
- package/cpp/skia/include/core/SkM44.h +1 -1
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkOpenTypeSVGDecoder.h +1 -1
- package/cpp/skia/include/core/SkPathBuilder.h +10 -4
- package/cpp/skia/include/core/SkPathIter.h +1 -1
- package/cpp/skia/include/core/SkPathTypes.h +1 -1
- package/cpp/skia/include/core/SkPixelRef.h +4 -1
- package/cpp/skia/include/core/SkRecorder.h +2 -1
- package/cpp/skia/include/core/SkRegion.h +17 -6
- package/cpp/skia/include/core/SkSamplingOptions.h +1 -1
- package/cpp/skia/include/core/SkSerialProcs.h +8 -1
- package/cpp/skia/include/core/SkShader.h +3 -5
- package/cpp/skia/include/core/SkSpan.h +1 -1
- package/cpp/skia/include/core/SkStream.h +1 -1
- package/cpp/skia/include/core/SkStrikeRef.h +80 -0
- package/cpp/skia/include/core/SkTileMode.h +1 -1
- package/cpp/skia/include/core/SkVertices.h +1 -1
- package/cpp/skia/include/core/SkYUVAPixmaps.h +3 -5
- package/cpp/skia/include/docs/SkPDFDocument.h +1 -1
- package/cpp/skia/include/docs/SkXPSDocument.h +1 -1
- package/cpp/skia/include/effects/SkGradient.h +1 -1
- package/cpp/skia/include/effects/SkHighContrastFilter.h +1 -1
- package/cpp/skia/include/effects/SkRuntimeEffect.h +2 -2
- package/cpp/skia/include/effects/SkShaderMaskFilter.h +1 -1
- package/cpp/skia/include/effects/SkTrimPathEffect.h +1 -1
- package/cpp/skia/include/encode/SkEncoder.h +1 -1
- package/cpp/skia/include/encode/SkJpegEncoder.h +1 -1
- package/cpp/skia/include/encode/SkPngEncoder.h +1 -1
- package/cpp/skia/include/encode/SkPngRustEncoder.h +1 -1
- package/cpp/skia/include/encode/SkWebpEncoder.h +1 -1
- package/cpp/skia/include/gpu/GpuTypes.h +2 -0
- package/cpp/skia/include/gpu/MutableTextureState.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrBackendSemaphore.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrBackendSurface.h +6 -62
- package/cpp/skia/include/gpu/ganesh/GrContextThreadSafeProxy.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkarounds.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrRecordingContext.h +2 -1
- package/cpp/skia/include/gpu/ganesh/mock/GrMockBackendSurface.h +59 -0
- package/cpp/skia/include/gpu/ganesh/mock/GrMockTypes.h +1 -1
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendContext.h +1 -1
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlTypes.h +1 -1
- package/cpp/skia/include/gpu/ganesh/vk/GrBackendDrawableInfo.h +1 -1
- package/cpp/skia/include/gpu/graphite/Context.h +12 -5
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +6 -0
- package/cpp/skia/include/gpu/graphite/Image.h +82 -9
- package/cpp/skia/include/gpu/graphite/PrecompileContext.h +7 -2
- package/cpp/skia/include/gpu/graphite/Recorder.h +6 -4
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileColorFilter.h +11 -1
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +1 -0
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +1 -1
- package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +1 -1
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +1 -1
- package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +1 -1
- package/cpp/skia/include/gpu/vk/VulkanTypes.h +1 -1
- package/cpp/skia/include/ports/SkCFObject.h +1 -1
- package/cpp/skia/include/ports/SkFontMgr_Fontations.h +1 -1
- package/cpp/skia/include/ports/SkFontMgr_android_ndk.h +1 -1
- package/cpp/skia/include/ports/SkFontMgr_data.h +1 -1
- package/cpp/skia/include/ports/SkFontMgr_fuchsia.h +1 -1
- package/cpp/skia/include/ports/SkFontMgr_mac_ct.h +1 -1
- package/cpp/skia/include/ports/SkFontScanner_Fontations.h +1 -1
- package/cpp/skia/include/ports/SkFontScanner_FreeType.h +1 -1
- package/cpp/skia/include/ports/SkTypeface_fontations.h +1 -1
- package/cpp/skia/include/private/SkExif.h +1 -1
- package/cpp/skia/include/private/SkGainmapInfo.h +1 -1
- package/cpp/skia/include/private/SkGainmapShader.h +1 -1
- package/cpp/skia/include/private/SkHdrMetadata.h +21 -0
- package/cpp/skia/include/private/SkJpegGainmapEncoder.h +1 -1
- package/cpp/skia/include/private/SkPixelStorage.h +37 -0
- package/cpp/skia/include/private/SkXmp.h +1 -1
- package/cpp/skia/include/private/base/SkAssert.h +6 -5
- package/cpp/skia/include/private/base/SkContainers.h +1 -1
- package/cpp/skia/include/private/base/SkFeatures.h +30 -30
- package/cpp/skia/include/private/base/SkLog.h +1 -7
- package/cpp/skia/include/private/base/SkLogPriority.h +4 -5
- package/cpp/skia/include/private/base/SkMacros.h +1 -1
- package/cpp/skia/include/private/base/SkMalloc.h +1 -1
- package/cpp/skia/include/private/base/SkSafe32.h +1 -1
- package/cpp/skia/include/private/base/SkSpan_impl.h +1 -1
- package/cpp/skia/include/private/base/SkTDArray.h +13 -1
- package/cpp/skia/include/private/base/SkTPin.h +1 -1
- package/cpp/skia/include/private/base/SkTo.h +1 -1
- package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +1 -1
- package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +1 -1
- package/cpp/skia/include/private/chromium/SkCodecsICCProfileChromium.h +52 -0
- package/cpp/skia/include/private/chromium/SkExifChromium.h +26 -0
- package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrImageContext.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +2 -1
- package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +1 -1
- package/cpp/skia/include/sksl/SkSLDebugTrace.h +1 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_icd.h +41 -51
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_layer.h +42 -53
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_platform.h +2 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_av1std.h +158 -154
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_av1std_decode.h +68 -65
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_av1std_encode.h +90 -87
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std.h +9 -9
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std_decode.h +2 -2
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std_encode.h +82 -79
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std.h +24 -24
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std_decode.h +2 -2
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std_encode.h +95 -96
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_vp9std.h +151 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_vp9std_decode.h +68 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codecs_common.h +1 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan.h +5 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_android.h +7 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_beta.h +291 -158
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_core.h +13174 -10113
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_directfb.h +23 -19
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_fuchsia.h +159 -165
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_ggp.h +22 -19
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_ios.h +3 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_macos.h +3 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_metal.h +94 -88
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_ohos.h +120 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_screen.h +55 -51
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_vi.h +18 -15
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_wayland.h +23 -19
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_win32.h +31 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_xcb.h +5 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_xlib.h +27 -27
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_xlib_xrandr.h +20 -16
- package/cpp/skia/include/utils/SkEventTracer.h +6 -1
- package/cpp/skia/include/utils/SkOrderedFontMgr.h +1 -1
- package/cpp/skia/include/utils/SkShadowUtils.h +1 -1
- package/cpp/skia/include/utils/SkTextUtils.h +1 -1
- package/cpp/skia/modules/jsonreader/SkJSONReader.cpp +20 -4
- package/cpp/skia/modules/skcms/src/Transform_inl.h +11 -15
- package/cpp/skia/modules/skcms/src/skcms_public.h +2 -0
- package/cpp/skia/modules/skottie/include/ExternalLayer.h +1 -1
- package/cpp/skia/modules/skottie/include/Skottie.h +1 -1
- package/cpp/skia/modules/skottie/include/SkottieProperty.h +1 -1
- package/cpp/skia/modules/skottie/include/SlotManager.h +1 -1
- package/cpp/skia/modules/skottie/include/TextShaper.h +1 -1
- package/cpp/skia/modules/skottie/src/SkottieValue.h +1 -1
- package/cpp/skia/modules/skottie/src/animator/Animator.h +1 -1
- package/cpp/skia/modules/skottie/src/text/Font.h +1 -1
- package/cpp/skia/modules/skottie/src/text/TextAdapter.h +1 -1
- package/cpp/skia/modules/skottie/src/text/TextAnimator.h +3 -2
- package/cpp/skia/modules/skottie/src/text/TextValue.h +1 -1
- package/cpp/skia/modules/skparagraph/include/DartTypes.h +1 -1
- package/cpp/skia/modules/skparagraph/include/FontArguments.h +1 -1
- package/cpp/skia/modules/skparagraph/include/FontCollection.h +5 -1
- package/cpp/skia/modules/skparagraph/include/Metrics.h +1 -1
- package/cpp/skia/modules/skparagraph/include/Paragraph.h +1 -1
- package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +1 -1
- package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +1 -1
- package/cpp/skia/modules/skparagraph/include/ParagraphPainter.h +1 -1
- package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +12 -5
- package/cpp/skia/modules/skparagraph/include/TextShadow.h +1 -1
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +1 -1
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGClipEffect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGColorFilter.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGDraw.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGEffectNode.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGGeometryEffect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGGeometryNode.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGGradient.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGGroup.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGImage.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGInvalidationController.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGMaskEffect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGMerge.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGNode.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGOpacityEffect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGPaint.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGPath.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGPlane.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGRect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGRenderEffect.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGRenderNode.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGScene.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGText.h +1 -1
- package/cpp/skia/modules/sksg/include/SkSGTransform.h +1 -1
- package/cpp/skia/modules/skshaper/include/SkShaper_coretext.h +8 -1
- package/cpp/skia/modules/svg/include/SkSVGFe.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeComponentTransfer.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeImage.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeMerge.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeMorphology.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFilter.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGGradient.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGImage.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGMask.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGPattern.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGText.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGUse.h +1 -1
- package/cpp/skia/src/base/SkAutoLocaleSetter.h +94 -0
- package/cpp/skia/src/base/SkUTF.h +1 -1
- package/lib/commonjs/skia/types/NativeBuffer/NativeBufferFactory.d.ts +10 -1
- package/lib/commonjs/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
- package/lib/commonjs/skia/types/WebGPU.d.ts +153 -0
- package/lib/commonjs/skia/types/WebGPU.js +6 -0
- package/lib/commonjs/skia/types/WebGPU.js.map +1 -0
- package/lib/commonjs/skia/types/index.d.ts +1 -0
- package/lib/commonjs/skia/types/index.js +11 -0
- package/lib/commonjs/skia/types/index.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkNativeBufferFactory.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkNativeBufferFactory.js +19 -0
- package/lib/commonjs/skia/web/JsiSkNativeBufferFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
- package/lib/module/skia/types/NativeBuffer/NativeBufferFactory.d.ts +10 -1
- package/lib/module/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
- package/lib/module/skia/types/WebGPU.d.ts +153 -0
- package/lib/module/skia/types/WebGPU.js +2 -0
- package/lib/module/skia/types/WebGPU.js.map +1 -0
- package/lib/module/skia/types/index.d.ts +1 -0
- package/lib/module/skia/types/index.js +1 -0
- package/lib/module/skia/types/index.js.map +1 -1
- package/lib/module/skia/web/JsiSkNativeBufferFactory.d.ts +1 -0
- package/lib/module/skia/web/JsiSkNativeBufferFactory.js +19 -0
- package/lib/module/skia/web/JsiSkNativeBufferFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkPath.js.map +1 -1
- package/lib/module/web/LoadSkiaWeb.js +1 -2
- package/lib/module/web/LoadSkiaWeb.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/types/WebGPU.d.ts +1 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkNativeBufferFactory.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/WebGPU.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/index.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkNativeBufferFactory.d.ts +1 -0
- package/lib/typescript/src/skia/types/NativeBuffer/NativeBufferFactory.d.ts +10 -1
- package/lib/typescript/src/skia/types/WebGPU.d.ts +153 -0
- package/lib/typescript/src/skia/types/index.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkNativeBufferFactory.d.ts +1 -0
- package/package.json +18 -15
- package/react-native-skia.podspec +59 -7
- package/src/skia/types/NativeBuffer/NativeBufferFactory.ts +10 -1
- package/src/skia/types/WebGPU.ts +186 -0
- package/src/skia/types/index.ts +1 -0
- package/src/skia/web/JsiSkNativeBufferFactory.ts +20 -0
- package/src/skia/web/JsiSkPath.ts +8 -2
- package/scripts/install-libs.js +0 -133
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#include "GPUSharedFence.h"
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
#if defined(__ANDROID__)
|
|
7
|
+
#include <fcntl.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
namespace rnwgpu {
|
|
11
|
+
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
// Kebab-case names matching the shared-fence-* feature strings (see Unions.h /
|
|
15
|
+
// GPUFeatures.h).
|
|
16
|
+
std::string sharedFenceTypeToString(wgpu::SharedFenceType type) {
|
|
17
|
+
switch (type) {
|
|
18
|
+
case wgpu::SharedFenceType::MTLSharedEvent:
|
|
19
|
+
return "mtl-shared-event";
|
|
20
|
+
case wgpu::SharedFenceType::SyncFD:
|
|
21
|
+
return "sync-fd";
|
|
22
|
+
case wgpu::SharedFenceType::VkSemaphoreOpaqueFD:
|
|
23
|
+
return "vk-semaphore-opaque-fd";
|
|
24
|
+
case wgpu::SharedFenceType::VkSemaphoreZirconHandle:
|
|
25
|
+
return "vk-semaphore-zircon-handle";
|
|
26
|
+
case wgpu::SharedFenceType::DXGISharedHandle:
|
|
27
|
+
return "dxgi-shared-handle";
|
|
28
|
+
case wgpu::SharedFenceType::EGLSync:
|
|
29
|
+
return "egl-sync";
|
|
30
|
+
default:
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
} // namespace
|
|
36
|
+
|
|
37
|
+
jsi::Value GPUSharedFence::exportInfo(jsi::Runtime &runtime, const jsi::Value &,
|
|
38
|
+
const jsi::Value *, size_t) {
|
|
39
|
+
wgpu::SharedFenceExportInfo info{};
|
|
40
|
+
uint64_t handle = 0;
|
|
41
|
+
|
|
42
|
+
#if defined(__APPLE__)
|
|
43
|
+
// Apple: the handle is an id<MTLSharedEvent> pointer.
|
|
44
|
+
wgpu::SharedFenceMTLSharedEventExportInfo mtlInfo{};
|
|
45
|
+
info.nextInChain = &mtlInfo;
|
|
46
|
+
_instance.ExportInfo(&info);
|
|
47
|
+
handle = reinterpret_cast<uint64_t>(mtlInfo.sharedEvent);
|
|
48
|
+
#elif defined(__ANDROID__)
|
|
49
|
+
// Android: the handle is an OS file descriptor (sync_fd). Dawn's ExportInfo
|
|
50
|
+
// returns a BORROWED fd: it is owned by the SharedFence and closed when the
|
|
51
|
+
// fence is destroyed. This exported handle is documented as caller-owned (the
|
|
52
|
+
// caller must close() it), so dup() it. Without the dup the same fd is closed
|
|
53
|
+
// twice (once by the caller and once by Dawn on fence destruction), tripping
|
|
54
|
+
// Android's fdsan (double-close abort).
|
|
55
|
+
wgpu::SharedFenceSyncFDExportInfo fdInfo{};
|
|
56
|
+
info.nextInChain = &fdInfo;
|
|
57
|
+
_instance.ExportInfo(&info);
|
|
58
|
+
int exportedFd = fdInfo.handle >= 0
|
|
59
|
+
? ::fcntl(fdInfo.handle, F_DUPFD_CLOEXEC, 0)
|
|
60
|
+
: fdInfo.handle;
|
|
61
|
+
handle = static_cast<uint64_t>(static_cast<uint32_t>(exportedFd));
|
|
62
|
+
#else
|
|
63
|
+
// react-native-skia only targets Apple (Metal) and Android (Vulkan). On any
|
|
64
|
+
// other platform there is no native handle convention to expose, so fail
|
|
65
|
+
// loudly rather than handing back a meaningless handle of 0.
|
|
66
|
+
throw jsi::JSError(runtime,
|
|
67
|
+
"GPUSharedFence::export(): unsupported platform (only "
|
|
68
|
+
"Apple/Metal and Android/Vulkan are supported)");
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
jsi::Object result(runtime);
|
|
72
|
+
result.setProperty(
|
|
73
|
+
runtime, "type",
|
|
74
|
+
jsi::String::createFromUtf8(runtime, sharedFenceTypeToString(info.type)));
|
|
75
|
+
result.setProperty(runtime, "handle",
|
|
76
|
+
jsi::BigInt::fromUint64(runtime, handle));
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
#include "jsi2/NativeObject.h"
|
|
7
|
+
|
|
8
|
+
#include "webgpu/webgpu_cpp.h"
|
|
9
|
+
|
|
10
|
+
namespace rnwgpu {
|
|
11
|
+
|
|
12
|
+
namespace jsi = facebook::jsi;
|
|
13
|
+
|
|
14
|
+
// Wraps a wgpu::SharedFence: a native GPU sync primitive (id<MTLSharedEvent> on
|
|
15
|
+
// Apple, sync-fd / VkSemaphore on Android).
|
|
16
|
+
class GPUSharedFence : public NativeObject<GPUSharedFence> {
|
|
17
|
+
public:
|
|
18
|
+
static constexpr const char *CLASS_NAME = "GPUSharedFence";
|
|
19
|
+
|
|
20
|
+
explicit GPUSharedFence(wgpu::SharedFence instance, std::string label)
|
|
21
|
+
: NativeObject(CLASS_NAME), _instance(std::move(instance)),
|
|
22
|
+
_label(std::move(label)) {}
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
std::string getBrand() { return CLASS_NAME; }
|
|
26
|
+
|
|
27
|
+
// export() -> { type, handle }: exposes the native handle (as a BigInt) so
|
|
28
|
+
// app code can wait on or signal the fence. The caller owns the returned
|
|
29
|
+
// handle (e.g. an exported sync-fd must be close()d).
|
|
30
|
+
jsi::Value exportInfo(jsi::Runtime &runtime, const jsi::Value &thisVal,
|
|
31
|
+
const jsi::Value *args, size_t count);
|
|
32
|
+
|
|
33
|
+
std::string getLabel() { return _label; }
|
|
34
|
+
void setLabel(const std::string &label) {
|
|
35
|
+
_label = label;
|
|
36
|
+
_instance.SetLabel(_label.c_str());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
|
|
40
|
+
installGetter(runtime, prototype, "__brand", &GPUSharedFence::getBrand);
|
|
41
|
+
installMethod(runtime, prototype, "export", &GPUSharedFence::exportInfo);
|
|
42
|
+
installGetterSetter(runtime, prototype, "label", &GPUSharedFence::getLabel,
|
|
43
|
+
&GPUSharedFence::setLabel);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
inline wgpu::SharedFence get() { return _instance; }
|
|
47
|
+
|
|
48
|
+
private:
|
|
49
|
+
wgpu::SharedFence _instance;
|
|
50
|
+
std::string _label;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#include "GPUSharedTextureMemory.h"
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <optional>
|
|
6
|
+
#include <stdexcept>
|
|
7
|
+
#include <string>
|
|
8
|
+
#include <vector>
|
|
9
|
+
|
|
10
|
+
#include "Convertors.h"
|
|
11
|
+
|
|
12
|
+
namespace rnwgpu {
|
|
13
|
+
|
|
14
|
+
std::shared_ptr<GPUTexture> GPUSharedTextureMemory::createTexture(
|
|
15
|
+
std::optional<std::shared_ptr<GPUTextureDescriptor>> descriptor) {
|
|
16
|
+
if (!descriptor.has_value() || descriptor.value() == nullptr) {
|
|
17
|
+
auto texture = _instance.CreateTexture();
|
|
18
|
+
// The texture aliases the shared memory; it doesn't own GPU allocation, so
|
|
19
|
+
// it doesn't report memory pressure.
|
|
20
|
+
return std::make_shared<GPUTexture>(texture, "", false);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
wgpu::TextureDescriptor desc{};
|
|
24
|
+
Convertor conv;
|
|
25
|
+
if (!conv(desc, descriptor.value())) {
|
|
26
|
+
throw std::runtime_error(
|
|
27
|
+
"GPUSharedTextureMemory::createTexture(): Error with "
|
|
28
|
+
"GPUTextureDescriptor");
|
|
29
|
+
}
|
|
30
|
+
auto texture = _instance.CreateTexture(&desc);
|
|
31
|
+
return std::make_shared<GPUTexture>(
|
|
32
|
+
texture, descriptor.value()->label.value_or(""), false);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void GPUSharedTextureMemory::beginAccess(
|
|
36
|
+
std::shared_ptr<GPUTexture> texture, bool initialized,
|
|
37
|
+
std::optional<std::vector<std::shared_ptr<GPUSharedFenceState>>> fences) {
|
|
38
|
+
if (!texture) {
|
|
39
|
+
throw std::runtime_error(
|
|
40
|
+
"GPUSharedTextureMemory::beginAccess(): texture is null");
|
|
41
|
+
}
|
|
42
|
+
wgpu::SharedTextureMemoryBeginAccessDescriptor desc{};
|
|
43
|
+
desc.initialized = initialized;
|
|
44
|
+
desc.concurrentRead = false;
|
|
45
|
+
|
|
46
|
+
// Built in lockstep so fenceCount covers both arrays, and kept in locals so
|
|
47
|
+
// the raw pointers outlive the synchronous BeginAccess() below.
|
|
48
|
+
std::vector<wgpu::SharedFence> rawFences;
|
|
49
|
+
std::vector<uint64_t> values;
|
|
50
|
+
if (fences.has_value()) {
|
|
51
|
+
for (const auto &state : *fences) {
|
|
52
|
+
if (state && state->fence) {
|
|
53
|
+
rawFences.push_back(state->fence->get());
|
|
54
|
+
values.push_back(state->signaledValue);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!rawFences.empty()) {
|
|
59
|
+
desc.fenceCount = rawFences.size();
|
|
60
|
+
desc.fences = rawFences.data();
|
|
61
|
+
desc.signaledValues = values.data();
|
|
62
|
+
} else {
|
|
63
|
+
desc.fenceCount = 0;
|
|
64
|
+
desc.fences = nullptr;
|
|
65
|
+
desc.signaledValues = nullptr;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#if defined(__ANDROID__)
|
|
69
|
+
// Dawn's Vulkan backend (AHardwareBuffer) validates that the begin-access
|
|
70
|
+
// descriptor chains a SharedTextureMemoryVkImageLayoutBeginState specifying
|
|
71
|
+
// the VkImageLayout to acquire the image into. UNDEFINED (= 0) on both ends
|
|
72
|
+
// is the canonical "no prior GPU producer" pattern: Dawn performs an
|
|
73
|
+
// external-queue acquire from VK_QUEUE_FAMILY_EXTERNAL which preserves the
|
|
74
|
+
// AHB contents, then transitions to whatever layout the texture's actual
|
|
75
|
+
// usage requires.
|
|
76
|
+
wgpu::SharedTextureMemoryVkImageLayoutBeginState vkLayout{};
|
|
77
|
+
vkLayout.oldLayout = 0;
|
|
78
|
+
vkLayout.newLayout = 0;
|
|
79
|
+
desc.nextInChain = &vkLayout;
|
|
80
|
+
#endif
|
|
81
|
+
|
|
82
|
+
auto status = _instance.BeginAccess(texture->get(), &desc);
|
|
83
|
+
if (!status) {
|
|
84
|
+
throw std::runtime_error("GPUSharedTextureMemory::beginAccess() failed");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
jsi::Value GPUSharedTextureMemory::endAccess(jsi::Runtime &runtime,
|
|
89
|
+
const jsi::Value &,
|
|
90
|
+
const jsi::Value *args,
|
|
91
|
+
size_t count) {
|
|
92
|
+
if (count < 1 || !args[0].isObject()) {
|
|
93
|
+
throw jsi::JSError(
|
|
94
|
+
runtime, "GPUSharedTextureMemory::endAccess(): expected (texture)");
|
|
95
|
+
}
|
|
96
|
+
auto texture = GPUTexture::fromValue(runtime, args[0]);
|
|
97
|
+
|
|
98
|
+
wgpu::SharedTextureMemoryEndAccessState state{};
|
|
99
|
+
|
|
100
|
+
#if defined(__ANDROID__)
|
|
101
|
+
// Dawn's Vulkan backend writes the released old/new VkImageLayouts back into
|
|
102
|
+
// a chained SharedTextureMemoryVkImageLayoutEndState; validation requires
|
|
103
|
+
// the chain even when the caller doesn't read the values.
|
|
104
|
+
wgpu::SharedTextureMemoryVkImageLayoutEndState vkLayout{};
|
|
105
|
+
state.nextInChain = &vkLayout;
|
|
106
|
+
#endif
|
|
107
|
+
|
|
108
|
+
auto status = _instance.EndAccess(texture->get(), &state);
|
|
109
|
+
if (!status) {
|
|
110
|
+
throw jsi::JSError(runtime, "GPUSharedTextureMemory::endAccess() failed");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Copy each wgpu::SharedFence (ref-counted) into its own GPUSharedFence
|
|
114
|
+
// wrapper before `state` is destroyed.
|
|
115
|
+
jsi::Array fences(runtime, state.fenceCount);
|
|
116
|
+
for (size_t i = 0; i < state.fenceCount; i++) {
|
|
117
|
+
wgpu::SharedFence fence = state.fences[i];
|
|
118
|
+
auto wrapper = std::make_shared<GPUSharedFence>(std::move(fence), "");
|
|
119
|
+
jsi::Object entry(runtime);
|
|
120
|
+
entry.setProperty(runtime, "fence",
|
|
121
|
+
GPUSharedFence::create(runtime, std::move(wrapper)));
|
|
122
|
+
entry.setProperty(
|
|
123
|
+
runtime, "signaledValue",
|
|
124
|
+
jsi::BigInt::fromUint64(runtime, state.signaledValues[i]));
|
|
125
|
+
fences.setValueAtIndex(runtime, i, std::move(entry));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
jsi::Object result(runtime);
|
|
129
|
+
result.setProperty(runtime, "initialized",
|
|
130
|
+
jsi::Value(static_cast<bool>(state.initialized)));
|
|
131
|
+
result.setProperty(runtime, "fences", std::move(fences));
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <optional>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
#include "jsi2/NativeObject.h"
|
|
10
|
+
|
|
11
|
+
#include "webgpu/webgpu_cpp.h"
|
|
12
|
+
|
|
13
|
+
#include "GPUSharedFence.h"
|
|
14
|
+
#include "GPUTexture.h"
|
|
15
|
+
#include "descriptors/GPUSharedFenceState.h"
|
|
16
|
+
#include "descriptors/GPUTextureDescriptor.h"
|
|
17
|
+
|
|
18
|
+
namespace rnwgpu {
|
|
19
|
+
|
|
20
|
+
namespace jsi = facebook::jsi;
|
|
21
|
+
|
|
22
|
+
class GPUSharedTextureMemory : public NativeObject<GPUSharedTextureMemory> {
|
|
23
|
+
public:
|
|
24
|
+
static constexpr const char *CLASS_NAME = "GPUSharedTextureMemory";
|
|
25
|
+
|
|
26
|
+
explicit GPUSharedTextureMemory(wgpu::SharedTextureMemory instance,
|
|
27
|
+
std::string label)
|
|
28
|
+
: NativeObject(CLASS_NAME), _instance(std::move(instance)),
|
|
29
|
+
_label(std::move(label)) {}
|
|
30
|
+
|
|
31
|
+
public:
|
|
32
|
+
std::string getBrand() { return CLASS_NAME; }
|
|
33
|
+
|
|
34
|
+
std::shared_ptr<GPUTexture> createTexture(
|
|
35
|
+
std::optional<std::shared_ptr<GPUTextureDescriptor>> descriptor);
|
|
36
|
+
|
|
37
|
+
// Optional `fences` are wait fences: Dawn waits for each to reach its
|
|
38
|
+
// signaledValue before writing the surface. Throws on failure.
|
|
39
|
+
void beginAccess(
|
|
40
|
+
std::shared_ptr<GPUTexture> texture, bool initialized,
|
|
41
|
+
std::optional<std::vector<std::shared_ptr<GPUSharedFenceState>>> fences);
|
|
42
|
+
|
|
43
|
+
// endAccess(texture) -> { initialized, fences: { fence, signaledValue }[] }
|
|
44
|
+
// Surfaces the fences Dawn produced for the access. Throws on failure.
|
|
45
|
+
jsi::Value endAccess(jsi::Runtime &runtime, const jsi::Value &thisVal,
|
|
46
|
+
const jsi::Value *args, size_t count);
|
|
47
|
+
|
|
48
|
+
std::string getLabel() { return _label; }
|
|
49
|
+
void setLabel(const std::string &label) {
|
|
50
|
+
_label = label;
|
|
51
|
+
_instance.SetLabel(_label.c_str());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
|
|
55
|
+
installGetter(runtime, prototype, "__brand",
|
|
56
|
+
&GPUSharedTextureMemory::getBrand);
|
|
57
|
+
installMethod(runtime, prototype, "createTexture",
|
|
58
|
+
&GPUSharedTextureMemory::createTexture);
|
|
59
|
+
installMethod(runtime, prototype, "beginAccess",
|
|
60
|
+
&GPUSharedTextureMemory::beginAccess);
|
|
61
|
+
installMethod(runtime, prototype, "endAccess",
|
|
62
|
+
&GPUSharedTextureMemory::endAccess);
|
|
63
|
+
installGetterSetter(runtime, prototype, "label",
|
|
64
|
+
&GPUSharedTextureMemory::getLabel,
|
|
65
|
+
&GPUSharedTextureMemory::setLabel);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
inline const wgpu::SharedTextureMemory get() { return _instance; }
|
|
69
|
+
|
|
70
|
+
private:
|
|
71
|
+
wgpu::SharedTextureMemory _instance;
|
|
72
|
+
std::string _label;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <utility>
|
|
6
|
+
#include <vector>
|
|
7
|
+
|
|
8
|
+
#include "jsi2/NativeObject.h"
|
|
9
|
+
|
|
10
|
+
namespace rnwgpu {
|
|
11
|
+
|
|
12
|
+
namespace jsi = facebook::jsi;
|
|
13
|
+
|
|
14
|
+
// DRAFT — compile-unverified. Minimal ImageBitmap holding decoded, unpremul
|
|
15
|
+
// RGBA8 pixels plus its dimensions. Produced by the global createImageBitmap()
|
|
16
|
+
// binding (see RNSkManager.cpp). Decoding is done with Skia's own codec, so no
|
|
17
|
+
// platform-specific image decoder is required.
|
|
18
|
+
//
|
|
19
|
+
// FOLLOW-UP: to make an ImageBitmap usable as a copyExternalImageToTexture
|
|
20
|
+
// source, uncomment the `source` field + ImageBitmap converter in
|
|
21
|
+
// rnwgpu/api/descriptors/GPUImageCopyExternalImage.h and upload `data()` in
|
|
22
|
+
// GPUQueue::copyExternalImageToTexture. That GPU wiring is intentionally out of
|
|
23
|
+
// scope for this draft.
|
|
24
|
+
class ImageBitmap : public NativeObject<ImageBitmap> {
|
|
25
|
+
public:
|
|
26
|
+
static constexpr const char *CLASS_NAME = "ImageBitmap";
|
|
27
|
+
|
|
28
|
+
ImageBitmap(std::vector<uint8_t> data, size_t width, size_t height)
|
|
29
|
+
: NativeObject(CLASS_NAME), _data(std::move(data)), _width(width),
|
|
30
|
+
_height(height) {}
|
|
31
|
+
|
|
32
|
+
size_t getWidth() { return _width; }
|
|
33
|
+
|
|
34
|
+
size_t getHeight() { return _height; }
|
|
35
|
+
|
|
36
|
+
// Per the spec, close() releases the bitmap's underlying pixels and zeroes
|
|
37
|
+
// its dimensions. Idempotent.
|
|
38
|
+
void close() {
|
|
39
|
+
_data.clear();
|
|
40
|
+
_data.shrink_to_fit();
|
|
41
|
+
_width = 0;
|
|
42
|
+
_height = 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Decoded, unpremultiplied RGBA8 pixels (row-major, width*height*4 bytes).
|
|
46
|
+
const std::vector<uint8_t> &data() const { return _data; }
|
|
47
|
+
|
|
48
|
+
static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
|
|
49
|
+
installGetter(runtime, prototype, "width", &ImageBitmap::getWidth);
|
|
50
|
+
installGetter(runtime, prototype, "height", &ImageBitmap::getHeight);
|
|
51
|
+
installMethod(runtime, prototype, "close", &ImageBitmap::close);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
size_t getMemoryPressure() override { return _data.size(); }
|
|
55
|
+
|
|
56
|
+
private:
|
|
57
|
+
std::vector<uint8_t> _data;
|
|
58
|
+
size_t _width;
|
|
59
|
+
size_t _height;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <stdexcept>
|
|
5
|
+
#include <string>
|
|
6
|
+
|
|
7
|
+
#include "webgpu/webgpu_cpp.h"
|
|
8
|
+
|
|
9
|
+
#if defined(__APPLE__)
|
|
10
|
+
#include "AppleNativeBuffer.h"
|
|
11
|
+
#elif defined(__ANDROID__)
|
|
12
|
+
#include <android/hardware_buffer.h>
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
namespace rnwgpu {
|
|
16
|
+
|
|
17
|
+
// Import a Skia NativeBuffer pointer (a CVPixelBufferRef on Apple, an
|
|
18
|
+
// AHardwareBuffer* on Android, as returned by Skia.NativeBuffer.MakeFromImage /
|
|
19
|
+
// MakeTestBuffer) as a wgpu::SharedTextureMemory on `device`. When non-null,
|
|
20
|
+
// outWidth/outHeight receive the surface dimensions. Returns a null
|
|
21
|
+
// SharedTextureMemory if the import itself fails (the caller decides how to
|
|
22
|
+
// report that); throws std::runtime_error for pre-import failures (a buffer
|
|
23
|
+
// with no IOSurface, or an unsupported platform).
|
|
24
|
+
//
|
|
25
|
+
// The platform-specific chained descriptor only needs to outlive the
|
|
26
|
+
// ImportSharedTextureMemory call, so it lives entirely within this function.
|
|
27
|
+
// Shared by GPUDevice::importSharedTextureMemory and
|
|
28
|
+
// GPUExternalTexture::Create.
|
|
29
|
+
inline wgpu::SharedTextureMemory importNativeBufferAsSharedTextureMemory(
|
|
30
|
+
const wgpu::Device &device, void *bufferPtr, const std::string &label,
|
|
31
|
+
uint32_t *outWidth, uint32_t *outHeight) {
|
|
32
|
+
wgpu::SharedTextureMemoryDescriptor memDesc{};
|
|
33
|
+
if (!label.empty()) {
|
|
34
|
+
memDesc.label = wgpu::StringView(label.c_str(), label.size());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
uint32_t width = 0;
|
|
38
|
+
uint32_t height = 0;
|
|
39
|
+
wgpu::SharedTextureMemory memory;
|
|
40
|
+
|
|
41
|
+
#if defined(__APPLE__)
|
|
42
|
+
// Skia's NativeBuffer is a CVPixelBufferRef; extract its backing IOSurface
|
|
43
|
+
// (and dimensions) in Objective-C++ since CoreVideo isn't available here.
|
|
44
|
+
void *ioSurface = GetIOSurfaceFromNativeBuffer(bufferPtr, &width, &height);
|
|
45
|
+
if (ioSurface == nullptr) {
|
|
46
|
+
throw std::runtime_error(
|
|
47
|
+
"importNativeBufferAsSharedTextureMemory(): native "
|
|
48
|
+
"buffer has no IOSurface");
|
|
49
|
+
}
|
|
50
|
+
wgpu::SharedTextureMemoryIOSurfaceDescriptor platformDesc{};
|
|
51
|
+
platformDesc.ioSurface = ioSurface;
|
|
52
|
+
// Default off: enabling it propagates StorageBinding into properties.usage,
|
|
53
|
+
// which then forces memory.createTexture() (no-descriptor form) to validate
|
|
54
|
+
// the format against storage capabilities. bgra8unorm (the standard
|
|
55
|
+
// CVPixelBuffer format) only supports storage when the device opts into the
|
|
56
|
+
// bgra8unorm-storage feature, so unconditionally setting this here breaks the
|
|
57
|
+
// common sample-only case.
|
|
58
|
+
platformDesc.allowStorageBinding = false;
|
|
59
|
+
memDesc.nextInChain = &platformDesc;
|
|
60
|
+
memory = device.ImportSharedTextureMemory(&memDesc);
|
|
61
|
+
#elif defined(__ANDROID__)
|
|
62
|
+
auto *ahb = reinterpret_cast<AHardwareBuffer *>(bufferPtr);
|
|
63
|
+
AHardwareBuffer_Desc ahbDesc = {};
|
|
64
|
+
AHardwareBuffer_describe(ahb, &ahbDesc);
|
|
65
|
+
width = ahbDesc.width;
|
|
66
|
+
height = ahbDesc.height;
|
|
67
|
+
wgpu::SharedTextureMemoryAHardwareBufferDescriptor platformDesc{};
|
|
68
|
+
platformDesc.handle = ahb;
|
|
69
|
+
memDesc.nextInChain = &platformDesc;
|
|
70
|
+
memory = device.ImportSharedTextureMemory(&memDesc);
|
|
71
|
+
#else
|
|
72
|
+
(void)device;
|
|
73
|
+
(void)bufferPtr;
|
|
74
|
+
throw std::runtime_error(
|
|
75
|
+
"importNativeBufferAsSharedTextureMemory(): unsupported platform");
|
|
76
|
+
#endif
|
|
77
|
+
|
|
78
|
+
if (outWidth != nullptr) {
|
|
79
|
+
*outWidth = width;
|
|
80
|
+
}
|
|
81
|
+
if (outHeight != nullptr) {
|
|
82
|
+
*outHeight = height;
|
|
83
|
+
}
|
|
84
|
+
return memory;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
} // namespace rnwgpu
|
|
@@ -20,7 +20,7 @@ struct GPUBindGroupEntry {
|
|
|
20
20
|
std::shared_ptr<GPUSampler> sampler = nullptr;
|
|
21
21
|
std::shared_ptr<GPUTextureView> textureView = nullptr;
|
|
22
22
|
std::shared_ptr<GPUBufferBinding> buffer = nullptr;
|
|
23
|
-
|
|
23
|
+
std::shared_ptr<GPUExternalTexture> externalTexture = nullptr;
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
} // namespace rnwgpu
|
|
@@ -45,6 +45,9 @@ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUBindGroupEntry>> {
|
|
|
45
45
|
} else if (obj.hasNativeState<rnwgpu::GPUTextureView>(runtime)) {
|
|
46
46
|
result->textureView =
|
|
47
47
|
obj.getNativeState<rnwgpu::GPUTextureView>(runtime);
|
|
48
|
+
} else if (obj.hasNativeState<rnwgpu::GPUExternalTexture>(runtime)) {
|
|
49
|
+
result->externalTexture =
|
|
50
|
+
obj.getNativeState<rnwgpu::GPUExternalTexture>(runtime);
|
|
48
51
|
} else if (obj.hasNativeState<rnwgpu::GPUBuffer>(runtime)) {
|
|
49
52
|
auto binding = std::make_shared<rnwgpu::GPUBufferBinding>();
|
|
50
53
|
binding->buffer = obj.getNativeState<rnwgpu::GPUBuffer>(runtime);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <string>
|
|
5
|
+
#include <vector>
|
|
6
|
+
|
|
7
|
+
#include "webgpu/webgpu_cpp.h"
|
|
8
|
+
|
|
9
|
+
#include "jsi2/JSIConverter.h"
|
|
10
|
+
|
|
11
|
+
namespace jsi = facebook::jsi;
|
|
12
|
+
|
|
13
|
+
namespace rnwgpu {
|
|
14
|
+
|
|
15
|
+
// Non-standard, Dawn-only. Mirrors wgpu::DawnTogglesDescriptor field-for-field
|
|
16
|
+
// so the mapping to the native chained struct is 1:1. Chained onto the
|
|
17
|
+
// wgpu::DeviceDescriptor in GPUAdapter::requestDevice.
|
|
18
|
+
struct GPUDawnTogglesDescriptor {
|
|
19
|
+
std::optional<std::vector<std::string>> enabledToggles; // Iterable<string>
|
|
20
|
+
std::optional<std::vector<std::string>> disabledToggles; // Iterable<string>
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
} // namespace rnwgpu
|
|
24
|
+
|
|
25
|
+
namespace rnwgpu {
|
|
26
|
+
|
|
27
|
+
template <>
|
|
28
|
+
struct JSIConverter<std::shared_ptr<rnwgpu::GPUDawnTogglesDescriptor>> {
|
|
29
|
+
static std::shared_ptr<rnwgpu::GPUDawnTogglesDescriptor>
|
|
30
|
+
fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
|
|
31
|
+
auto result = std::make_unique<rnwgpu::GPUDawnTogglesDescriptor>();
|
|
32
|
+
if (!outOfBounds && arg.isObject()) {
|
|
33
|
+
auto value = arg.getObject(runtime);
|
|
34
|
+
if (value.hasProperty(runtime, "enabledToggles")) {
|
|
35
|
+
auto prop = value.getProperty(runtime, "enabledToggles");
|
|
36
|
+
result->enabledToggles =
|
|
37
|
+
JSIConverter<std::optional<std::vector<std::string>>>::fromJSI(
|
|
38
|
+
runtime, prop, false);
|
|
39
|
+
}
|
|
40
|
+
if (value.hasProperty(runtime, "disabledToggles")) {
|
|
41
|
+
auto prop = value.getProperty(runtime, "disabledToggles");
|
|
42
|
+
result->disabledToggles =
|
|
43
|
+
JSIConverter<std::optional<std::vector<std::string>>>::fromJSI(
|
|
44
|
+
runtime, prop, false);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
static jsi::Value
|
|
50
|
+
toJSI(jsi::Runtime &runtime,
|
|
51
|
+
std::shared_ptr<rnwgpu::GPUDawnTogglesDescriptor> arg) {
|
|
52
|
+
throw std::runtime_error("Invalid GPUDawnTogglesDescriptor::toJSI()");
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
} // namespace rnwgpu
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
#include "jsi2/JSIConverter.h"
|
|
11
11
|
|
|
12
|
+
#include "GPUDawnTogglesDescriptor.h"
|
|
12
13
|
#include "GPUQueueDescriptor.h"
|
|
13
14
|
|
|
14
15
|
namespace jsi = facebook::jsi;
|
|
@@ -23,6 +24,9 @@ struct GPUDeviceDescriptor {
|
|
|
23
24
|
std::optional<std::shared_ptr<GPUQueueDescriptor>>
|
|
24
25
|
defaultQueue; // GPUQueueDescriptor
|
|
25
26
|
std::optional<std::string> label; // string
|
|
27
|
+
// Non-standard Dawn-only device toggles, chained onto the wgpu::Device
|
|
28
|
+
// descriptor in GPUAdapter::requestDevice.
|
|
29
|
+
std::optional<std::shared_ptr<GPUDawnTogglesDescriptor>> dawnToggles;
|
|
26
30
|
};
|
|
27
31
|
|
|
28
32
|
} // namespace rnwgpu
|
|
@@ -86,6 +90,12 @@ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUDeviceDescriptor>> {
|
|
|
86
90
|
result->label = JSIConverter<std::optional<std::string>>::fromJSI(
|
|
87
91
|
runtime, prop, false);
|
|
88
92
|
}
|
|
93
|
+
if (value.hasProperty(runtime, "dawnToggles")) {
|
|
94
|
+
auto prop = value.getProperty(runtime, "dawnToggles");
|
|
95
|
+
result->dawnToggles = JSIConverter<std::optional<
|
|
96
|
+
std::shared_ptr<GPUDawnTogglesDescriptor>>>::fromJSI(runtime, prop,
|
|
97
|
+
false);
|
|
98
|
+
}
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
return result;
|