@shopify/react-native-skia 1.3.13 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +9 -4
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +6 -0
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +81 -0
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +40 -0
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkPath.h +29 -19
- package/cpp/api/JsiSkRuntimeEffect.h +7 -0
- package/cpp/api/JsiSkiaContext.h +79 -0
- package/cpp/rnskia/RNSkPlatformContext.h +4 -0
- package/cpp/rnskia/SkiaContext.h +22 -0
- package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -2
- package/cpp/skia/include/android/SkImageAndroid.h +1 -1
- package/cpp/skia/include/android/SkSurfaceAndroid.h +1 -1
- package/cpp/skia/include/codec/SkAndroidCodec.h +13 -9
- package/cpp/skia/include/codec/SkCodec.h +28 -5
- package/cpp/skia/include/core/SkArc.h +69 -0
- package/cpp/skia/include/core/SkBitmap.h +10 -0
- package/cpp/skia/include/core/SkBlender.h +2 -3
- package/cpp/skia/include/core/SkCanvas.h +86 -16
- package/cpp/skia/include/core/SkCapabilities.h +0 -4
- package/cpp/skia/include/core/SkColorFilter.h +4 -4
- package/cpp/skia/include/core/SkColorPriv.h +5 -7
- package/cpp/skia/include/core/SkColorType.h +2 -0
- package/cpp/skia/include/core/SkFlattenable.h +1 -1
- package/cpp/skia/include/core/SkFontArguments.h +3 -1
- package/cpp/skia/include/core/SkFontParameters.h +3 -2
- package/cpp/skia/include/core/SkFourByteTag.h +19 -0
- package/cpp/skia/include/core/SkImage.h +41 -1
- package/cpp/skia/include/core/SkImageGenerator.h +0 -5
- package/cpp/skia/include/core/SkImageInfo.h +20 -0
- package/cpp/skia/include/core/SkM44.h +1 -1
- package/cpp/skia/include/core/SkMatrix.h +2 -1
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPaint.h +1 -1
- package/cpp/skia/include/core/SkPath.h +20 -6
- package/cpp/skia/include/core/SkPathMeasure.h +1 -0
- package/cpp/skia/include/core/SkPicture.h +5 -5
- package/cpp/skia/include/core/SkPoint3.h +2 -12
- package/cpp/skia/include/core/SkRRect.h +5 -0
- package/cpp/skia/include/core/SkRect.h +5 -16
- package/cpp/skia/include/core/SkRefCnt.h +2 -0
- package/cpp/skia/include/core/SkScalar.h +20 -32
- package/cpp/skia/include/core/SkShader.h +17 -0
- package/cpp/skia/include/core/SkSize.h +2 -1
- package/cpp/skia/include/core/SkStream.h +2 -3
- package/cpp/skia/include/core/SkStrokeRec.h +6 -1
- package/cpp/skia/include/core/SkSurface.h +13 -4
- package/cpp/skia/include/core/SkSurfaceProps.h +5 -0
- package/cpp/skia/include/core/SkSwizzle.h +3 -1
- package/cpp/skia/include/core/SkTypeface.h +1 -0
- package/cpp/skia/include/core/SkTypes.h +1 -19
- package/cpp/skia/include/core/SkUnPreMultiply.h +4 -5
- package/cpp/skia/include/core/SkVertices.h +4 -2
- package/cpp/skia/include/docs/SkPDFDocument.h +11 -14
- package/cpp/skia/include/effects/SkHighContrastFilter.h +6 -6
- package/cpp/skia/include/effects/SkImageFilters.h +49 -23
- package/cpp/skia/include/effects/SkRuntimeEffect.h +51 -70
- package/cpp/skia/include/effects/SkShaderMaskFilter.h +2 -0
- package/cpp/skia/include/effects/SkTableMaskFilter.h +2 -0
- package/cpp/skia/include/gpu/GrBackendSemaphore.h +2 -120
- package/cpp/skia/include/gpu/GrBackendSurface.h +2 -466
- package/cpp/skia/include/gpu/GrContextOptions.h +2 -368
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +2 -179
- package/cpp/skia/include/gpu/GrDirectContext.h +2 -1011
- package/cpp/skia/include/gpu/GrDriverBugWorkarounds.h +2 -47
- package/cpp/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +2 -41
- package/cpp/skia/include/gpu/GrRecordingContext.h +2 -279
- package/cpp/skia/include/gpu/GrTypes.h +2 -238
- package/cpp/skia/include/gpu/GrYUVABackendTextures.h +2 -118
- package/cpp/skia/include/gpu/d3d/GrD3DBackendContext.h +2 -29
- package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -242
- package/cpp/skia/include/gpu/ganesh/GrBackendSemaphore.h +80 -0
- package/cpp/skia/include/gpu/ganesh/GrBackendSurface.h +412 -0
- package/cpp/skia/include/gpu/ganesh/GrContextOptions.h +386 -0
- package/cpp/skia/include/gpu/ganesh/GrContextThreadSafeProxy.h +175 -0
- package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +993 -0
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkarounds.h +53 -0
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +45 -0
- package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrRecordingContext.h +285 -0
- package/cpp/skia/include/gpu/ganesh/GrTypes.h +177 -0
- package/cpp/skia/include/gpu/ganesh/GrYUVABackendTextures.h +130 -0
- package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +1 -1
- package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
- package/cpp/skia/include/gpu/ganesh/d3d/GrD3DBackendContext.h +35 -0
- package/cpp/skia/include/gpu/ganesh/d3d/GrD3DTypes.h +248 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleHelpers.h +17 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleInterface.h +45 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +1 -1
- package/cpp/skia/include/gpu/ganesh/gl/GrGLConfig.h +69 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLExtensions.h +79 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLFunctions.h +306 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLInterface.h +338 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLMakeWebGLInterface.h +19 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLTypes.h +219 -0
- package/cpp/skia/include/gpu/{gl → ganesh/gl}/egl/GrGLMakeEGLInterface.h +2 -2
- package/cpp/skia/include/gpu/ganesh/gl/epoxy/GrGLMakeEpoxyEGLInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/ios/GrGLMakeIOSInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/mac/GrGLMakeMacInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/win/GrGLMakeWinInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/mock/GrMockTypes.h +166 -0
- package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlBackendContext.h +2 -2
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSemaphore.h +23 -0
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSurface.h +44 -0
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlDirectContext.h +30 -0
- package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlTypes.h +1 -3
- package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +2 -2
- package/cpp/skia/include/gpu/ganesh/vk/GrBackendDrawableInfo.h +2 -2
- package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +1 -1
- package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +7 -3
- package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +6 -3
- package/cpp/skia/include/gpu/ganesh/vk/GrVkTypes.h +101 -0
- package/cpp/skia/include/gpu/gl/GrGLAssembleHelpers.h +2 -9
- package/cpp/skia/include/gpu/gl/GrGLAssembleInterface.h +2 -38
- package/cpp/skia/include/gpu/gl/GrGLConfig.h +2 -73
- package/cpp/skia/include/gpu/gl/GrGLExtensions.h +2 -72
- package/cpp/skia/include/gpu/gl/GrGLFunctions.h +2 -301
- package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -332
- package/cpp/skia/include/gpu/gl/GrGLTypes.h +2 -213
- package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +20 -41
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +18 -118
- package/cpp/skia/include/gpu/graphite/Context.h +122 -44
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +30 -3
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +45 -17
- package/cpp/skia/include/gpu/graphite/Image.h +56 -54
- package/cpp/skia/include/gpu/graphite/Recorder.h +68 -14
- package/cpp/skia/include/gpu/graphite/Recording.h +3 -3
- package/cpp/skia/include/gpu/graphite/Surface.h +6 -2
- package/cpp/skia/include/gpu/graphite/TextureInfo.h +36 -117
- package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +108 -6
- package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +4 -1
- package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +41 -25
- package/cpp/skia/include/gpu/graphite/precompile/PaintOptions.h +197 -0
- package/cpp/skia/include/gpu/graphite/precompile/Precompile.h +48 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileBase.h +84 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileBlender.h +56 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileColorFilter.h +85 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileImageFilter.h +119 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileMaskFilter.h +51 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileRuntimeEffect.h +47 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +170 -0
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +24 -2
- package/cpp/skia/include/gpu/mock/GrMockTypes.h +2 -157
- package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +2 -0
- package/cpp/skia/include/gpu/vk/GrVkTypes.h +2 -101
- package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +13 -8
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +9 -3
- package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +4 -1
- package/cpp/skia/include/gpu/vk/VulkanTypes.h +25 -8
- package/cpp/skia/include/ports/SkFontMgr_Fontations.h +20 -0
- package/cpp/skia/include/ports/SkFontMgr_android.h +7 -0
- package/cpp/skia/include/ports/SkImageGeneratorCG.h +3 -1
- package/cpp/skia/include/ports/SkTypeface_win.h +0 -17
- package/cpp/skia/include/private/SkEncodedInfo.h +8 -2
- package/cpp/skia/include/private/SkExif.h +28 -75
- package/cpp/skia/include/private/SkGainmapInfo.h +47 -7
- package/cpp/skia/include/private/SkJpegMetadataDecoder.h +12 -0
- package/cpp/skia/include/private/SkPathRef.h +52 -44
- package/cpp/skia/include/private/SkXmp.h +13 -4
- package/cpp/skia/include/private/base/SkASAN.h +56 -0
- package/cpp/skia/include/private/base/SkAlign.h +5 -0
- package/cpp/skia/include/private/base/SkContainers.h +10 -2
- package/cpp/skia/include/private/base/SkFeatures.h +22 -1
- package/cpp/skia/include/private/base/SkFloatingPoint.h +51 -65
- package/cpp/skia/include/private/base/SkMacros.h +67 -0
- package/cpp/skia/include/private/base/SkMalloc.h +8 -0
- package/cpp/skia/include/private/base/SkPoint_impl.h +2 -11
- package/cpp/skia/include/private/base/SkTArray.h +108 -23
- package/cpp/skia/include/private/base/SkTFitsIn.h +1 -12
- package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +1 -1
- package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +0 -39
- package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +1 -1
- package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +3 -3
- package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +1 -4
- package/cpp/skia/include/private/chromium/Slug.h +5 -11
- package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +2 -2
- package/cpp/skia/include/private/gpu/ganesh/GrTextureGenerator.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +21 -93
- package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +2 -2
- package/cpp/skia/include/utils/SkCustomTypeface.h +1 -0
- package/cpp/skia/include/utils/SkNWayCanvas.h +1 -1
- package/cpp/skia/include/utils/SkParse.h +0 -1
- package/cpp/skia/modules/skcms/src/Transform_inl.h +59 -56
- package/cpp/skia/modules/skcms/src/skcms_Transform.h +3 -0
- package/cpp/skia/modules/skcms/src/skcms_internals.h +2 -0
- package/cpp/skia/modules/skcms/src/skcms_public.h +46 -14
- package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +15 -1
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +2 -2
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +2 -4
- package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
- package/cpp/skia/modules/skshaper/include/SkShaper.h +316 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_coretext.h +19 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_factory.h +41 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_harfbuzz.h +39 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_skunicode.h +28 -0
- package/cpp/skia/modules/skunicode/include/SkUnicode.h +6 -23
- package/cpp/skia/modules/svg/include/SkSVGAttribute.h +0 -3
- package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +12 -2
- package/cpp/skia/modules/svg/include/SkSVGCircle.h +13 -0
- package/cpp/skia/modules/svg/include/SkSVGClipPath.h +6 -0
- package/cpp/skia/modules/svg/include/SkSVGContainer.h +17 -1
- package/cpp/skia/modules/svg/include/SkSVGDOM.h +25 -15
- package/cpp/skia/modules/svg/include/SkSVGEllipse.h +13 -2
- package/cpp/skia/modules/svg/include/SkSVGFe.h +11 -2
- package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeComponentTransfer.h +82 -0
- package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +10 -1
- package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeImage.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGFeMerge.h +63 -0
- package/cpp/skia/modules/svg/include/SkSVGFeMorphology.h +8 -0
- package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFilter.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +3 -3
- package/cpp/skia/modules/svg/include/SkSVGGradient.h +10 -2
- package/cpp/skia/modules/svg/include/SkSVGImage.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGLine.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGMask.h +6 -0
- package/cpp/skia/modules/svg/include/SkSVGNode.h +13 -2
- package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGPath.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGPattern.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGPoly.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRect.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +43 -7
- package/cpp/skia/modules/svg/include/SkSVGSVG.h +7 -0
- package/cpp/skia/modules/svg/include/SkSVGShape.h +8 -2
- package/cpp/skia/modules/svg/include/SkSVGStop.h +5 -3
- package/cpp/skia/modules/svg/include/SkSVGText.h +8 -2
- package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +8 -0
- package/cpp/skia/modules/svg/include/SkSVGTypes.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGUse.h +7 -0
- package/cpp/skia/src/base/SkMathPriv.h +337 -0
- package/cpp/skia/src/base/SkTLazy.h +208 -0
- package/cpp/skia/src/core/SkTHash.h +58 -7
- package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +3 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +3 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +7 -0
- package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +7 -2
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +78 -0
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +20 -4
- package/lib/commonjs/renderer/HostConfig.js.map +1 -1
- package/lib/commonjs/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/commonjs/skia/types/Paragraph/TextStyle.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +6 -1
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +4 -1
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/web/WithSkiaWeb.d.ts +11 -4
- package/lib/commonjs/web/WithSkiaWeb.js +3 -2
- package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
- package/lib/module/renderer/HostConfig.js.map +1 -1
- package/lib/module/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/module/skia/types/Paragraph/TextStyle.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +6 -1
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +4 -1
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/web/WithSkiaWeb.d.ts +11 -4
- package/lib/module/web/WithSkiaWeb.js +3 -2
- package/lib/module/web/WithSkiaWeb.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -0
- package/lib/typescript/lib/commonjs/web/WithSkiaWeb.d.ts +2 -1
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -0
- package/lib/typescript/lib/module/web/WithSkiaWeb.d.ts +2 -1
- package/lib/typescript/src/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/typescript/src/skia/types/Skia.d.ts +6 -1
- package/lib/typescript/src/web/WithSkiaWeb.d.ts +11 -4
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libskparagraph.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libskunicode_core.a +0 -0
- package/libs/android/arm64-v8a/libskunicode_icu.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode_core.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode_icu.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libskparagraph.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libskunicode_core.a +0 -0
- package/libs/android/x86/libskunicode_icu.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libskparagraph.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libskunicode_core.a +0 -0
- package/libs/android/x86_64/libskunicode_icu.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/Info.plist +5 -5
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/Info.plist +5 -5
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/Info.plist +5 -5
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libsvg.xcframework/Info.plist +5 -5
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +3 -5
- package/react-native-skia.podspec +2 -1
- package/src/renderer/HostConfig.ts +5 -1
- package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +5 -2
- package/src/renderer/__tests__/e2e/Paths.spec.tsx +12 -5
- package/src/renderer/__tests__/e2e/SDF.spec.tsx +1 -1
- package/src/renderer/__tests__/e2e/Snapshot.spec.tsx +1 -1
- package/src/skia/types/Paragraph/TextStyle.ts +2 -2
- package/src/skia/types/Skia.ts +7 -1
- package/src/skia/web/JsiSkia.ts +3 -0
- package/src/web/WithSkiaWeb.tsx +17 -6
- package/cpp/skia/include/core/SkDrawLooper.h +0 -135
- package/cpp/skia/include/effects/SkBlurDrawLooper.h +0 -26
- package/cpp/skia/include/effects/SkLayerDrawLooper.h +0 -161
- package/cpp/skia/include/gpu/gl/GrGLConfig_chrome.h +0 -14
- package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +0 -84
- package/cpp/skia/include/gpu/vk/GrVkExtensions.h +0 -15
- package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +0 -15
- package/cpp/skia/include/ports/SkFontMgr_indirect.h +0 -102
- package/cpp/skia/include/ports/SkRemotableFontMgr.h +0 -139
- package/cpp/skia/include/private/base/SkFloatBits.h +0 -90
- package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +0 -69
- package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +0 -54
- package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +0 -95
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +0 -83
- package/cpp/skia/src/core/SkPathEnums.h +0 -25
- package/cpp/skia/src/core/SkPathPriv.h +0 -540
- package/libs/android/arm64-v8a/libskunicode.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode.a +0 -0
- package/libs/android/x86/libskunicode.a +0 -0
- package/libs/android/x86_64/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/Info.plist +0 -46
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
- /package/cpp/skia/include/gpu/{gl → ganesh/gl}/glx/GrGLMakeGLXInterface.h +0 -0
@@ -4,1014 +4,5 @@
|
|
4
4
|
* Use of this source code is governed by a BSD-style license that can be
|
5
5
|
* found in the LICENSE file.
|
6
6
|
*/
|
7
|
-
|
8
|
-
#
|
9
|
-
#define GrDirectContext_DEFINED
|
10
|
-
|
11
|
-
#include "include/core/SkColor.h"
|
12
|
-
#include "include/core/SkRefCnt.h"
|
13
|
-
#include "include/core/SkTypes.h"
|
14
|
-
#include "include/gpu/GpuTypes.h"
|
15
|
-
#include "include/gpu/GrContextOptions.h"
|
16
|
-
#include "include/gpu/GrRecordingContext.h"
|
17
|
-
#include "include/gpu/GrTypes.h"
|
18
|
-
|
19
|
-
#include <chrono>
|
20
|
-
#include <cstddef>
|
21
|
-
#include <cstdint>
|
22
|
-
#include <memory>
|
23
|
-
#include <string_view>
|
24
|
-
|
25
|
-
class GrAtlasManager;
|
26
|
-
class GrBackendSemaphore;
|
27
|
-
class GrBackendFormat;
|
28
|
-
class GrBackendTexture;
|
29
|
-
class GrBackendRenderTarget;
|
30
|
-
class GrClientMappedBufferManager;
|
31
|
-
class GrContextThreadSafeProxy;
|
32
|
-
class GrDirectContextPriv;
|
33
|
-
class GrGpu;
|
34
|
-
class GrResourceCache;
|
35
|
-
class GrResourceProvider;
|
36
|
-
class SkData;
|
37
|
-
class SkImage;
|
38
|
-
class SkPixmap;
|
39
|
-
class SkSurface;
|
40
|
-
class SkTaskGroup;
|
41
|
-
class SkTraceMemoryDump;
|
42
|
-
enum SkColorType : int;
|
43
|
-
enum class SkTextureCompressionType;
|
44
|
-
struct GrMockOptions;
|
45
|
-
struct GrD3DBackendContext; // IWYU pragma: keep
|
46
|
-
struct GrMtlBackendContext; // IWYU pragma: keep
|
47
|
-
|
48
|
-
namespace skgpu {
|
49
|
-
class MutableTextureState;
|
50
|
-
#if !defined(SK_ENABLE_OPTIMIZE_SIZE)
|
51
|
-
namespace ganesh { class SmallPathAtlasMgr; }
|
52
|
-
#endif
|
53
|
-
}
|
54
|
-
namespace sktext { namespace gpu { class StrikeCache; } }
|
55
|
-
namespace wgpu { class Device; } // IWYU pragma: keep
|
56
|
-
|
57
|
-
namespace SkSurfaces {
|
58
|
-
enum class BackendSurfaceAccess;
|
59
|
-
}
|
60
|
-
|
61
|
-
class SK_API GrDirectContext : public GrRecordingContext {
|
62
|
-
public:
|
63
|
-
|
64
|
-
#ifdef SK_METAL
|
65
|
-
/**
|
66
|
-
* Makes a GrDirectContext which uses Metal as the backend. The GrMtlBackendContext contains a
|
67
|
-
* MTLDevice and MTLCommandQueue which should be used by the backend. These objects must
|
68
|
-
* have their own ref which will be released when the GrMtlBackendContext is destroyed.
|
69
|
-
* Ganesh will take its own ref on the objects which will be released when the GrDirectContext
|
70
|
-
* is destroyed.
|
71
|
-
*/
|
72
|
-
static sk_sp<GrDirectContext> MakeMetal(const GrMtlBackendContext&, const GrContextOptions&);
|
73
|
-
static sk_sp<GrDirectContext> MakeMetal(const GrMtlBackendContext&);
|
74
|
-
/**
|
75
|
-
* Deprecated.
|
76
|
-
*
|
77
|
-
* Makes a GrDirectContext which uses Metal as the backend. The device parameter is an
|
78
|
-
* MTLDevice and queue is an MTLCommandQueue which should be used by the backend. These objects
|
79
|
-
* must have a ref on them that can be transferred to Ganesh, which will release the ref
|
80
|
-
* when the GrDirectContext is destroyed.
|
81
|
-
*/
|
82
|
-
static sk_sp<GrDirectContext> MakeMetal(void* device, void* queue, const GrContextOptions&);
|
83
|
-
static sk_sp<GrDirectContext> MakeMetal(void* device, void* queue);
|
84
|
-
#endif
|
85
|
-
|
86
|
-
#ifdef SK_DIRECT3D
|
87
|
-
/**
|
88
|
-
* Makes a GrDirectContext which uses Direct3D as the backend. The Direct3D context
|
89
|
-
* must be kept alive until the returned GrDirectContext is first destroyed or abandoned.
|
90
|
-
*/
|
91
|
-
static sk_sp<GrDirectContext> MakeDirect3D(const GrD3DBackendContext&, const GrContextOptions&);
|
92
|
-
static sk_sp<GrDirectContext> MakeDirect3D(const GrD3DBackendContext&);
|
93
|
-
#endif
|
94
|
-
|
95
|
-
static sk_sp<GrDirectContext> MakeMock(const GrMockOptions*, const GrContextOptions&);
|
96
|
-
static sk_sp<GrDirectContext> MakeMock(const GrMockOptions*);
|
97
|
-
|
98
|
-
~GrDirectContext() override;
|
99
|
-
|
100
|
-
/**
|
101
|
-
* The context normally assumes that no outsider is setting state
|
102
|
-
* within the underlying 3D API's context/device/whatever. This call informs
|
103
|
-
* the context that the state was modified and it should resend. Shouldn't
|
104
|
-
* be called frequently for good performance.
|
105
|
-
* The flag bits, state, is dependent on which backend is used by the
|
106
|
-
* context, either GL or D3D (possible in future).
|
107
|
-
*/
|
108
|
-
void resetContext(uint32_t state = kAll_GrBackendState);
|
109
|
-
|
110
|
-
/**
|
111
|
-
* If the backend is GrBackendApi::kOpenGL, then all texture unit/target combinations for which
|
112
|
-
* the context has modified the bound texture will have texture id 0 bound. This does not
|
113
|
-
* flush the context. Calling resetContext() does not change the set that will be bound
|
114
|
-
* to texture id 0 on the next call to resetGLTextureBindings(). After this is called
|
115
|
-
* all unit/target combinations are considered to have unmodified bindings until the context
|
116
|
-
* subsequently modifies them (meaning if this is called twice in a row with no intervening
|
117
|
-
* context usage then the second call is a no-op.)
|
118
|
-
*/
|
119
|
-
void resetGLTextureBindings();
|
120
|
-
|
121
|
-
/**
|
122
|
-
* Abandons all GPU resources and assumes the underlying backend 3D API context is no longer
|
123
|
-
* usable. Call this if you have lost the associated GPU context, and thus internal texture,
|
124
|
-
* buffer, etc. references/IDs are now invalid. Calling this ensures that the destructors of the
|
125
|
-
* context and any of its created resource objects will not make backend 3D API calls. Content
|
126
|
-
* rendered but not previously flushed may be lost. After this function is called all subsequent
|
127
|
-
* calls on the context will fail or be no-ops.
|
128
|
-
*
|
129
|
-
* The typical use case for this function is that the underlying 3D context was lost and further
|
130
|
-
* API calls may crash.
|
131
|
-
*
|
132
|
-
* This call is not valid to be made inside ReleaseProcs passed into SkSurface or SkImages. The
|
133
|
-
* call will simply fail (and assert in debug) if it is called while inside a ReleaseProc.
|
134
|
-
*
|
135
|
-
* For Vulkan, even if the device becomes lost, the VkQueue, VkDevice, or VkInstance used to
|
136
|
-
* create the context must be kept alive even after abandoning the context. Those objects must
|
137
|
-
* live for the lifetime of the context object itself. The reason for this is so that
|
138
|
-
* we can continue to delete any outstanding GrBackendTextures/RenderTargets which must be
|
139
|
-
* cleaned up even in a device lost state.
|
140
|
-
*/
|
141
|
-
void abandonContext() override;
|
142
|
-
|
143
|
-
/**
|
144
|
-
* Returns true if the context was abandoned or if the backend specific context has gotten into
|
145
|
-
* an unrecoverarble, lost state (e.g. in Vulkan backend if we've gotten a
|
146
|
-
* VK_ERROR_DEVICE_LOST). If the backend context is lost, this call will also abandon this
|
147
|
-
* context.
|
148
|
-
*/
|
149
|
-
bool abandoned() override;
|
150
|
-
|
151
|
-
/**
|
152
|
-
* Returns true if the backend specific context has gotten into an unrecoverarble, lost state
|
153
|
-
* (e.g. in Vulkan backend if we've gotten a VK_ERROR_DEVICE_LOST). If the backend context is
|
154
|
-
* lost, this call will also abandon this context.
|
155
|
-
*/
|
156
|
-
bool isDeviceLost();
|
157
|
-
|
158
|
-
// TODO: Remove this from public after migrating Chrome.
|
159
|
-
sk_sp<GrContextThreadSafeProxy> threadSafeProxy();
|
160
|
-
|
161
|
-
/**
|
162
|
-
* Checks if the underlying 3D API reported an out-of-memory error. If this returns true it is
|
163
|
-
* reset and will return false until another out-of-memory error is reported by the 3D API. If
|
164
|
-
* the context is abandoned then this will report false.
|
165
|
-
*
|
166
|
-
* Currently this is implemented for:
|
167
|
-
*
|
168
|
-
* OpenGL [ES] - Note that client calls to glGetError() may swallow GL_OUT_OF_MEMORY errors and
|
169
|
-
* therefore hide the error from Skia. Also, it is not advised to use this in combination with
|
170
|
-
* enabling GrContextOptions::fSkipGLErrorChecks. That option may prevent the context from ever
|
171
|
-
* checking the GL context for OOM.
|
172
|
-
*
|
173
|
-
* Vulkan - Reports true if VK_ERROR_OUT_OF_HOST_MEMORY or VK_ERROR_OUT_OF_DEVICE_MEMORY has
|
174
|
-
* occurred.
|
175
|
-
*/
|
176
|
-
bool oomed();
|
177
|
-
|
178
|
-
/**
|
179
|
-
* This is similar to abandonContext() however the underlying 3D context is not yet lost and
|
180
|
-
* the context will cleanup all allocated resources before returning. After returning it will
|
181
|
-
* assume that the underlying context may no longer be valid.
|
182
|
-
*
|
183
|
-
* The typical use case for this function is that the client is going to destroy the 3D context
|
184
|
-
* but can't guarantee that context will be destroyed first (perhaps because it may be ref'ed
|
185
|
-
* elsewhere by either the client or Skia objects).
|
186
|
-
*
|
187
|
-
* For Vulkan, even if the device becomes lost, the VkQueue, VkDevice, or VkInstance used to
|
188
|
-
* create the context must be alive before calling releaseResourcesAndAbandonContext.
|
189
|
-
*/
|
190
|
-
void releaseResourcesAndAbandonContext();
|
191
|
-
|
192
|
-
///////////////////////////////////////////////////////////////////////////
|
193
|
-
// Resource Cache
|
194
|
-
|
195
|
-
/** DEPRECATED
|
196
|
-
* Return the current GPU resource cache limits.
|
197
|
-
*
|
198
|
-
* @param maxResources If non-null, will be set to -1.
|
199
|
-
* @param maxResourceBytes If non-null, returns maximum number of bytes of
|
200
|
-
* video memory that can be held in the cache.
|
201
|
-
*/
|
202
|
-
void getResourceCacheLimits(int* maxResources, size_t* maxResourceBytes) const;
|
203
|
-
|
204
|
-
/**
|
205
|
-
* Return the current GPU resource cache limit in bytes.
|
206
|
-
*/
|
207
|
-
size_t getResourceCacheLimit() const;
|
208
|
-
|
209
|
-
/**
|
210
|
-
* Gets the current GPU resource cache usage.
|
211
|
-
*
|
212
|
-
* @param resourceCount If non-null, returns the number of resources that are held in the
|
213
|
-
* cache.
|
214
|
-
* @param maxResourceBytes If non-null, returns the total number of bytes of video memory held
|
215
|
-
* in the cache.
|
216
|
-
*/
|
217
|
-
void getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const;
|
218
|
-
|
219
|
-
/**
|
220
|
-
* Gets the number of bytes in the cache consumed by purgeable (e.g. unlocked) resources.
|
221
|
-
*/
|
222
|
-
size_t getResourceCachePurgeableBytes() const;
|
223
|
-
|
224
|
-
/** DEPRECATED
|
225
|
-
* Specify the GPU resource cache limits. If the current cache exceeds the maxResourceBytes
|
226
|
-
* limit, it will be purged (LRU) to keep the cache within the limit.
|
227
|
-
*
|
228
|
-
* @param maxResources Unused.
|
229
|
-
* @param maxResourceBytes The maximum number of bytes of video memory
|
230
|
-
* that can be held in the cache.
|
231
|
-
*/
|
232
|
-
void setResourceCacheLimits(int maxResources, size_t maxResourceBytes);
|
233
|
-
|
234
|
-
/**
|
235
|
-
* Specify the GPU resource cache limit. If the cache currently exceeds this limit,
|
236
|
-
* it will be purged (LRU) to keep the cache within the limit.
|
237
|
-
*
|
238
|
-
* @param maxResourceBytes The maximum number of bytes of video memory
|
239
|
-
* that can be held in the cache.
|
240
|
-
*/
|
241
|
-
void setResourceCacheLimit(size_t maxResourceBytes);
|
242
|
-
|
243
|
-
/**
|
244
|
-
* Frees GPU created by the context. Can be called to reduce GPU memory
|
245
|
-
* pressure.
|
246
|
-
*/
|
247
|
-
void freeGpuResources();
|
248
|
-
|
249
|
-
/**
|
250
|
-
* Purge GPU resources that haven't been used in the past 'msNotUsed' milliseconds or are
|
251
|
-
* otherwise marked for deletion, regardless of whether the context is under budget.
|
252
|
-
|
253
|
-
*
|
254
|
-
* @param msNotUsed Only unlocked resources not used in these last milliseconds will be
|
255
|
-
* cleaned up.
|
256
|
-
* @param opts Specify which resources should be cleaned up. If kScratchResourcesOnly
|
257
|
-
* then, all unlocked scratch resources older than 'msNotUsed' will be purged
|
258
|
-
* but the unlocked resources with persistent data will remain. If
|
259
|
-
* kAllResources
|
260
|
-
*/
|
261
|
-
|
262
|
-
void performDeferredCleanup(
|
263
|
-
std::chrono::milliseconds msNotUsed,
|
264
|
-
GrPurgeResourceOptions opts = GrPurgeResourceOptions::kAllResources);
|
265
|
-
|
266
|
-
// Temporary compatibility API for Android.
|
267
|
-
void purgeResourcesNotUsedInMs(std::chrono::milliseconds msNotUsed) {
|
268
|
-
this->performDeferredCleanup(msNotUsed);
|
269
|
-
}
|
270
|
-
|
271
|
-
/**
|
272
|
-
* Purge unlocked resources from the cache until the the provided byte count has been reached
|
273
|
-
* or we have purged all unlocked resources. The default policy is to purge in LRU order, but
|
274
|
-
* can be overridden to prefer purging scratch resources (in LRU order) prior to purging other
|
275
|
-
* resource types.
|
276
|
-
*
|
277
|
-
* @param maxBytesToPurge the desired number of bytes to be purged.
|
278
|
-
* @param preferScratchResources If true scratch resources will be purged prior to other
|
279
|
-
* resource types.
|
280
|
-
*/
|
281
|
-
void purgeUnlockedResources(size_t bytesToPurge, bool preferScratchResources);
|
282
|
-
|
283
|
-
/**
|
284
|
-
* This entry point is intended for instances where an app has been backgrounded or
|
285
|
-
* suspended.
|
286
|
-
* If 'scratchResourcesOnly' is true all unlocked scratch resources will be purged but the
|
287
|
-
* unlocked resources with persistent data will remain. If 'scratchResourcesOnly' is false
|
288
|
-
* then all unlocked resources will be purged.
|
289
|
-
* In either case, after the unlocked resources are purged a separate pass will be made to
|
290
|
-
* ensure that resource usage is under budget (i.e., even if 'scratchResourcesOnly' is true
|
291
|
-
* some resources with persistent data may be purged to be under budget).
|
292
|
-
*
|
293
|
-
* @param opts If kScratchResourcesOnly only unlocked scratch resources will be purged prior
|
294
|
-
* enforcing the budget requirements.
|
295
|
-
*/
|
296
|
-
void purgeUnlockedResources(GrPurgeResourceOptions opts);
|
297
|
-
|
298
|
-
/**
|
299
|
-
* Gets the maximum supported texture size.
|
300
|
-
*/
|
301
|
-
using GrRecordingContext::maxTextureSize;
|
302
|
-
|
303
|
-
/**
|
304
|
-
* Gets the maximum supported render target size.
|
305
|
-
*/
|
306
|
-
using GrRecordingContext::maxRenderTargetSize;
|
307
|
-
|
308
|
-
/**
|
309
|
-
* Can a SkImage be created with the given color type.
|
310
|
-
*/
|
311
|
-
using GrRecordingContext::colorTypeSupportedAsImage;
|
312
|
-
|
313
|
-
/**
|
314
|
-
* Does this context support protected content?
|
315
|
-
*/
|
316
|
-
using GrRecordingContext::supportsProtectedContent;
|
317
|
-
|
318
|
-
/**
|
319
|
-
* Can a SkSurface be created with the given color type. To check whether MSAA is supported
|
320
|
-
* use maxSurfaceSampleCountForColorType().
|
321
|
-
*/
|
322
|
-
using GrRecordingContext::colorTypeSupportedAsSurface;
|
323
|
-
|
324
|
-
/**
|
325
|
-
* Gets the maximum supported sample count for a color type. 1 is returned if only non-MSAA
|
326
|
-
* rendering is supported for the color type. 0 is returned if rendering to this color type
|
327
|
-
* is not supported at all.
|
328
|
-
*/
|
329
|
-
using GrRecordingContext::maxSurfaceSampleCountForColorType;
|
330
|
-
|
331
|
-
///////////////////////////////////////////////////////////////////////////
|
332
|
-
// Misc.
|
333
|
-
|
334
|
-
/**
|
335
|
-
* Inserts a list of GPU semaphores that the current GPU-backed API must wait on before
|
336
|
-
* executing any more commands on the GPU. We only guarantee blocking transfer and fragment
|
337
|
-
* shader work, but may block earlier stages as well depending on the backend.If this call
|
338
|
-
* returns false, then the GPU back-end will not wait on any passed in semaphores, and the
|
339
|
-
* client will still own the semaphores, regardless of the value of deleteSemaphoresAfterWait.
|
340
|
-
*
|
341
|
-
* If deleteSemaphoresAfterWait is false then Skia will not delete the semaphores. In this case
|
342
|
-
* it is the client's responsibility to not destroy or attempt to reuse the semaphores until it
|
343
|
-
* knows that Skia has finished waiting on them. This can be done by using finishedProcs on
|
344
|
-
* flush calls.
|
345
|
-
*
|
346
|
-
* This is not supported on the GL backend.
|
347
|
-
*/
|
348
|
-
bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores,
|
349
|
-
bool deleteSemaphoresAfterWait = true);
|
350
|
-
|
351
|
-
/**
|
352
|
-
* Call to ensure all drawing to the context has been flushed and submitted to the underlying 3D
|
353
|
-
* API. This is equivalent to calling GrContext::flush with a default GrFlushInfo followed by
|
354
|
-
* GrContext::submit(sync).
|
355
|
-
*/
|
356
|
-
void flushAndSubmit(GrSyncCpu sync = GrSyncCpu::kNo) {
|
357
|
-
this->flush(GrFlushInfo());
|
358
|
-
this->submit(sync);
|
359
|
-
}
|
360
|
-
|
361
|
-
/**
|
362
|
-
* Call to ensure all drawing to the context has been flushed to underlying 3D API specific
|
363
|
-
* objects. A call to `submit` is always required to ensure work is actually sent to
|
364
|
-
* the gpu. Some specific API details:
|
365
|
-
* GL: Commands are actually sent to the driver, but glFlush is never called. Thus some
|
366
|
-
* sync objects from the flush will not be valid until a submission occurs.
|
367
|
-
*
|
368
|
-
* Vulkan/Metal/D3D/Dawn: Commands are recorded to the backend APIs corresponding command
|
369
|
-
* buffer or encoder objects. However, these objects are not sent to the gpu until a
|
370
|
-
* submission occurs.
|
371
|
-
*
|
372
|
-
* If the return is GrSemaphoresSubmitted::kYes, only initialized GrBackendSemaphores will be
|
373
|
-
* submitted to the gpu during the next submit call (it is possible Skia failed to create a
|
374
|
-
* subset of the semaphores). The client should not wait on these semaphores until after submit
|
375
|
-
* has been called, and must keep them alive until then. If this call returns
|
376
|
-
* GrSemaphoresSubmitted::kNo, the GPU backend will not submit any semaphores to be signaled on
|
377
|
-
* the GPU. Thus the client should not have the GPU wait on any of the semaphores passed in with
|
378
|
-
* the GrFlushInfo. Regardless of whether semaphores were submitted to the GPU or not, the
|
379
|
-
* client is still responsible for deleting any initialized semaphores.
|
380
|
-
* Regardless of semaphore submission the context will still be flushed. It should be
|
381
|
-
* emphasized that a return value of GrSemaphoresSubmitted::kNo does not mean the flush did not
|
382
|
-
* happen. It simply means there were no semaphores submitted to the GPU. A caller should only
|
383
|
-
* take this as a failure if they passed in semaphores to be submitted.
|
384
|
-
*/
|
385
|
-
GrSemaphoresSubmitted flush(const GrFlushInfo& info);
|
386
|
-
|
387
|
-
void flush() { this->flush(GrFlushInfo()); }
|
388
|
-
|
389
|
-
/** Flushes any pending uses of texture-backed images in the GPU backend. If the image is not
|
390
|
-
* texture-backed (including promise texture images) or if the GrDirectContext does not
|
391
|
-
* have the same context ID as the context backing the image then this is a no-op.
|
392
|
-
* If the image was not used in any non-culled draws in the current queue of work for the
|
393
|
-
* passed GrDirectContext then this is a no-op unless the GrFlushInfo contains semaphores or
|
394
|
-
* a finish proc. Those are respected even when the image has not been used.
|
395
|
-
* @param image the non-null image to flush.
|
396
|
-
* @param info flush options
|
397
|
-
*/
|
398
|
-
GrSemaphoresSubmitted flush(const sk_sp<const SkImage>& image, const GrFlushInfo& info);
|
399
|
-
void flush(const sk_sp<const SkImage>& image);
|
400
|
-
|
401
|
-
/** Version of flush() that uses a default GrFlushInfo. Also submits the flushed work to the
|
402
|
-
* GPU.
|
403
|
-
*/
|
404
|
-
void flushAndSubmit(const sk_sp<const SkImage>& image);
|
405
|
-
|
406
|
-
/** Issues pending SkSurface commands to the GPU-backed API objects and resolves any SkSurface
|
407
|
-
* MSAA. A call to GrDirectContext::submit is always required to ensure work is actually sent
|
408
|
-
* to the gpu. Some specific API details:
|
409
|
-
* GL: Commands are actually sent to the driver, but glFlush is never called. Thus some
|
410
|
-
* sync objects from the flush will not be valid until a submission occurs.
|
411
|
-
*
|
412
|
-
* Vulkan/Metal/D3D/Dawn: Commands are recorded to the backend APIs corresponding command
|
413
|
-
* buffer or encoder objects. However, these objects are not sent to the gpu until a
|
414
|
-
* submission occurs.
|
415
|
-
*
|
416
|
-
* The work that is submitted to the GPU will be dependent on the BackendSurfaceAccess that is
|
417
|
-
* passed in.
|
418
|
-
*
|
419
|
-
* If BackendSurfaceAccess::kNoAccess is passed in all commands will be issued to the GPU.
|
420
|
-
*
|
421
|
-
* If BackendSurfaceAccess::kPresent is passed in and the backend API is not Vulkan, it is
|
422
|
-
* treated the same as kNoAccess. If the backend API is Vulkan, the VkImage that backs the
|
423
|
-
* SkSurface will be transferred back to its original queue. If the SkSurface was created by
|
424
|
-
* wrapping a VkImage, the queue will be set to the queue which was originally passed in on
|
425
|
-
* the GrVkImageInfo. Additionally, if the original queue was not external or foreign the
|
426
|
-
* layout of the VkImage will be set to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
|
427
|
-
*
|
428
|
-
* The GrFlushInfo describes additional options to flush. Please see documentation at
|
429
|
-
* GrFlushInfo for more info.
|
430
|
-
*
|
431
|
-
* If the return is GrSemaphoresSubmitted::kYes, only initialized GrBackendSemaphores will be
|
432
|
-
* submitted to the gpu during the next submit call (it is possible Skia failed to create a
|
433
|
-
* subset of the semaphores). The client should not wait on these semaphores until after submit
|
434
|
-
* has been called, but must keep them alive until then. If a submit flag was passed in with
|
435
|
-
* the flush these valid semaphores can we waited on immediately. If this call returns
|
436
|
-
* GrSemaphoresSubmitted::kNo, the GPU backend will not submit any semaphores to be signaled on
|
437
|
-
* the GPU. Thus the client should not have the GPU wait on any of the semaphores passed in
|
438
|
-
* with the GrFlushInfo. Regardless of whether semaphores were submitted to the GPU or not, the
|
439
|
-
* client is still responsible for deleting any initialized semaphores.
|
440
|
-
* Regardless of semaphore submission the context will still be flushed. It should be
|
441
|
-
* emphasized that a return value of GrSemaphoresSubmitted::kNo does not mean the flush did not
|
442
|
-
* happen. It simply means there were no semaphores submitted to the GPU. A caller should only
|
443
|
-
* take this as a failure if they passed in semaphores to be submitted.
|
444
|
-
*
|
445
|
-
* Pending surface commands are flushed regardless of the return result.
|
446
|
-
*
|
447
|
-
* @param surface The GPU backed surface to be flushed. Has no effect on a CPU-backed surface.
|
448
|
-
* @param access type of access the call will do on the backend object after flush
|
449
|
-
* @param info flush options
|
450
|
-
*/
|
451
|
-
GrSemaphoresSubmitted flush(SkSurface* surface,
|
452
|
-
SkSurfaces::BackendSurfaceAccess access,
|
453
|
-
const GrFlushInfo& info);
|
454
|
-
|
455
|
-
/**
|
456
|
-
* Same as above except:
|
457
|
-
*
|
458
|
-
* If a skgpu::MutableTextureState is passed in, at the end of the flush we will transition
|
459
|
-
* the surface to be in the state requested by the skgpu::MutableTextureState. If the surface
|
460
|
-
* (or SkImage or GrBackendSurface wrapping the same backend object) is used again after this
|
461
|
-
* flush the state may be changed and no longer match what is requested here. This is often
|
462
|
-
* used if the surface will be used for presenting or external use and the client wants backend
|
463
|
-
* object to be prepped for that use. A finishedProc or semaphore on the GrFlushInfo will also
|
464
|
-
* include the work for any requested state change.
|
465
|
-
*
|
466
|
-
* If the backend API is Vulkan, the caller can set the skgpu::MutableTextureState's
|
467
|
-
* VkImageLayout to VK_IMAGE_LAYOUT_UNDEFINED or queueFamilyIndex to VK_QUEUE_FAMILY_IGNORED to
|
468
|
-
* tell Skia to not change those respective states.
|
469
|
-
*
|
470
|
-
* @param surface The GPU backed surface to be flushed. Has no effect on a CPU-backed surface.
|
471
|
-
* @param info flush options
|
472
|
-
* @param newState optional state change request after flush
|
473
|
-
*/
|
474
|
-
GrSemaphoresSubmitted flush(SkSurface* surface,
|
475
|
-
const GrFlushInfo& info,
|
476
|
-
const skgpu::MutableTextureState* newState = nullptr);
|
477
|
-
|
478
|
-
/** Call to ensure all reads/writes of the surface have been issued to the underlying 3D API.
|
479
|
-
* Skia will correctly order its own draws and pixel operations. This must to be used to ensure
|
480
|
-
* correct ordering when the surface backing store is accessed outside Skia (e.g. direct use of
|
481
|
-
* the 3D API or a windowing system). This is equivalent to
|
482
|
-
* calling ::flush with a default GrFlushInfo followed by ::submit(syncCpu).
|
483
|
-
*
|
484
|
-
* Has no effect on a CPU-backed surface.
|
485
|
-
*/
|
486
|
-
void flushAndSubmit(SkSurface* surface, GrSyncCpu sync = GrSyncCpu::kNo);
|
487
|
-
|
488
|
-
/**
|
489
|
-
* Flushes the given surface with the default GrFlushInfo.
|
490
|
-
*
|
491
|
-
* Has no effect on a CPU-backed surface.
|
492
|
-
*/
|
493
|
-
void flush(SkSurface* surface);
|
494
|
-
|
495
|
-
/**
|
496
|
-
* Submit outstanding work to the gpu from all previously un-submitted flushes. The return
|
497
|
-
* value of the submit will indicate whether or not the submission to the GPU was successful.
|
498
|
-
*
|
499
|
-
* If the call returns true, all previously passed in semaphores in flush calls will have been
|
500
|
-
* submitted to the GPU and they can safely be waited on. The caller should wait on those
|
501
|
-
* semaphores or perform some other global synchronization before deleting the semaphores.
|
502
|
-
*
|
503
|
-
* If it returns false, then those same semaphores will not have been submitted and we will not
|
504
|
-
* try to submit them again. The caller is free to delete the semaphores at any time.
|
505
|
-
*
|
506
|
-
* If sync flag is GrSyncCpu::kYes, this function will return once the gpu has finished with all
|
507
|
-
* submitted work.
|
508
|
-
*/
|
509
|
-
bool submit(GrSyncCpu sync = GrSyncCpu::kNo);
|
510
|
-
|
511
|
-
/**
|
512
|
-
* Checks whether any asynchronous work is complete and if so calls related callbacks.
|
513
|
-
*/
|
514
|
-
void checkAsyncWorkCompletion();
|
515
|
-
|
516
|
-
/** Enumerates all cached GPU resources and dumps their memory to traceMemoryDump. */
|
517
|
-
// Chrome is using this!
|
518
|
-
void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const;
|
519
|
-
|
520
|
-
bool supportsDistanceFieldText() const;
|
521
|
-
|
522
|
-
void storeVkPipelineCacheData();
|
523
|
-
|
524
|
-
/**
|
525
|
-
* Retrieve the default GrBackendFormat for a given SkColorType and renderability.
|
526
|
-
* It is guaranteed that this backend format will be the one used by the following
|
527
|
-
* SkColorType and GrSurfaceCharacterization-based createBackendTexture methods.
|
528
|
-
*
|
529
|
-
* The caller should check that the returned format is valid.
|
530
|
-
*/
|
531
|
-
using GrRecordingContext::defaultBackendFormat;
|
532
|
-
|
533
|
-
/**
|
534
|
-
* The explicitly allocated backend texture API allows clients to use Skia to create backend
|
535
|
-
* objects outside of Skia proper (i.e., Skia's caching system will not know about them.)
|
536
|
-
*
|
537
|
-
* It is the client's responsibility to delete all these objects (using deleteBackendTexture)
|
538
|
-
* before deleting the context used to create them. If the backend is Vulkan, the textures must
|
539
|
-
* be deleted before abandoning the context as well. Additionally, clients should only delete
|
540
|
-
* these objects on the thread for which that context is active.
|
541
|
-
*
|
542
|
-
* The client is responsible for ensuring synchronization between different uses
|
543
|
-
* of the backend object (i.e., wrapping it in a surface, rendering to it, deleting the
|
544
|
-
* surface, rewrapping it in a image and drawing the image will require explicit
|
545
|
-
* synchronization on the client's part).
|
546
|
-
*/
|
547
|
-
|
548
|
-
/**
|
549
|
-
* If possible, create an uninitialized backend texture. The client should ensure that the
|
550
|
-
* returned backend texture is valid.
|
551
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
552
|
-
* VK_IMAGE_LAYOUT_UNDEFINED.
|
553
|
-
*/
|
554
|
-
GrBackendTexture createBackendTexture(int width,
|
555
|
-
int height,
|
556
|
-
const GrBackendFormat&,
|
557
|
-
skgpu::Mipmapped,
|
558
|
-
GrRenderable,
|
559
|
-
GrProtected = GrProtected::kNo,
|
560
|
-
std::string_view label = {});
|
561
|
-
|
562
|
-
/**
|
563
|
-
* If possible, create an uninitialized backend texture. The client should ensure that the
|
564
|
-
* returned backend texture is valid.
|
565
|
-
* If successful, the created backend texture will be compatible with the provided
|
566
|
-
* SkColorType.
|
567
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
568
|
-
* VK_IMAGE_LAYOUT_UNDEFINED.
|
569
|
-
*/
|
570
|
-
GrBackendTexture createBackendTexture(int width,
|
571
|
-
int height,
|
572
|
-
SkColorType,
|
573
|
-
skgpu::Mipmapped,
|
574
|
-
GrRenderable,
|
575
|
-
GrProtected = GrProtected::kNo,
|
576
|
-
std::string_view label = {});
|
577
|
-
|
578
|
-
/**
|
579
|
-
* If possible, create a backend texture initialized to a particular color. The client should
|
580
|
-
* ensure that the returned backend texture is valid. The client can pass in a finishedProc
|
581
|
-
* to be notified when the data has been uploaded by the gpu and the texture can be deleted. The
|
582
|
-
* client is required to call `submit` to send the upload work to the gpu. The
|
583
|
-
* finishedProc will always get called even if we failed to create the GrBackendTexture.
|
584
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
585
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
586
|
-
*/
|
587
|
-
GrBackendTexture createBackendTexture(int width,
|
588
|
-
int height,
|
589
|
-
const GrBackendFormat&,
|
590
|
-
const SkColor4f& color,
|
591
|
-
skgpu::Mipmapped,
|
592
|
-
GrRenderable,
|
593
|
-
GrProtected = GrProtected::kNo,
|
594
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
595
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
596
|
-
std::string_view label = {});
|
597
|
-
|
598
|
-
/**
|
599
|
-
* If possible, create a backend texture initialized to a particular color. The client should
|
600
|
-
* ensure that the returned backend texture is valid. The client can pass in a finishedProc
|
601
|
-
* to be notified when the data has been uploaded by the gpu and the texture can be deleted. The
|
602
|
-
* client is required to call `submit` to send the upload work to the gpu. The
|
603
|
-
* finishedProc will always get called even if we failed to create the GrBackendTexture.
|
604
|
-
* If successful, the created backend texture will be compatible with the provided
|
605
|
-
* SkColorType.
|
606
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
607
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
608
|
-
*/
|
609
|
-
GrBackendTexture createBackendTexture(int width,
|
610
|
-
int height,
|
611
|
-
SkColorType,
|
612
|
-
const SkColor4f& color,
|
613
|
-
skgpu::Mipmapped,
|
614
|
-
GrRenderable,
|
615
|
-
GrProtected = GrProtected::kNo,
|
616
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
617
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
618
|
-
std::string_view label = {});
|
619
|
-
|
620
|
-
/**
|
621
|
-
* If possible, create a backend texture initialized with the provided pixmap data. The client
|
622
|
-
* should ensure that the returned backend texture is valid. The client can pass in a
|
623
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
624
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
625
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture.
|
626
|
-
* If successful, the created backend texture will be compatible with the provided
|
627
|
-
* pixmap(s). Compatible, in this case, means that the backend format will be the result
|
628
|
-
* of calling defaultBackendFormat on the base pixmap's colortype. The src data can be deleted
|
629
|
-
* when this call returns.
|
630
|
-
* If numLevels is 1 a non-mipmapped texture will result. If a mipmapped texture is desired
|
631
|
-
* the data for all the mipmap levels must be provided. In the mipmapped case all the
|
632
|
-
* colortypes of the provided pixmaps must be the same. Additionally, all the miplevels
|
633
|
-
* must be sized correctly (please see SkMipmap::ComputeLevelSize and ComputeLevelCount). The
|
634
|
-
* GrSurfaceOrigin controls whether the pixmap data is vertically flipped in the texture.
|
635
|
-
* Note: the pixmap's alphatypes and colorspaces are ignored.
|
636
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
637
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
638
|
-
*/
|
639
|
-
GrBackendTexture createBackendTexture(const SkPixmap srcData[],
|
640
|
-
int numLevels,
|
641
|
-
GrSurfaceOrigin,
|
642
|
-
GrRenderable,
|
643
|
-
GrProtected,
|
644
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
645
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
646
|
-
std::string_view label = {});
|
647
|
-
|
648
|
-
/**
|
649
|
-
* Convenience version createBackendTexture() that takes just a base level pixmap.
|
650
|
-
*/
|
651
|
-
GrBackendTexture createBackendTexture(const SkPixmap& srcData,
|
652
|
-
GrSurfaceOrigin textureOrigin,
|
653
|
-
GrRenderable renderable,
|
654
|
-
GrProtected isProtected,
|
655
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
656
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
657
|
-
std::string_view label = {});
|
658
|
-
|
659
|
-
// Deprecated versions that do not take origin and assume top-left.
|
660
|
-
GrBackendTexture createBackendTexture(const SkPixmap srcData[],
|
661
|
-
int numLevels,
|
662
|
-
GrRenderable renderable,
|
663
|
-
GrProtected isProtected,
|
664
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
665
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
666
|
-
std::string_view label = {});
|
667
|
-
|
668
|
-
GrBackendTexture createBackendTexture(const SkPixmap& srcData,
|
669
|
-
GrRenderable renderable,
|
670
|
-
GrProtected isProtected,
|
671
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
672
|
-
GrGpuFinishedContext finishedContext = nullptr,
|
673
|
-
std::string_view label = {});
|
674
|
-
|
675
|
-
/**
|
676
|
-
* If possible, updates a backend texture to be filled to a particular color. The client should
|
677
|
-
* check the return value to see if the update was successful. The client can pass in a
|
678
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
679
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
680
|
-
* The finishedProc will always get called even if we failed to update the GrBackendTexture.
|
681
|
-
* For the Vulkan backend after a successful update the layout of the created VkImage will be:
|
682
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
683
|
-
*/
|
684
|
-
bool updateBackendTexture(const GrBackendTexture&,
|
685
|
-
const SkColor4f& color,
|
686
|
-
GrGpuFinishedProc finishedProc,
|
687
|
-
GrGpuFinishedContext finishedContext);
|
688
|
-
|
689
|
-
/**
|
690
|
-
* If possible, updates a backend texture to be filled to a particular color. The data in
|
691
|
-
* GrBackendTexture and passed in color is interpreted with respect to the passed in
|
692
|
-
* SkColorType. The client should check the return value to see if the update was successful.
|
693
|
-
* The client can pass in a finishedProc to be notified when the data has been uploaded by the
|
694
|
-
* gpu and the texture can be deleted. The client is required to call `submit` to send
|
695
|
-
* the upload work to the gpu. The finishedProc will always get called even if we failed to
|
696
|
-
* update the GrBackendTexture.
|
697
|
-
* For the Vulkan backend after a successful update the layout of the created VkImage will be:
|
698
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
699
|
-
*/
|
700
|
-
bool updateBackendTexture(const GrBackendTexture&,
|
701
|
-
SkColorType skColorType,
|
702
|
-
const SkColor4f& color,
|
703
|
-
GrGpuFinishedProc finishedProc,
|
704
|
-
GrGpuFinishedContext finishedContext);
|
705
|
-
|
706
|
-
/**
|
707
|
-
* If possible, updates a backend texture filled with the provided pixmap data. The client
|
708
|
-
* should check the return value to see if the update was successful. The client can pass in a
|
709
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
710
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
711
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture.
|
712
|
-
* The backend texture must be compatible with the provided pixmap(s). Compatible, in this case,
|
713
|
-
* means that the backend format is compatible with the base pixmap's colortype. The src data
|
714
|
-
* can be deleted when this call returns.
|
715
|
-
* If the backend texture is mip mapped, the data for all the mipmap levels must be provided.
|
716
|
-
* In the mipmapped case all the colortypes of the provided pixmaps must be the same.
|
717
|
-
* Additionally, all the miplevels must be sized correctly (please see
|
718
|
-
* SkMipmap::ComputeLevelSize and ComputeLevelCount). The GrSurfaceOrigin controls whether the
|
719
|
-
* pixmap data is vertically flipped in the texture.
|
720
|
-
* Note: the pixmap's alphatypes and colorspaces are ignored.
|
721
|
-
* For the Vulkan backend after a successful update the layout of the created VkImage will be:
|
722
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
723
|
-
*/
|
724
|
-
bool updateBackendTexture(const GrBackendTexture&,
|
725
|
-
const SkPixmap srcData[],
|
726
|
-
int numLevels,
|
727
|
-
GrSurfaceOrigin = kTopLeft_GrSurfaceOrigin,
|
728
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
729
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
730
|
-
|
731
|
-
/**
|
732
|
-
* Convenience version of updateBackendTexture that takes just a base level pixmap.
|
733
|
-
*/
|
734
|
-
bool updateBackendTexture(const GrBackendTexture& texture,
|
735
|
-
const SkPixmap& srcData,
|
736
|
-
GrSurfaceOrigin textureOrigin = kTopLeft_GrSurfaceOrigin,
|
737
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
738
|
-
GrGpuFinishedContext finishedContext = nullptr) {
|
739
|
-
return this->updateBackendTexture(texture,
|
740
|
-
&srcData,
|
741
|
-
1,
|
742
|
-
textureOrigin,
|
743
|
-
finishedProc,
|
744
|
-
finishedContext);
|
745
|
-
}
|
746
|
-
|
747
|
-
// Deprecated version that does not take origin and assumes top-left.
|
748
|
-
bool updateBackendTexture(const GrBackendTexture& texture,
|
749
|
-
const SkPixmap srcData[],
|
750
|
-
int numLevels,
|
751
|
-
GrGpuFinishedProc finishedProc,
|
752
|
-
GrGpuFinishedContext finishedContext);
|
753
|
-
|
754
|
-
/**
|
755
|
-
* Retrieve the GrBackendFormat for a given SkTextureCompressionType. This is
|
756
|
-
* guaranteed to match the backend format used by the following
|
757
|
-
* createCompressedBackendTexture methods that take a CompressionType.
|
758
|
-
*
|
759
|
-
* The caller should check that the returned format is valid.
|
760
|
-
*/
|
761
|
-
using GrRecordingContext::compressedBackendFormat;
|
762
|
-
|
763
|
-
/**
|
764
|
-
*If possible, create a compressed backend texture initialized to a particular color. The
|
765
|
-
* client should ensure that the returned backend texture is valid. The client can pass in a
|
766
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
767
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
768
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture.
|
769
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
770
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
771
|
-
*/
|
772
|
-
GrBackendTexture createCompressedBackendTexture(int width,
|
773
|
-
int height,
|
774
|
-
const GrBackendFormat&,
|
775
|
-
const SkColor4f& color,
|
776
|
-
skgpu::Mipmapped,
|
777
|
-
GrProtected = GrProtected::kNo,
|
778
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
779
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
780
|
-
|
781
|
-
GrBackendTexture createCompressedBackendTexture(int width,
|
782
|
-
int height,
|
783
|
-
SkTextureCompressionType,
|
784
|
-
const SkColor4f& color,
|
785
|
-
skgpu::Mipmapped,
|
786
|
-
GrProtected = GrProtected::kNo,
|
787
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
788
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
789
|
-
|
790
|
-
/**
|
791
|
-
* If possible, create a backend texture initialized with the provided raw data. The client
|
792
|
-
* should ensure that the returned backend texture is valid. The client can pass in a
|
793
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
794
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
795
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture
|
796
|
-
* If numLevels is 1 a non-mipmapped texture will result. If a mipmapped texture is desired
|
797
|
-
* the data for all the mipmap levels must be provided. Additionally, all the miplevels
|
798
|
-
* must be sized correctly (please see SkMipmap::ComputeLevelSize and ComputeLevelCount).
|
799
|
-
* For the Vulkan backend the layout of the created VkImage will be:
|
800
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
801
|
-
*/
|
802
|
-
GrBackendTexture createCompressedBackendTexture(int width,
|
803
|
-
int height,
|
804
|
-
const GrBackendFormat&,
|
805
|
-
const void* data,
|
806
|
-
size_t dataSize,
|
807
|
-
skgpu::Mipmapped,
|
808
|
-
GrProtected = GrProtected::kNo,
|
809
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
810
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
811
|
-
|
812
|
-
GrBackendTexture createCompressedBackendTexture(int width,
|
813
|
-
int height,
|
814
|
-
SkTextureCompressionType,
|
815
|
-
const void* data,
|
816
|
-
size_t dataSize,
|
817
|
-
skgpu::Mipmapped,
|
818
|
-
GrProtected = GrProtected::kNo,
|
819
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
820
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
821
|
-
|
822
|
-
/**
|
823
|
-
* If possible, updates a backend texture filled with the provided color. If the texture is
|
824
|
-
* mipmapped, all levels of the mip chain will be updated to have the supplied color. The client
|
825
|
-
* should check the return value to see if the update was successful. The client can pass in a
|
826
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
827
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
828
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture.
|
829
|
-
* For the Vulkan backend after a successful update the layout of the created VkImage will be:
|
830
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
831
|
-
*/
|
832
|
-
bool updateCompressedBackendTexture(const GrBackendTexture&,
|
833
|
-
const SkColor4f& color,
|
834
|
-
GrGpuFinishedProc finishedProc,
|
835
|
-
GrGpuFinishedContext finishedContext);
|
836
|
-
|
837
|
-
/**
|
838
|
-
* If possible, updates a backend texture filled with the provided raw data. The client
|
839
|
-
* should check the return value to see if the update was successful. The client can pass in a
|
840
|
-
* finishedProc to be notified when the data has been uploaded by the gpu and the texture can be
|
841
|
-
* deleted. The client is required to call `submit` to send the upload work to the gpu.
|
842
|
-
* The finishedProc will always get called even if we failed to create the GrBackendTexture.
|
843
|
-
* If a mipmapped texture is passed in, the data for all the mipmap levels must be provided.
|
844
|
-
* Additionally, all the miplevels must be sized correctly (please see
|
845
|
-
* SkMipMap::ComputeLevelSize and ComputeLevelCount).
|
846
|
-
* For the Vulkan backend after a successful update the layout of the created VkImage will be:
|
847
|
-
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
848
|
-
*/
|
849
|
-
bool updateCompressedBackendTexture(const GrBackendTexture&,
|
850
|
-
const void* data,
|
851
|
-
size_t dataSize,
|
852
|
-
GrGpuFinishedProc finishedProc,
|
853
|
-
GrGpuFinishedContext finishedContext);
|
854
|
-
|
855
|
-
/**
|
856
|
-
* Updates the state of the GrBackendTexture/RenderTarget to have the passed in
|
857
|
-
* skgpu::MutableTextureState. All objects that wrap the backend surface (i.e. SkSurfaces and
|
858
|
-
* SkImages) will also be aware of this state change. This call does not submit the state change
|
859
|
-
* to the gpu, but requires the client to call `submit` to send it to the GPU. The work
|
860
|
-
* for this call is ordered linearly with all other calls that require GrContext::submit to be
|
861
|
-
* called (e.g updateBackendTexture and flush). If finishedProc is not null then it will be
|
862
|
-
* called with finishedContext after the state transition is known to have occurred on the GPU.
|
863
|
-
*
|
864
|
-
* See skgpu::MutableTextureState to see what state can be set via this call.
|
865
|
-
*
|
866
|
-
* If the backend API is Vulkan, the caller can set the skgpu::MutableTextureState's
|
867
|
-
* VkImageLayout to VK_IMAGE_LAYOUT_UNDEFINED or queueFamilyIndex to VK_QUEUE_FAMILY_IGNORED to
|
868
|
-
* tell Skia to not change those respective states.
|
869
|
-
*
|
870
|
-
* If previousState is not null and this returns true, then Skia will have filled in
|
871
|
-
* previousState to have the values of the state before this call.
|
872
|
-
*/
|
873
|
-
bool setBackendTextureState(const GrBackendTexture&,
|
874
|
-
const skgpu::MutableTextureState&,
|
875
|
-
skgpu::MutableTextureState* previousState = nullptr,
|
876
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
877
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
878
|
-
bool setBackendRenderTargetState(const GrBackendRenderTarget&,
|
879
|
-
const skgpu::MutableTextureState&,
|
880
|
-
skgpu::MutableTextureState* previousState = nullptr,
|
881
|
-
GrGpuFinishedProc finishedProc = nullptr,
|
882
|
-
GrGpuFinishedContext finishedContext = nullptr);
|
883
|
-
|
884
|
-
void deleteBackendTexture(const GrBackendTexture&);
|
885
|
-
|
886
|
-
// This interface allows clients to pre-compile shaders and populate the runtime program cache.
|
887
|
-
// The key and data blobs should be the ones passed to the PersistentCache, in SkSL format.
|
888
|
-
//
|
889
|
-
// Steps to use this API:
|
890
|
-
//
|
891
|
-
// 1) Create a GrDirectContext as normal, but set fPersistentCache on GrContextOptions to
|
892
|
-
// something that will save the cached shader blobs. Set fShaderCacheStrategy to kSkSL. This
|
893
|
-
// will ensure that the blobs are SkSL, and are suitable for pre-compilation.
|
894
|
-
// 2) Run your application, and save all of the key/data pairs that are fed to the cache.
|
895
|
-
//
|
896
|
-
// 3) Switch over to shipping your application. Include the key/data pairs from above.
|
897
|
-
// 4) At startup (or any convenient time), call precompileShader for each key/data pair.
|
898
|
-
// This will compile the SkSL to create a GL program, and populate the runtime cache.
|
899
|
-
//
|
900
|
-
// This is only guaranteed to work if the context/device used in step #2 are created in the
|
901
|
-
// same way as the one used in step #4, and the same GrContextOptions are specified.
|
902
|
-
// Using cached shader blobs on a different device or driver are undefined.
|
903
|
-
bool precompileShader(const SkData& key, const SkData& data);
|
904
|
-
|
905
|
-
#ifdef SK_ENABLE_DUMP_GPU
|
906
|
-
/** Returns a string with detailed information about the context & GPU, in JSON format. */
|
907
|
-
SkString dump() const;
|
908
|
-
#endif
|
909
|
-
|
910
|
-
class DirectContextID {
|
911
|
-
public:
|
912
|
-
static GrDirectContext::DirectContextID Next();
|
913
|
-
|
914
|
-
DirectContextID() : fID(SK_InvalidUniqueID) {}
|
915
|
-
|
916
|
-
bool operator==(const DirectContextID& that) const { return fID == that.fID; }
|
917
|
-
bool operator!=(const DirectContextID& that) const { return !(*this == that); }
|
918
|
-
|
919
|
-
void makeInvalid() { fID = SK_InvalidUniqueID; }
|
920
|
-
bool isValid() const { return fID != SK_InvalidUniqueID; }
|
921
|
-
|
922
|
-
private:
|
923
|
-
constexpr DirectContextID(uint32_t id) : fID(id) {}
|
924
|
-
uint32_t fID;
|
925
|
-
};
|
926
|
-
|
927
|
-
DirectContextID directContextID() const { return fDirectContextID; }
|
928
|
-
|
929
|
-
// Provides access to functions that aren't part of the public API.
|
930
|
-
GrDirectContextPriv priv();
|
931
|
-
const GrDirectContextPriv priv() const; // NOLINT(readability-const-return-type)
|
932
|
-
|
933
|
-
protected:
|
934
|
-
GrDirectContext(GrBackendApi backend,
|
935
|
-
const GrContextOptions& options,
|
936
|
-
sk_sp<GrContextThreadSafeProxy> proxy);
|
937
|
-
|
938
|
-
bool init() override;
|
939
|
-
|
940
|
-
GrAtlasManager* onGetAtlasManager() { return fAtlasManager.get(); }
|
941
|
-
#if !defined(SK_ENABLE_OPTIMIZE_SIZE)
|
942
|
-
skgpu::ganesh::SmallPathAtlasMgr* onGetSmallPathAtlasMgr();
|
943
|
-
#endif
|
944
|
-
|
945
|
-
GrDirectContext* asDirectContext() override { return this; }
|
946
|
-
|
947
|
-
private:
|
948
|
-
// This call will make sure out work on the GPU is finished and will execute any outstanding
|
949
|
-
// asynchronous work (e.g. calling finished procs, freeing resources, etc.) related to the
|
950
|
-
// outstanding work on the gpu. The main use currently for this function is when tearing down or
|
951
|
-
// abandoning the context.
|
952
|
-
//
|
953
|
-
// When we finish up work on the GPU it could trigger callbacks to the client. In the case we
|
954
|
-
// are abandoning the context we don't want the client to be able to use the GrDirectContext to
|
955
|
-
// issue more commands during the callback. Thus before calling this function we set the
|
956
|
-
// GrDirectContext's state to be abandoned. However, we need to be able to get by the abaonded
|
957
|
-
// check in the call to know that it is safe to execute this. The shouldExecuteWhileAbandoned
|
958
|
-
// bool is used for this signal.
|
959
|
-
void syncAllOutstandingGpuWork(bool shouldExecuteWhileAbandoned);
|
960
|
-
|
961
|
-
// This delete callback needs to be the first thing on the GrDirectContext so that it is the
|
962
|
-
// last thing destroyed. The callback may signal the client to clean up things that may need
|
963
|
-
// to survive the lifetime of some of the other objects on the GrDirectCotnext. So make sure
|
964
|
-
// we don't call it until all else has been destroyed.
|
965
|
-
class DeleteCallbackHelper {
|
966
|
-
public:
|
967
|
-
DeleteCallbackHelper(GrDirectContextDestroyedContext context,
|
968
|
-
GrDirectContextDestroyedProc proc)
|
969
|
-
: fContext(context), fProc(proc) {}
|
970
|
-
|
971
|
-
~DeleteCallbackHelper() {
|
972
|
-
if (fProc) {
|
973
|
-
fProc(fContext);
|
974
|
-
}
|
975
|
-
}
|
976
|
-
|
977
|
-
private:
|
978
|
-
GrDirectContextDestroyedContext fContext;
|
979
|
-
GrDirectContextDestroyedProc fProc;
|
980
|
-
};
|
981
|
-
std::unique_ptr<DeleteCallbackHelper> fDeleteCallbackHelper;
|
982
|
-
|
983
|
-
const DirectContextID fDirectContextID;
|
984
|
-
// fTaskGroup must appear before anything that uses it (e.g. fGpu), so that it is destroyed
|
985
|
-
// after all of its users. Clients of fTaskGroup will generally want to ensure that they call
|
986
|
-
// wait() on it as they are being destroyed, to avoid the possibility of pending tasks being
|
987
|
-
// invoked after objects they depend upon have already been destroyed.
|
988
|
-
std::unique_ptr<SkTaskGroup> fTaskGroup;
|
989
|
-
std::unique_ptr<sktext::gpu::StrikeCache> fStrikeCache;
|
990
|
-
std::unique_ptr<GrGpu> fGpu;
|
991
|
-
std::unique_ptr<GrResourceCache> fResourceCache;
|
992
|
-
std::unique_ptr<GrResourceProvider> fResourceProvider;
|
993
|
-
|
994
|
-
// This is incremented before we start calling ReleaseProcs from GrSurfaces and decremented
|
995
|
-
// after. A ReleaseProc may trigger code causing another resource to get freed so we to track
|
996
|
-
// the count to know if we in a ReleaseProc at any level. When this is set to a value greated
|
997
|
-
// than zero we will not allow abandonContext calls to be made on the context.
|
998
|
-
int fInsideReleaseProcCnt = 0;
|
999
|
-
|
1000
|
-
bool fDidTestPMConversions;
|
1001
|
-
// true if the PM/UPM conversion succeeded; false otherwise
|
1002
|
-
bool fPMUPMConversionsRoundTrip;
|
1003
|
-
|
1004
|
-
GrContextOptions::PersistentCache* fPersistentCache;
|
1005
|
-
|
1006
|
-
std::unique_ptr<GrClientMappedBufferManager> fMappedBufferManager;
|
1007
|
-
std::unique_ptr<GrAtlasManager> fAtlasManager;
|
1008
|
-
|
1009
|
-
#if !defined(SK_ENABLE_OPTIMIZE_SIZE)
|
1010
|
-
std::unique_ptr<skgpu::ganesh::SmallPathAtlasMgr> fSmallPathAtlasMgr;
|
1011
|
-
#endif
|
1012
|
-
|
1013
|
-
friend class GrDirectContextPriv;
|
1014
|
-
};
|
1015
|
-
|
1016
|
-
|
1017
|
-
#endif
|
7
|
+
// TODO(kjlubick, egdaniel) Delete this after migrating clients.
|
8
|
+
#include "include/gpu/ganesh/GrDirectContext.h"
|