@next2d/webgpu 3.0.0
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/LICENSE +21 -0
- package/README.md +574 -0
- package/package.json +30 -0
- package/src/AtlasManager.d.ts +23 -0
- package/src/AtlasManager.js +123 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +13 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +24 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +15 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +31 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +5 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +42 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +33 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +18 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +12 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +17 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +26 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +43 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +18 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +33 -0
- package/src/AttachmentManager.d.ts +19 -0
- package/src/AttachmentManager.js +105 -0
- package/src/BezierConverter/BezierConverter.d.ts +16 -0
- package/src/BezierConverter/BezierConverter.js +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.js +37 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.js +47 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +29 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +80 -0
- package/src/Blend/BlendInstancedManager.d.ts +35 -0
- package/src/Blend/BlendInstancedManager.js +147 -0
- package/src/Blend/service/BlendAddService.d.ts +1 -0
- package/src/Blend/service/BlendAddService.js +8 -0
- package/src/Blend/service/BlendAlphaService.d.ts +1 -0
- package/src/Blend/service/BlendAlphaService.js +8 -0
- package/src/Blend/service/BlendEraseService.d.ts +1 -0
- package/src/Blend/service/BlendEraseService.js +8 -0
- package/src/Blend/service/BlendGetStateService.d.ts +12 -0
- package/src/Blend/service/BlendGetStateService.js +13 -0
- package/src/Blend/service/BlendOneZeroService.d.ts +1 -0
- package/src/Blend/service/BlendOneZeroService.js +8 -0
- package/src/Blend/service/BlendResetService.d.ts +1 -0
- package/src/Blend/service/BlendResetService.js +8 -0
- package/src/Blend/service/BlendScreenService.d.ts +1 -0
- package/src/Blend/service/BlendScreenService.js +8 -0
- package/src/Blend/service/BlendSetModeService.d.ts +2 -0
- package/src/Blend/service/BlendSetModeService.js +4 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +6 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +79 -0
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +11 -0
- package/src/Blend/usecase/BlendOperationUseCase.js +31 -0
- package/src/Blend.d.ts +8 -0
- package/src/Blend.js +91 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.d.ts +15 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.js +37 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.d.ts +13 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.js +23 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.d.ts +17 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.js +23 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +20 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.d.ts +10 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.js +18 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.d.ts +15 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.js +51 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.d.ts +13 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.js +26 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.d.ts +14 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.js +46 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +12 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +20 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +9 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +15 -0
- package/src/BufferManager.d.ts +93 -0
- package/src/BufferManager.js +487 -0
- package/src/Compute/ComputePipelineManager.d.ts +61 -0
- package/src/Compute/ComputePipelineManager.js +313 -0
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +21 -0
- package/src/Compute/service/ComputeExecuteBlurService.js +81 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +1 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +74 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +4 -0
- package/src/Context/service/ContextComputeGradientMatrixService.js +88 -0
- package/src/Context/service/ContextFillSimpleService.d.ts +2 -0
- package/src/Context/service/ContextFillSimpleService.js +28 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +19 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilService.js +19 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +668 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +210 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +119 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextClipUseCase.js +101 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +476 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +135 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +154 -0
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +230 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +138 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +213 -0
- package/src/Context.d.ts +430 -0
- package/src/Context.js +2453 -0
- package/src/FillTexturePool.d.ts +6 -0
- package/src/FillTexturePool.js +72 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +10 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +214 -0
- package/src/Filter/BevelFilterShader.d.ts +2 -0
- package/src/Filter/BevelFilterShader.js +107 -0
- package/src/Filter/BitmapFilterShader.d.ts +2 -0
- package/src/Filter/BitmapFilterShader.js +207 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +16 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +243 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +40 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +51 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +25 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +180 -0
- package/src/Filter/BlurFilterShader.d.ts +5 -0
- package/src/Filter/BlurFilterShader.js +109 -0
- package/src/Filter/BlurFilterUseCase.d.ts +36 -0
- package/src/Filter/BlurFilterUseCase.js +85 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +12 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +90 -0
- package/src/Filter/ColorMatrixFilterShader.d.ts +4 -0
- package/src/Filter/ColorMatrixFilterShader.js +51 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +6 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +144 -0
- package/src/Filter/ConvolutionFilterShader.d.ts +2 -0
- package/src/Filter/ConvolutionFilterShader.js +115 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +6 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +172 -0
- package/src/Filter/DisplacementMapFilterShader.d.ts +2 -0
- package/src/Filter/DisplacementMapFilterShader.js +114 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +24 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +179 -0
- package/src/Filter/DropShadowFilterShader.d.ts +4 -0
- package/src/Filter/DropShadowFilterShader.js +93 -0
- package/src/Filter/FilterGradientLUTCache.d.ts +29 -0
- package/src/Filter/FilterGradientLUTCache.js +84 -0
- package/src/Filter/FilterOffset.d.ts +8 -0
- package/src/Filter/FilterOffset.js +10 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +24 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +143 -0
- package/src/Filter/GlowFilterShader.d.ts +4 -0
- package/src/Filter/GlowFilterShader.js +66 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +216 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +164 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +23 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +28 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +11 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +19 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +23 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +125 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +14 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +23 -0
- package/src/FrameBufferManager.d.ts +24 -0
- package/src/FrameBufferManager.js +161 -0
- package/src/Gradient/GradientLUTCache.d.ts +61 -0
- package/src/Gradient/GradientLUTCache.js +153 -0
- package/src/Gradient/GradientLUTGenerator.d.ts +30 -0
- package/src/Gradient/GradientLUTGenerator.js +202 -0
- package/src/Grid.d.ts +18 -0
- package/src/Grid.js +21 -0
- package/src/Mask/service/MaskBeginMaskService.d.ts +9 -0
- package/src/Mask/service/MaskBeginMaskService.js +22 -0
- package/src/Mask/service/MaskEndMaskService.d.ts +15 -0
- package/src/Mask/service/MaskEndMaskService.js +36 -0
- package/src/Mask/service/MaskSetMaskBoundsService.d.ts +13 -0
- package/src/Mask/service/MaskSetMaskBoundsService.js +36 -0
- package/src/Mask/service/MaskUnionMaskService.d.ts +4 -0
- package/src/Mask/service/MaskUnionMaskService.js +74 -0
- package/src/Mask/usecase/MaskBindUseCase.d.ts +10 -0
- package/src/Mask/usecase/MaskBindUseCase.js +20 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.d.ts +13 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.js +51 -0
- package/src/Mask.d.ts +12 -0
- package/src/Mask.js +41 -0
- package/src/Mesh/service/MeshFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshFillGenerateService.js +76 -0
- package/src/Mesh/service/MeshLerpService.d.ts +13 -0
- package/src/Mesh/service/MeshLerpService.js +17 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +76 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +12 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +48 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +14 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +28 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +18 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +54 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +25 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +608 -0
- package/src/PathCommand.d.ts +123 -0
- package/src/PathCommand.js +317 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +11 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +35 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +13 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +30 -0
- package/src/SamplerCache.d.ts +18 -0
- package/src/SamplerCache.js +61 -0
- package/src/Shader/BlendModeShader.d.ts +51 -0
- package/src/Shader/BlendModeShader.js +71 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +12 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +28 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +13 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +61 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +19 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +37 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +11 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +24 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +14 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +24 -0
- package/src/Shader/PipelineManager.d.ts +57 -0
- package/src/Shader/PipelineManager.js +2868 -0
- package/src/Shader/ShaderInstancedManager.d.ts +8 -0
- package/src/Shader/ShaderInstancedManager.js +18 -0
- package/src/Shader/ShaderSource.d.ts +60 -0
- package/src/Shader/ShaderSource.js +518 -0
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +5 -0
- package/src/Shader/wgsl/common/SharedWgsl.js +37 -0
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +28 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +43 -0
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +8 -0
- package/src/Shader/wgsl/fragment/BlendFragment.js +63 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +6 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +324 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +28 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +10 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +212 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +3 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +118 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +20 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +17 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +33 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +37 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +43 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +35 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +12 -0
- package/src/Shader/wgsl/vertex/FilterVertex.js +193 -0
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +44 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +48 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +36 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +2 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +66 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +11 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +48 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +13 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +30 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +15 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +26 -0
- package/src/TextureManager.d.ts +15 -0
- package/src/TextureManager.js +87 -0
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +14 -0
- package/src/TexturePool/service/TexturePoolCleanupService.js +28 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +11 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +24 -0
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +13 -0
- package/src/TexturePool/service/TexturePoolReleaseService.js +22 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +19 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +90 -0
- package/src/TexturePool.d.ts +69 -0
- package/src/TexturePool.js +151 -0
- package/src/WebGPUUtil.d.ts +102 -0
- package/src/WebGPUUtil.js +157 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/interface/IAttachmentObject.d.ts +41 -0
- package/src/interface/IAttachmentObject.js +1 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBlendMode.js +1 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBlendState.js +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/IBounds.js +1 -0
- package/src/interface/ICachedBindGroup.d.ts +8 -0
- package/src/interface/ICachedBindGroup.js +1 -0
- package/src/interface/IColorBufferObject.d.ts +17 -0
- package/src/interface/IColorBufferObject.js +1 -0
- package/src/interface/IComplexBlendItem.d.ts +19 -0
- package/src/interface/IComplexBlendItem.js +1 -0
- package/src/interface/IFilterConfig.d.ts +29 -0
- package/src/interface/IFilterConfig.js +1 -0
- package/src/interface/IGradientLUTData.d.ts +8 -0
- package/src/interface/IGradientLUTData.js +1 -0
- package/src/interface/IGradientStop.d.ts +11 -0
- package/src/interface/IGradientStop.js +1 -0
- package/src/interface/ILocalFilterConfig.d.ts +21 -0
- package/src/interface/ILocalFilterConfig.js +1 -0
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IMeshResult.js +1 -0
- package/src/interface/IPath.d.ts +8 -0
- package/src/interface/IPath.js +1 -0
- package/src/interface/IPoint.d.ts +4 -0
- package/src/interface/IPoint.js +1 -0
- package/src/interface/IPooledBuffer.d.ts +8 -0
- package/src/interface/IPooledBuffer.js +1 -0
- package/src/interface/IPooledTexture.d.ts +17 -0
- package/src/interface/IPooledTexture.js +1 -0
- package/src/interface/IQuadraticSegment.d.ts +9 -0
- package/src/interface/IQuadraticSegment.js +1 -0
- package/src/interface/IRectangleInfo.d.ts +13 -0
- package/src/interface/IRectangleInfo.js +1 -0
- package/src/interface/IStencilBufferObject.d.ts +16 -0
- package/src/interface/IStencilBufferObject.js +1 -0
- package/src/interface/IStorageBufferConfig.d.ts +40 -0
- package/src/interface/IStorageBufferConfig.js +1 -0
- package/src/interface/ITextureObject.d.ts +16 -0
- package/src/interface/ITextureObject.js +1 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import { execute as bufferManagerCreateRectVerticesService } from "./BufferManager/service/BufferManagerCreateRectVerticesService";
|
|
2
|
+
import { execute as bufferManagerAcquireVertexBufferUseCase } from "./BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase";
|
|
3
|
+
import { execute as bufferManagerAcquireUniformBufferUseCase } from "./BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase";
|
|
4
|
+
import { execute as bufferManagerReleaseVertexBufferService } from "./BufferManager/service/BufferManagerReleaseVertexBufferService";
|
|
5
|
+
import { execute as bufferManagerReleaseUniformBufferService } from "./BufferManager/service/BufferManagerReleaseUniformBufferService";
|
|
6
|
+
import { execute as bufferManagerAcquireStorageBufferUseCase } from "./BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase";
|
|
7
|
+
import { execute as releaseStorageBufferUseCase } from "./BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase";
|
|
8
|
+
import { execute as cleanupStorageBuffersUseCase } from "./BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase";
|
|
9
|
+
import { execute as bufferManagerCreateIndirectBufferService } from "./BufferManager/service/BufferManagerCreateIndirectBufferService";
|
|
10
|
+
import { execute as updateIndirectBuffer } from "./BufferManager/service/BufferManagerUpdateIndirectBufferService";
|
|
11
|
+
/**
|
|
12
|
+
* @description Dynamic Uniform Buffer Allocator
|
|
13
|
+
* 1フレーム内の全fill uniform データを1本の大バッファにサブアロケートし、
|
|
14
|
+
* BindGroup作成を1回に削減する。
|
|
15
|
+
*/
|
|
16
|
+
export class DynamicUniformAllocator {
|
|
17
|
+
constructor(device, capacity = 65536) {
|
|
18
|
+
Object.defineProperty(this, "device", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: void 0
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "buffer", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: null
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(this, "offset", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: 0
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(this, "capacity", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: void 0
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "alignment", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: 256
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(this, "pendingDestroyBuffers", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true,
|
|
52
|
+
value: []
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(this, "stagingBuffer", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true,
|
|
58
|
+
value: void 0
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(this, "stagingFloat32", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
configurable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
value: void 0
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(this, "dirtyEnd", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
configurable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value: 0
|
|
71
|
+
});
|
|
72
|
+
this.device = device;
|
|
73
|
+
this.capacity = capacity;
|
|
74
|
+
this.stagingBuffer = new ArrayBuffer(capacity);
|
|
75
|
+
this.stagingFloat32 = new Float32Array(this.stagingBuffer);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description フレーム開始時にオフセットをリセット
|
|
79
|
+
* 前フレームの旧バッファを安全に破棄(submit済みのため)
|
|
80
|
+
*/
|
|
81
|
+
resetFrame() {
|
|
82
|
+
this.offset = 0;
|
|
83
|
+
this.dirtyEnd = 0;
|
|
84
|
+
for (const buf of this.pendingDestroyBuffers) {
|
|
85
|
+
buf.destroy();
|
|
86
|
+
}
|
|
87
|
+
this.pendingDestroyBuffers.length = 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @description バッファを取得(遅延生成)
|
|
91
|
+
*/
|
|
92
|
+
getBuffer() {
|
|
93
|
+
if (!this.buffer) {
|
|
94
|
+
this.buffer = this.device.createBuffer({
|
|
95
|
+
"size": this.capacity,
|
|
96
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return this.buffer;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* @description uniform データをCPUステージングバッファにコピーし、アライメント済みオフセットを返す
|
|
103
|
+
* 実際のGPU書き込みはflush()で一括実行される
|
|
104
|
+
* @param data - 書き込むデータ
|
|
105
|
+
* @return アライメント済みオフセット(バイト単位)
|
|
106
|
+
*/
|
|
107
|
+
allocate(data) {
|
|
108
|
+
// バッファの遅延生成
|
|
109
|
+
if (!this.buffer) {
|
|
110
|
+
this.getBuffer();
|
|
111
|
+
}
|
|
112
|
+
const alignedOffset = this.offset;
|
|
113
|
+
const dataSize = data.byteLength;
|
|
114
|
+
if (alignedOffset + dataSize > this.capacity) {
|
|
115
|
+
// 旧バッファにステージングデータをフラッシュ
|
|
116
|
+
this.flush();
|
|
117
|
+
// バッファが足りない場合は容量を倍増して再作成
|
|
118
|
+
this.capacity *= 2;
|
|
119
|
+
const oldBuffer = this.buffer;
|
|
120
|
+
this.buffer = this.device.createBuffer({
|
|
121
|
+
"size": this.capacity,
|
|
122
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
123
|
+
});
|
|
124
|
+
if (oldBuffer) {
|
|
125
|
+
// 旧バッファは即座に破棄しない — コマンドエンコーダーに記録済みの
|
|
126
|
+
// コマンドが旧バッファを参照している可能性があるため、
|
|
127
|
+
// フレーム終了後のresetFrame()で安全に破棄する
|
|
128
|
+
this.pendingDestroyBuffers.push(oldBuffer);
|
|
129
|
+
}
|
|
130
|
+
// ステージングバッファも拡張
|
|
131
|
+
this.stagingBuffer = new ArrayBuffer(this.capacity);
|
|
132
|
+
this.stagingFloat32 = new Float32Array(this.stagingBuffer);
|
|
133
|
+
}
|
|
134
|
+
// CPUステージングバッファにコピー(writeBuffer呼ばない)
|
|
135
|
+
this.stagingFloat32.set(data, alignedOffset / 4);
|
|
136
|
+
const end = alignedOffset + dataSize;
|
|
137
|
+
if (end > this.dirtyEnd) {
|
|
138
|
+
this.dirtyEnd = end;
|
|
139
|
+
}
|
|
140
|
+
// 次のアロケーションは256バイトアライメント
|
|
141
|
+
this.offset = alignedOffset + Math.ceil(dataSize / this.alignment) * this.alignment;
|
|
142
|
+
return alignedOffset;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @description ステージングバッファの内容をGPUバッファに一括書き込み
|
|
146
|
+
* submit前に1回だけ呼び出す
|
|
147
|
+
*/
|
|
148
|
+
flush() {
|
|
149
|
+
if (this.dirtyEnd > 0 && this.buffer) {
|
|
150
|
+
this.device.queue.writeBuffer(this.buffer, 0, this.stagingBuffer, 0, this.dirtyEnd);
|
|
151
|
+
this.dirtyEnd = 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
dispose() {
|
|
155
|
+
if (this.buffer) {
|
|
156
|
+
this.buffer.destroy();
|
|
157
|
+
this.buffer = null;
|
|
158
|
+
}
|
|
159
|
+
for (const buf of this.pendingDestroyBuffers) {
|
|
160
|
+
buf.destroy();
|
|
161
|
+
}
|
|
162
|
+
this.pendingDestroyBuffers.length = 0;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export class BufferManager {
|
|
166
|
+
constructor(device) {
|
|
167
|
+
Object.defineProperty(this, "device", {
|
|
168
|
+
enumerable: true,
|
|
169
|
+
configurable: true,
|
|
170
|
+
writable: true,
|
|
171
|
+
value: void 0
|
|
172
|
+
});
|
|
173
|
+
Object.defineProperty(this, "vertexBuffers", {
|
|
174
|
+
enumerable: true,
|
|
175
|
+
configurable: true,
|
|
176
|
+
writable: true,
|
|
177
|
+
value: void 0
|
|
178
|
+
});
|
|
179
|
+
Object.defineProperty(this, "uniformBuffers", {
|
|
180
|
+
enumerable: true,
|
|
181
|
+
configurable: true,
|
|
182
|
+
writable: true,
|
|
183
|
+
value: void 0
|
|
184
|
+
});
|
|
185
|
+
Object.defineProperty(this, "vertexBufferBuckets", {
|
|
186
|
+
enumerable: true,
|
|
187
|
+
configurable: true,
|
|
188
|
+
writable: true,
|
|
189
|
+
value: void 0
|
|
190
|
+
});
|
|
191
|
+
Object.defineProperty(this, "uniformBufferBuckets", {
|
|
192
|
+
enumerable: true,
|
|
193
|
+
configurable: true,
|
|
194
|
+
writable: true,
|
|
195
|
+
value: void 0
|
|
196
|
+
});
|
|
197
|
+
Object.defineProperty(this, "storageBufferPool", {
|
|
198
|
+
enumerable: true,
|
|
199
|
+
configurable: true,
|
|
200
|
+
writable: true,
|
|
201
|
+
value: void 0
|
|
202
|
+
});
|
|
203
|
+
Object.defineProperty(this, "indirectBuffer", {
|
|
204
|
+
enumerable: true,
|
|
205
|
+
configurable: true,
|
|
206
|
+
writable: true,
|
|
207
|
+
value: void 0
|
|
208
|
+
});
|
|
209
|
+
Object.defineProperty(this, "indirectBufferPool", {
|
|
210
|
+
enumerable: true,
|
|
211
|
+
configurable: true,
|
|
212
|
+
writable: true,
|
|
213
|
+
value: void 0
|
|
214
|
+
});
|
|
215
|
+
Object.defineProperty(this, "frameIndirectBuffers", {
|
|
216
|
+
enumerable: true,
|
|
217
|
+
configurable: true,
|
|
218
|
+
writable: true,
|
|
219
|
+
value: void 0
|
|
220
|
+
});
|
|
221
|
+
Object.defineProperty(this, "frameNumber", {
|
|
222
|
+
enumerable: true,
|
|
223
|
+
configurable: true,
|
|
224
|
+
writable: true,
|
|
225
|
+
value: void 0
|
|
226
|
+
});
|
|
227
|
+
Object.defineProperty(this, "unitRectBuffer", {
|
|
228
|
+
enumerable: true,
|
|
229
|
+
configurable: true,
|
|
230
|
+
writable: true,
|
|
231
|
+
value: void 0
|
|
232
|
+
});
|
|
233
|
+
Object.defineProperty(this, "frameVertexPoolBuffers", {
|
|
234
|
+
enumerable: true,
|
|
235
|
+
configurable: true,
|
|
236
|
+
writable: true,
|
|
237
|
+
value: void 0
|
|
238
|
+
});
|
|
239
|
+
Object.defineProperty(this, "frameUniformPoolBuffers", {
|
|
240
|
+
enumerable: true,
|
|
241
|
+
configurable: true,
|
|
242
|
+
writable: true,
|
|
243
|
+
value: void 0
|
|
244
|
+
});
|
|
245
|
+
Object.defineProperty(this, "dynamicUniform", {
|
|
246
|
+
enumerable: true,
|
|
247
|
+
configurable: true,
|
|
248
|
+
writable: true,
|
|
249
|
+
value: void 0
|
|
250
|
+
});
|
|
251
|
+
this.device = device;
|
|
252
|
+
this.vertexBuffers = new Map();
|
|
253
|
+
this.uniformBuffers = new Map();
|
|
254
|
+
this.vertexBufferBuckets = new Map();
|
|
255
|
+
this.uniformBufferBuckets = new Map();
|
|
256
|
+
this.storageBufferPool = [];
|
|
257
|
+
this.indirectBuffer = null;
|
|
258
|
+
this.indirectBufferPool = [];
|
|
259
|
+
this.frameIndirectBuffers = [];
|
|
260
|
+
this.frameNumber = 0;
|
|
261
|
+
this.unitRectBuffer = null;
|
|
262
|
+
this.frameVertexPoolBuffers = [];
|
|
263
|
+
this.frameUniformPoolBuffers = [];
|
|
264
|
+
this.dynamicUniform = new DynamicUniformAllocator(device);
|
|
265
|
+
}
|
|
266
|
+
createVertexBuffer(name, data) {
|
|
267
|
+
const buffer = this.device.createBuffer({
|
|
268
|
+
"size": data.byteLength,
|
|
269
|
+
"usage": GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
270
|
+
"mappedAtCreation": true
|
|
271
|
+
});
|
|
272
|
+
new Float32Array(buffer.getMappedRange()).set(data);
|
|
273
|
+
buffer.unmap();
|
|
274
|
+
this.vertexBuffers.set(name, buffer);
|
|
275
|
+
return buffer;
|
|
276
|
+
}
|
|
277
|
+
createUniformBuffer(name, size) {
|
|
278
|
+
const buffer = this.device.createBuffer({
|
|
279
|
+
"size": size,
|
|
280
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
281
|
+
});
|
|
282
|
+
this.uniformBuffers.set(name, buffer);
|
|
283
|
+
return buffer;
|
|
284
|
+
}
|
|
285
|
+
updateUniformBuffer(name, data) {
|
|
286
|
+
const buffer = this.uniformBuffers.get(name);
|
|
287
|
+
if (buffer) {
|
|
288
|
+
this.device.queue.writeBuffer(buffer, 0, data.buffer, data.byteOffset, data.byteLength);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
getVertexBuffer(name) {
|
|
292
|
+
return this.vertexBuffers.get(name);
|
|
293
|
+
}
|
|
294
|
+
getUniformBuffer(name) {
|
|
295
|
+
return this.uniformBuffers.get(name);
|
|
296
|
+
}
|
|
297
|
+
createRectVertices(x, y, width, height) {
|
|
298
|
+
return bufferManagerCreateRectVerticesService(x, y, width, height);
|
|
299
|
+
}
|
|
300
|
+
acquireVertexBuffer(requiredSize, data) {
|
|
301
|
+
const buffer = bufferManagerAcquireVertexBufferUseCase(this.device, this.vertexBufferBuckets, requiredSize, data);
|
|
302
|
+
this.frameVertexPoolBuffers.push(buffer);
|
|
303
|
+
return buffer;
|
|
304
|
+
}
|
|
305
|
+
releaseVertexBuffer(buffer) {
|
|
306
|
+
bufferManagerReleaseVertexBufferService(this.vertexBufferBuckets, buffer);
|
|
307
|
+
}
|
|
308
|
+
acquireUniformBuffer(requiredSize) {
|
|
309
|
+
const buffer = bufferManagerAcquireUniformBufferUseCase(this.device, this.uniformBufferBuckets, requiredSize);
|
|
310
|
+
this.frameUniformPoolBuffers.push(buffer);
|
|
311
|
+
return buffer;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* @description Uniform Bufferの取得と書き込みを一括で行うヘルパー
|
|
315
|
+
* acquireUniformBuffer + writeBuffer の2ステップを1呼び出しに統合
|
|
316
|
+
* @param data - 書き込むデータ
|
|
317
|
+
* @param byteLength - 書き込みバイト数(省略時はdata.byteLength)
|
|
318
|
+
* @return GPUBuffer
|
|
319
|
+
*/
|
|
320
|
+
acquireAndWriteUniformBuffer(data, byteLength) {
|
|
321
|
+
const writeBytes = byteLength ?? data.byteLength;
|
|
322
|
+
const buffer = this.acquireUniformBuffer(writeBytes);
|
|
323
|
+
this.device.queue.writeBuffer(buffer, 0, data.buffer, data.byteOffset, writeBytes);
|
|
324
|
+
return buffer;
|
|
325
|
+
}
|
|
326
|
+
releaseUniformBuffer(buffer) {
|
|
327
|
+
bufferManagerReleaseUniformBufferService(this.uniformBufferBuckets, buffer);
|
|
328
|
+
}
|
|
329
|
+
destroyBuffer(name) {
|
|
330
|
+
const vertexBuffer = this.vertexBuffers.get(name);
|
|
331
|
+
if (vertexBuffer) {
|
|
332
|
+
vertexBuffer.destroy();
|
|
333
|
+
this.vertexBuffers.delete(name);
|
|
334
|
+
}
|
|
335
|
+
const uniformBuffer = this.uniformBuffers.get(name);
|
|
336
|
+
if (uniformBuffer) {
|
|
337
|
+
uniformBuffer.destroy();
|
|
338
|
+
this.uniformBuffers.delete(name);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
dispose() {
|
|
342
|
+
for (const buffer of this.vertexBuffers.values()) {
|
|
343
|
+
buffer.destroy();
|
|
344
|
+
}
|
|
345
|
+
this.vertexBuffers.clear();
|
|
346
|
+
for (const buffer of this.uniformBuffers.values()) {
|
|
347
|
+
buffer.destroy();
|
|
348
|
+
}
|
|
349
|
+
this.uniformBuffers.clear();
|
|
350
|
+
for (const bucket of this.vertexBufferBuckets.values()) {
|
|
351
|
+
for (const buffer of bucket) {
|
|
352
|
+
buffer.destroy();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
this.vertexBufferBuckets.clear();
|
|
356
|
+
for (const bucket of this.uniformBufferBuckets.values()) {
|
|
357
|
+
for (const buffer of bucket) {
|
|
358
|
+
buffer.destroy();
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
this.uniformBufferBuckets.clear();
|
|
362
|
+
for (const entry of this.storageBufferPool) {
|
|
363
|
+
entry.buffer.destroy();
|
|
364
|
+
}
|
|
365
|
+
this.storageBufferPool = [];
|
|
366
|
+
if (this.indirectBuffer) {
|
|
367
|
+
this.indirectBuffer.destroy();
|
|
368
|
+
this.indirectBuffer = null;
|
|
369
|
+
}
|
|
370
|
+
for (const buffer of this.indirectBufferPool) {
|
|
371
|
+
buffer.destroy();
|
|
372
|
+
}
|
|
373
|
+
this.indirectBufferPool = [];
|
|
374
|
+
for (const buffer of this.frameIndirectBuffers) {
|
|
375
|
+
buffer.destroy();
|
|
376
|
+
}
|
|
377
|
+
this.frameIndirectBuffers = [];
|
|
378
|
+
if (this.unitRectBuffer) {
|
|
379
|
+
this.unitRectBuffer.destroy();
|
|
380
|
+
this.unitRectBuffer = null;
|
|
381
|
+
}
|
|
382
|
+
this.frameVertexPoolBuffers.length = 0;
|
|
383
|
+
this.frameUniformPoolBuffers.length = 0;
|
|
384
|
+
this.dynamicUniform.dispose();
|
|
385
|
+
}
|
|
386
|
+
getPoolStats() {
|
|
387
|
+
let vertexCount = 0;
|
|
388
|
+
for (const bucket of this.vertexBufferBuckets.values()) {
|
|
389
|
+
vertexCount += bucket.length;
|
|
390
|
+
}
|
|
391
|
+
let uniformCount = 0;
|
|
392
|
+
for (const bucket of this.uniformBufferBuckets.values()) {
|
|
393
|
+
uniformCount += bucket.length;
|
|
394
|
+
}
|
|
395
|
+
return {
|
|
396
|
+
"vertexPoolSize": vertexCount,
|
|
397
|
+
"uniformPoolSize": uniformCount
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
clearFrameBuffers() {
|
|
401
|
+
for (const buffer of this.vertexBuffers.values()) {
|
|
402
|
+
buffer.destroy();
|
|
403
|
+
}
|
|
404
|
+
this.vertexBuffers.clear();
|
|
405
|
+
for (const buffer of this.uniformBuffers.values()) {
|
|
406
|
+
buffer.destroy();
|
|
407
|
+
}
|
|
408
|
+
this.uniformBuffers.clear();
|
|
409
|
+
// フレーム内で取得したプールバッファをプールに返却
|
|
410
|
+
for (const buffer of this.frameVertexPoolBuffers) {
|
|
411
|
+
bufferManagerReleaseVertexBufferService(this.vertexBufferBuckets, buffer);
|
|
412
|
+
}
|
|
413
|
+
this.frameVertexPoolBuffers.length = 0;
|
|
414
|
+
for (const buffer of this.frameUniformPoolBuffers) {
|
|
415
|
+
bufferManagerReleaseUniformBufferService(this.uniformBufferBuckets, buffer);
|
|
416
|
+
}
|
|
417
|
+
this.frameUniformPoolBuffers.length = 0;
|
|
418
|
+
// フレーム内で使用したIndirect Bufferをプールに返却
|
|
419
|
+
for (const buffer of this.frameIndirectBuffers) {
|
|
420
|
+
this.indirectBufferPool.push(buffer);
|
|
421
|
+
}
|
|
422
|
+
this.frameIndirectBuffers.length = 0;
|
|
423
|
+
this.releaseAllStorageBuffers();
|
|
424
|
+
this.dynamicUniform.resetFrame();
|
|
425
|
+
this.frameNumber++;
|
|
426
|
+
if (this.frameNumber % 60 === 0) {
|
|
427
|
+
cleanupStorageBuffersUseCase(this.storageBufferPool, this.frameNumber);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
releaseAllStorageBuffers() {
|
|
431
|
+
for (const entry of this.storageBufferPool) {
|
|
432
|
+
entry.inUse = false;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
acquireStorageBuffer(requiredSize) {
|
|
436
|
+
return bufferManagerAcquireStorageBufferUseCase(this.device, this.storageBufferPool, requiredSize, this.frameNumber);
|
|
437
|
+
}
|
|
438
|
+
releaseStorageBuffer(buffer) {
|
|
439
|
+
releaseStorageBufferUseCase(this.storageBufferPool, buffer);
|
|
440
|
+
}
|
|
441
|
+
writeStorageBuffer(buffer, data) {
|
|
442
|
+
this.device.queue.writeBuffer(buffer, 0, data.buffer, data.byteOffset, data.byteLength);
|
|
443
|
+
}
|
|
444
|
+
getOrCreateIndirectBuffer(vertexCount, instanceCount, firstVertex = 0, firstInstance = 0) {
|
|
445
|
+
if (!this.indirectBuffer) {
|
|
446
|
+
this.indirectBuffer = bufferManagerCreateIndirectBufferService(this.device, vertexCount, instanceCount, firstVertex, firstInstance);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
updateIndirectBuffer(this.device, this.indirectBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
|
|
450
|
+
}
|
|
451
|
+
return this.indirectBuffer;
|
|
452
|
+
}
|
|
453
|
+
createIndirectBuffer(vertexCount, instanceCount, firstVertex = 0, firstInstance = 0) {
|
|
454
|
+
let buffer = this.indirectBufferPool.pop();
|
|
455
|
+
if (buffer) {
|
|
456
|
+
updateIndirectBuffer(this.device, buffer, vertexCount, instanceCount, firstVertex, firstInstance);
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
buffer = bufferManagerCreateIndirectBufferService(this.device, vertexCount, instanceCount, firstVertex, firstInstance);
|
|
460
|
+
}
|
|
461
|
+
this.frameIndirectBuffers.push(buffer);
|
|
462
|
+
return buffer;
|
|
463
|
+
}
|
|
464
|
+
getUnitRectBuffer() {
|
|
465
|
+
if (!this.unitRectBuffer) {
|
|
466
|
+
const vertices = this.createRectVertices(0, 0, 1, 1);
|
|
467
|
+
this.unitRectBuffer = this.device.createBuffer({
|
|
468
|
+
"size": vertices.byteLength,
|
|
469
|
+
"usage": GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
470
|
+
"mappedAtCreation": true
|
|
471
|
+
});
|
|
472
|
+
new Float32Array(this.unitRectBuffer.getMappedRange()).set(vertices);
|
|
473
|
+
this.unitRectBuffer.unmap();
|
|
474
|
+
}
|
|
475
|
+
return this.unitRectBuffer;
|
|
476
|
+
}
|
|
477
|
+
getFrameNumber() {
|
|
478
|
+
return this.frameNumber;
|
|
479
|
+
}
|
|
480
|
+
getStoragePoolStats() {
|
|
481
|
+
const inUse = this.storageBufferPool.filter((e) => e.inUse).length;
|
|
482
|
+
return {
|
|
483
|
+
"storagePoolSize": this.storageBufferPool.length,
|
|
484
|
+
"storagePoolInUse": inUse
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Compute Pipeline Manager
|
|
3
|
+
* Compute Shaderパイプラインの管理
|
|
4
|
+
*
|
|
5
|
+
* Compute Shaderは並列処理に最適で、フィルター処理を高速化。
|
|
6
|
+
* 特に大きなブラー半径(64+)の場合、20-35%の高速化が期待できる。
|
|
7
|
+
*
|
|
8
|
+
* @class
|
|
9
|
+
*/
|
|
10
|
+
export declare class ComputePipelineManager {
|
|
11
|
+
private device;
|
|
12
|
+
private pipelines;
|
|
13
|
+
private bindGroupLayouts;
|
|
14
|
+
/**
|
|
15
|
+
* @constructor
|
|
16
|
+
* @param {GPUDevice} device - WebGPU device
|
|
17
|
+
*/
|
|
18
|
+
constructor(device: GPUDevice);
|
|
19
|
+
/**
|
|
20
|
+
* @description ブラー用Compute Pipelineを初期化
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
private initializeBlurPipelines;
|
|
24
|
+
/**
|
|
25
|
+
* @description ブラーCompute Pipelineを作成
|
|
26
|
+
* @param {string} name - パイプライン名
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
private createBlurComputePipeline;
|
|
30
|
+
/**
|
|
31
|
+
* @description ブラーCompute Shaderコードを生成
|
|
32
|
+
* ボックスブラー(均一加重平均)を使用。Fragment Shaderと同一出力。
|
|
33
|
+
* @return {string} WGSLシェーダーコード
|
|
34
|
+
* @private
|
|
35
|
+
*/
|
|
36
|
+
private getBlurComputeShaderCode;
|
|
37
|
+
/**
|
|
38
|
+
* @description 共有メモリ版ブラーCompute Shaderコードを生成
|
|
39
|
+
* ワークグループ共有メモリでテクスチャ読み込みの重複を排除。
|
|
40
|
+
* radius >= 8 で通常版より高速。
|
|
41
|
+
* @return {string} WGSLシェーダーコード
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
private getSharedBlurComputeShaderCode;
|
|
45
|
+
/**
|
|
46
|
+
* @description パイプラインを取得
|
|
47
|
+
* @param {string} name - パイプライン名
|
|
48
|
+
* @return {GPUComputePipeline | undefined}
|
|
49
|
+
*/
|
|
50
|
+
getPipeline(name: string): GPUComputePipeline | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* @description BindGroupLayoutを取得
|
|
53
|
+
* @param {string} name - レイアウト名
|
|
54
|
+
* @return {GPUBindGroupLayout | undefined}
|
|
55
|
+
*/
|
|
56
|
+
getBindGroupLayout(name: string): GPUBindGroupLayout | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* @description リソースを破棄
|
|
59
|
+
*/
|
|
60
|
+
destroy(): void;
|
|
61
|
+
}
|