@agpu/bindings 0.2.12 → 0.2.13
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/README.md +14 -0
- package/dist/classes/main/adapter.d.ts +2 -1
- package/dist/classes/main/adapter.js +1 -1
- package/dist/classes/main/device.d.ts +2 -2
- package/dist/classes/main/device.js +1 -1
- package/dist/classes/main/webgpucontrols.d.ts +1 -0
- package/dist/classes/main/webgpucontrols.js +1 -1
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# @agpu/bindings
|
|
2
|
+
|
|
3
|
+
**@agpu/bindings** is a set of classes that is made to wrap WebGPU but with modularity and ease of use.
|
|
4
|
+
|
|
5
|
+
# Installation
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
import {WebGPUControls} from "@agpu/bindings"
|
|
9
|
+
|
|
10
|
+
const webgpu = new WebGPUControls(document.getElementById("canvas"))
|
|
11
|
+
const adapter = new webgpu.Adapter()
|
|
12
|
+
const context = new webgpu.Context()
|
|
13
|
+
const device = new adapter.Device()
|
|
14
|
+
```
|
|
@@ -23,7 +23,8 @@ export declare class AdapterControls {
|
|
|
23
23
|
readonly features: GPUSupportedFeatures;
|
|
24
24
|
readonly limits: GPUSupportedLimits;
|
|
25
25
|
adapter: GPUAdapter;
|
|
26
|
-
device: (options
|
|
26
|
+
device: (options?: DEVICE_REQUEST) => Promise<DeviceControls>;
|
|
27
|
+
get Device(): Promise<DeviceControls>;
|
|
27
28
|
}
|
|
28
29
|
export default AdapterControls;
|
|
29
30
|
interface DEVICE_REQUEST {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=this&&this.__esDecorate||((e,t,r,i,a,s)=>{function o(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var u,n=i.kind,d="getter"===n?"get":"setter"===n?"set":"value",l=!t&&e?i.static?e:e.prototype:null,c=t||(l?Object.getOwnPropertyDescriptor(l,i.name):{}),f=!1,p=r.length-1;p>=0;p--){var h={};for(var v in i)h[v]="access"===v?{}:i[v];for(var v in i.access)h.access[v]=i.access[v];h.addInitializer=e=>{if(f)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(e||null))};var m=(0,r[p])("accessor"===n?{get:c.get,set:c.set}:c[d],h);if("accessor"===n){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(u=o(m.get))&&(c.get=u),(u=o(m.set))&&(c.set=u),(u=o(m.init))&&a.unshift(u)}else(u=o(m))&&("field"===n?a.unshift(u):c[d]=u)}l&&Object.defineProperty(l,i.name,c),f=!0}),t=this&&this.__runInitializers||function(e,t,r){for(var i=arguments.length>2,a=0;t.length>a;a++)r=i?t[a].call(e,r):t[a].call(e);return i?r:void 0},r=this&&this.__importDefault||(e=>e&&e.__esModule?e:{default:e});Object.defineProperty(exports,"__esModule",{value:!0}),exports.AdapterControls=void 0;const i=require("@agpu/helpers/decorators"),a=r(require("../../helpers/errors")),s=require("@agpu/helpers/decorators"),o=r(require("./device"));require("@webgpu/types");let u=(()=>{let r,u,n=[(0,i.brand)("AdapterControls"),(0,s.raw)("adapter")],d=[];return class{static{u=this}static{const i="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;e(null,r={value:u},n,{kind:"class",name:u.name,metadata:i},null,d),u=r.value,i&&Object.defineProperty(u,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:i}),t(u,d)}constructor(e){this.info={subgroup:{max:e.info.subgroupMaxSize,min:e.info.subgroupMinSize},...e.info},this.device=async t=>{if(this.#e)return this.#e;const r=t
|
|
1
|
+
"use strict";var e=this&&this.__esDecorate||((e,t,r,i,a,s)=>{function o(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var u,n=i.kind,d="getter"===n?"get":"setter"===n?"set":"value",l=!t&&e?i.static?e:e.prototype:null,c=t||(l?Object.getOwnPropertyDescriptor(l,i.name):{}),f=!1,p=r.length-1;p>=0;p--){var h={};for(var v in i)h[v]="access"===v?{}:i[v];for(var v in i.access)h.access[v]=i.access[v];h.addInitializer=e=>{if(f)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(e||null))};var m=(0,r[p])("accessor"===n?{get:c.get,set:c.set}:c[d],h);if("accessor"===n){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(u=o(m.get))&&(c.get=u),(u=o(m.set))&&(c.set=u),(u=o(m.init))&&a.unshift(u)}else(u=o(m))&&("field"===n?a.unshift(u):c[d]=u)}l&&Object.defineProperty(l,i.name,c),f=!0}),t=this&&this.__runInitializers||function(e,t,r){for(var i=arguments.length>2,a=0;t.length>a;a++)r=i?t[a].call(e,r):t[a].call(e);return i?r:void 0},r=this&&this.__importDefault||(e=>e&&e.__esModule?e:{default:e});Object.defineProperty(exports,"__esModule",{value:!0}),exports.AdapterControls=void 0;const i=require("@agpu/helpers/decorators"),a=r(require("../../helpers/errors")),s=require("@agpu/helpers/decorators"),o=r(require("./device"));require("@webgpu/types");let u=(()=>{let r,u,n=[(0,i.brand)("AdapterControls"),(0,s.raw)("adapter")],d=[];return class{static{u=this}static{const i="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;e(null,r={value:u},n,{kind:"class",name:u.name,metadata:i},null,d),u=r.value,i&&Object.defineProperty(u,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:i}),t(u,d)}constructor(e){this.info={subgroup:{max:e.info.subgroupMaxSize,min:e.info.subgroupMinSize},...e.info},this.device=async t=>{if(this.#e)return this.#e;const r=t?.required?.features?.filter(t=>!e.features.has(t))??[];if(r.length)throw(0,a.default)(29,`Adapter does not support required feature(s): ${r.join(", ")}.`,"Check adapter.features before requesting the device or remove unsupported required features.");return this.#e=new o.default(await e.requestDevice({requiredFeatures:t?.required?.features,requiredLimits:t?.required?.limits,defaultQueue:t?.defaultQueue}).catch(()=>{throw(0,a.default)(30,"Failed to request a GPU device from the adapter.","Verify the required features and limits are valid for the selected adapter.")}))},this.features=e.features,this.limits=e.limits,this.adapter=e}#e;info;features;limits;adapter;device;get Device(){return this.device()}},u})();exports.AdapterControls=u,exports.default=u;
|
|
@@ -125,7 +125,7 @@ export declare class DeviceControls {
|
|
|
125
125
|
};
|
|
126
126
|
fromURL(url: string): Promise<TextureCreator>;
|
|
127
127
|
from(gputexture: GPUTexture): TextureCreator;
|
|
128
|
-
fromBitmap(bitmap: ImageBitmap):
|
|
128
|
+
fromBitmap(bitmap: ImageBitmap): {
|
|
129
129
|
"__#private@#device": GPUDevice;
|
|
130
130
|
"__#private@#texture": GPUTexture;
|
|
131
131
|
"__#private@#view": import("../..").TextureViewCreator;
|
|
@@ -172,7 +172,7 @@ export declare class DeviceControls {
|
|
|
172
172
|
label<T extends string>(label: T): T;
|
|
173
173
|
readonly __brand: "TextureCreator";
|
|
174
174
|
[Symbol.hasInstance](instance: TextureCreator): instance is TextureCreator;
|
|
175
|
-
}
|
|
175
|
+
};
|
|
176
176
|
};
|
|
177
177
|
readonly Sampler: {
|
|
178
178
|
new (options?: GPUSamplerDescriptor): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=this&&this.__esDecorate||((e,t,r,u,s,a)=>{function
|
|
1
|
+
"use strict";var e=this&&this.__esDecorate||((e,t,r,u,s,a)=>{function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var n,o=u.kind,c="getter"===o?"get":"setter"===o?"set":"value",l=!t&&e?u.static?e:e.prototype:null,d=t||(l?Object.getOwnPropertyDescriptor(l,u.name):{}),p=!1,f=r.length-1;f>=0;f--){var m={};for(var h in u)m[h]="access"===h?{}:u[h];for(var h in u.access)m.access[h]=u.access[h];m.addInitializer=e=>{if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var b=(0,r[f])("accessor"===o?{get:d.get,set:d.set}:d[c],m);if("accessor"===o){if(void 0===b)continue;if(null===b||"object"!=typeof b)throw new TypeError("Object expected");(n=i(b.get))&&(d.get=n),(n=i(b.set))&&(d.set=n),(n=i(b.init))&&s.unshift(n)}else(n=i(b))&&("field"===o?s.unshift(n):d[c]=n)}l&&Object.defineProperty(l,u.name,d),p=!0}),t=this&&this.__runInitializers||function(e,t,r){for(var u=arguments.length>2,s=0;t.length>s;s++)r=u?t[s].call(e,r):t[s].call(e);return u?r:void 0},r=this&&this.__importDefault||(e=>e&&e.__esModule?e:{default:e});Object.defineProperty(exports,"__esModule",{value:!0}),exports.DeviceControls=void 0;const u=r(require("../sub/data/bindGroupLayout")),s=r(require("../sub/data/buffers")),a=r(require("../sub/pipeline/pipelineLayout")),i=r(require("../sub/pipeline/renderPipeline")),n=r(require("../sub/pipeline/sampler")),o=r(require("../sub/data/shaderModule")),c=r(require("../sub/data/texture")),l=r(require("../sub/data/bindGroup")),d=r(require("../sub/pipeline/computePipeline")),p=r(require("../../helpers/errors")),f=r(require("../sub/pipeline/querySet")),m=r(require("../sub/pipeline/renderBundleEncoder")),h=require("@agpu/helpers/decorators"),b=require("@agpu/helpers/decorators"),g=r(require("../sub/pipeline/commandEncoder"));require("@webgpu/types");let w=(()=>{let r,w,x=[(0,h.brand)("DeviceControls"),(0,b.raw)("device")],y=[];return class{static{w=this}static{const u="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;e(null,r={value:w},x,{kind:"class",name:w.name,metadata:u},null,y),w=r.value,u&&Object.defineProperty(w,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:u}),t(w,y)}constructor(e){this.#e=e,this.device=e,this.Buffer=class extends s.default{constructor(t){super(e,t)}static async from(t){if(!(t.usage&GPUBufferUsage.MAP_READ))throw(0,p.default)(18,"Buffer is not MAP_READ compatible","Ensure GPUBufferUsage.MAP_READ was set during creation.");await t.mapAsync(GPUMapMode.READ);const r=t.getMappedRange().slice(0);return t.unmap(),new s.default(e,{value:r,usage:t.usage})}};const t=this;this.Texture=class extends c.default{constructor(t){super(e,t)}static async fromURL(r){const u=await fetch(r),s=await u.blob(),a=await createImageBitmap(s),i=new t.Texture({size:[a.width,a.height,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return e.queue.copyExternalImageToTexture({source:a},{texture:i.raw()},[a.width,a.height]),i}static from(t){return new c.default(e,t)}static fromBitmap(r){const u=new t.Texture({size:[r.width,r.height,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return e.queue.copyExternalImageToTexture({source:r},{texture:u.raw()},[r.width,r.height]),u}},this.Sampler=class extends n.default{constructor(t={magFilter:"linear",minFilter:"linear"}){super(e,t)}static from(t){return new n.default(e,t)}},this.ShaderModule=class extends o.default{constructor(t,r){super(e,t,r)}static from(t){return new o.default(e,t)}},this.RenderPipeline=class extends i.default{constructor(t){super(e,t)}static from(t){return new i.default(e,t)}},this.BindGroupLayout=class extends u.default{constructor(t){super(e,t)}static from(t){return new u.default(e,t)}},this.PipelineLayout=class extends a.default{constructor(t={}){super(e,t)}static from(t){return new a.default(e,t)}},this.BindGroup=class extends l.default{constructor(t){super(e,t)}static from(t){return new l.default(e,t)}},this.ComputePipeline=class extends d.default{constructor(t){super(e,t)}static from(t){return new d.default(e,t)}},this.QuerySet=class extends f.default{constructor(t){super(e,t)}static from(t){return new f.default(e,t)}},this.RenderBundleEncoder=class extends m.default{constructor(t){super(e,e.createRenderBundleEncoder(t))}},this.CommandEncoder=class extends g.default{constructor(t){super(e,t)}static from(t){return new g.default(e,t)}}}queue={submit:e=>{if(!Array.isArray(e)||0===e.length)throw(0,p.default)(34,"queue.submit requires at least one CommandBufferCreator.","Finish a command encoder first and pass the resulting command buffer(s) to queue.submit(...).");return this.#e.queue.submit(e.map(e=>e.raw()))},on:(e,t)=>{if("submittedWorkDone"!==e)throw(0,p.default)(35,`Unsupported queue event: ${e+""}.`,"Use queue.on('submittedWorkDone', callback).");this.#e.queue.onSubmittedWorkDone().then(()=>t())}};#e;device;Buffer;Texture;Sampler;ShaderModule;BindGroupLayout;BindGroup;RenderPipeline;ComputePipeline;PipelineLayout;QuerySet;RenderBundleEncoder;CommandEncoder},w})();exports.DeviceControls=w,exports.default=w;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=this&&this.__esDecorate||((e,t,r,a,n,o)=>{function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,c=a.kind,l="getter"===c?"get":"setter"===c?"set":"value",u=!t&&e?a.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,a.name):{}),
|
|
1
|
+
"use strict";var e=this&&this.__esDecorate||((e,t,r,a,n,o)=>{function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,c=a.kind,l="getter"===c?"get":"setter"===c?"set":"value",u=!t&&e?a.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,a.name):{}),h=!1,p=r.length-1;p>=0;p--){var f={};for(var v in a)f[v]="access"===v?{}:a[v];for(var v in a.access)f.access[v]=a.access[v];f.addInitializer=e=>{if(h)throw new TypeError("Cannot add initializers after decoration has completed");o.push(i(e||null))};var g=(0,r[p])("accessor"===c?{get:d.get,set:d.set}:d[l],f);if("accessor"===c){if(void 0===g)continue;if(null===g||"object"!=typeof g)throw new TypeError("Object expected");(s=i(g.get))&&(d.get=s),(s=i(g.set))&&(d.set=s),(s=i(g.init))&&n.unshift(s)}else(s=i(g))&&("field"===c?n.unshift(s):d[l]=s)}u&&Object.defineProperty(u,a.name,d),h=!0}),t=this&&this.__runInitializers||function(e,t,r){for(var a=arguments.length>2,n=0;t.length>n;n++)r=a?t[n].call(e,r):t[n].call(e);return a?r:void 0},r=this&&this.__importDefault||(e=>e&&e.__esModule?e:{default:e});Object.defineProperty(exports,"__esModule",{value:!0});const a=require("@agpu/helpers/decorators"),n=r(require("../../helpers/errors")),o=r(require("./adapter")),i=require("./context");require("@webgpu/types");let s=(()=>{let r,s,c=[(0,a.brand)("WebGPUControls")],l=[];return class{static{s=this}static{const a="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;e(null,r={value:s},c,{kind:"class",name:s.name,metadata:a},null,l),s=r.value,a&&Object.defineProperty(s,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:a}),t(s,l)}constructor(e){if(!navigator.gpu)throw(0,n.default)(24,"WebGPU not supported!");if(!(e instanceof HTMLCanvasElement))throw(0,n.default)(26,"WebGPUControls requires a HTMLCanvasElement.","Pass a real <canvas> element when constructing WebGPUControls.");this.#e=navigator.gpu.getPreferredCanvasFormat(),this.cv=e}cv;#e;preferredCanvasFormat(){return this.#e}context(){let e=this.cv.getContext("webgpu");if(e)return new i.ContextControls(e);throw(0,n.default)(27,"Failed to acquire a WebGPU canvas context.","Ensure the canvas supports getContext('webgpu') and has not been initialized with a different context type.")}get Context(){return this.context()}#t;get Adapter(){return this.#t?Promise.resolve(this.#t):navigator.gpu.requestAdapter().then(e=>{if(!e)throw(0,n.default)(25,"navigator.gpu.requestAdapter returned null");return this.#t=new o.default(e)}).catch(e=>{if(e instanceof Error&&"code"in e)throw e;throw(0,n.default)(28,"Failed to acquire a GPU adapter.","Ensure a compatible WebGPU adapter is available and the browser has permission to use it.")})}},s})();exports.default=s;
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"@webgpu/types": "^0.1.69"
|
|
17
17
|
},
|
|
18
18
|
"name": "@agpu/bindings",
|
|
19
|
-
"version": "0.2.
|
|
19
|
+
"version": "0.2.13",
|
|
20
20
|
"author": {
|
|
21
21
|
"name": "Kryft Studios",
|
|
22
22
|
"email": "AfriaStudios@outlook.in",
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
"types": "./dist/index.d.ts"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"webgpu",
|
|
36
|
+
"3d",
|
|
37
|
+
"graphics",
|
|
38
|
+
"andromeda",
|
|
39
|
+
"gpu",
|
|
40
|
+
"modular",
|
|
41
|
+
"bindings",
|
|
42
|
+
"rendering"
|
|
43
|
+
],
|
|
34
44
|
"scripts": {
|
|
35
45
|
"lint": "eslint",
|
|
36
46
|
"build": "node --no-warnings cmd/build.js",
|