@luma.gl/webgpu 9.0.0-alpha.14 → 9.0.0-alpha.16
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/dist/adapter/helpers/accessor-to-format.js +100 -1
- package/dist/adapter/helpers/convert-texture-format.js +5 -6
- package/dist/adapter/helpers/generate-mipmaps.js +88 -92
- package/dist/adapter/helpers/get-bind-group.js +54 -48
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +97 -84
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +181 -129
- package/dist/adapter/resources/webgpu-buffer.js +57 -73
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +47 -63
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +51 -55
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +22 -24
- package/dist/adapter/resources/webgpu-external-texture.js +26 -27
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +89 -103
- package/dist/adapter/resources/webgpu-query.js +42 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts +1 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +64 -89
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +158 -154
- package/dist/adapter/resources/webgpu-sampler.d.ts +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +16 -22
- package/dist/adapter/resources/webgpu-shader.d.ts +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +47 -58
- package/dist/adapter/resources/webgpu-texture.d.ts +0 -1
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +100 -103
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +77 -90
- package/dist/adapter/webgpu-device.js +215 -242
- package/dist/adapter/webgpu-types.js +0 -2
- package/dist/bundle.js +1 -2
- package/dist/dist.js +8051 -0
- package/dist/dist.min.js +1 -0
- package/dist/es5/adapter/helpers/accessor-to-format.js +2 -0
- package/dist/es5/adapter/helpers/accessor-to-format.js.map +1 -0
- package/dist/es5/adapter/helpers/convert-texture-format.js +13 -0
- package/dist/es5/adapter/helpers/convert-texture-format.js.map +1 -0
- package/dist/es5/adapter/helpers/generate-mipmaps.js +103 -0
- package/dist/es5/adapter/helpers/generate-mipmaps.js.map +1 -0
- package/dist/es5/adapter/helpers/get-bind-group.js +66 -0
- package/dist/es5/adapter/helpers/get-bind-group.js.map +1 -0
- package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js +149 -0
- package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
- package/dist/es5/adapter/helpers/webgpu-parameters.js +150 -0
- package/dist/es5/adapter/helpers/webgpu-parameters.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-buffer.js +131 -0
- package/dist/es5/adapter/resources/webgpu-buffer.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-command-encoder.js +90 -0
- package/dist/es5/adapter/resources/webgpu-command-encoder.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-compute-pass.js +85 -0
- package/dist/es5/adapter/resources/webgpu-compute-pass.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-compute-pipeline.js +48 -0
- package/dist/es5/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-external-texture.js +50 -0
- package/dist/es5/adapter/resources/webgpu-external-texture.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-framebuffer.js +126 -0
- package/dist/es5/adapter/resources/webgpu-framebuffer.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-query.js +2 -0
- package/dist/es5/adapter/resources/webgpu-query.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-render-pass.js +124 -0
- package/dist/es5/adapter/resources/webgpu-render-pass.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-render-pipeline.js +185 -0
- package/dist/es5/adapter/resources/webgpu-render-pipeline.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-sampler.js +45 -0
- package/dist/es5/adapter/resources/webgpu-sampler.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-shader.js +125 -0
- package/dist/es5/adapter/resources/webgpu-shader.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-texture.js +138 -0
- package/dist/es5/adapter/resources/webgpu-texture.js.map +1 -0
- package/dist/es5/adapter/webgpu-canvas-context.js +111 -0
- package/dist/es5/adapter/webgpu-canvas-context.js.map +1 -0
- package/dist/es5/adapter/webgpu-device.js +317 -0
- package/dist/es5/adapter/webgpu-device.js.map +1 -0
- package/dist/es5/adapter/webgpu-types.js +2 -0
- package/dist/es5/adapter/webgpu-types.js.map +1 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/glsl/glsllang.js +47 -0
- package/dist/es5/glsl/glsllang.js.map +1 -0
- package/dist/es5/index.js +44 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/init.js +7 -0
- package/dist/es5/init.js.map +1 -0
- package/dist/esm/adapter/helpers/accessor-to-format.js +2 -0
- package/dist/esm/adapter/helpers/accessor-to-format.js.map +1 -0
- package/dist/esm/adapter/helpers/convert-texture-format.js +7 -0
- package/dist/esm/adapter/helpers/convert-texture-format.js.map +1 -0
- package/dist/esm/adapter/helpers/generate-mipmaps.js +88 -0
- package/dist/esm/adapter/helpers/generate-mipmaps.js.map +1 -0
- package/dist/esm/adapter/helpers/get-bind-group.js +51 -0
- package/dist/esm/adapter/helpers/get-bind-group.js.map +1 -0
- package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js +83 -0
- package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
- package/dist/esm/adapter/helpers/webgpu-parameters.js +137 -0
- package/dist/esm/adapter/helpers/webgpu-parameters.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-buffer.js +70 -0
- package/dist/esm/adapter/resources/webgpu-buffer.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-command-encoder.js +49 -0
- package/dist/esm/adapter/resources/webgpu-command-encoder.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-compute-pass.js +44 -0
- package/dist/esm/adapter/resources/webgpu-compute-pass.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-compute-pipeline.js +23 -0
- package/dist/esm/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-external-texture.js +23 -0
- package/dist/esm/adapter/resources/webgpu-external-texture.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-framebuffer.js +93 -0
- package/dist/esm/adapter/resources/webgpu-framebuffer.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-query.js +2 -0
- package/dist/esm/adapter/resources/webgpu-query.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-render-pass.js +79 -0
- package/dist/esm/adapter/resources/webgpu-render-pass.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-render-pipeline.js +130 -0
- package/dist/esm/adapter/resources/webgpu-render-pipeline.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-sampler.js +20 -0
- package/dist/esm/adapter/resources/webgpu-sampler.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-shader.js +50 -0
- package/dist/esm/adapter/resources/webgpu-shader.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-texture.js +95 -0
- package/dist/esm/adapter/resources/webgpu-texture.js.map +1 -0
- package/dist/esm/adapter/webgpu-canvas-context.js +74 -0
- package/dist/esm/adapter/webgpu-canvas-context.js.map +1 -0
- package/dist/esm/adapter/webgpu-device.js +196 -0
- package/dist/esm/adapter/webgpu-device.js.map +1 -0
- package/dist/esm/adapter/webgpu-types.js +2 -0
- package/dist/esm/adapter/webgpu-types.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/glsl/glsllang.js +9 -0
- package/dist/esm/glsl/glsllang.js.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/init.js +4 -0
- package/dist/esm/init.js.map +1 -0
- package/dist/glsl/glsllang.js +9 -7
- package/dist/index.js +8 -6
- package/dist/init.js +1 -2
- package/package.json +8 -8
- package/src/adapter/helpers/webgpu-parameters.ts +7 -2
- package/src/adapter/resources/webgpu-command-encoder.ts +2 -1
- package/src/adapter/resources/webgpu-compute-pass.ts +4 -4
- package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -1
- package/src/adapter/resources/webgpu-framebuffer.ts +3 -2
- package/src/adapter/resources/webgpu-render-pass.ts +2 -2
- package/src/adapter/resources/webgpu-render-pipeline.ts +2 -1
- package/src/adapter/resources/webgpu-shader.ts +1 -1
- package/src/adapter/webgpu-canvas-context.ts +3 -2
- package/src/adapter/webgpu-device.ts +2 -2
- package/dist/adapter/helpers/accessor-to-format.js.map +0 -1
- package/dist/adapter/helpers/convert-texture-format.js.map +0 -1
- package/dist/adapter/helpers/generate-mipmaps.js.map +0 -1
- package/dist/adapter/helpers/get-bind-group.js.map +0 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +0 -1
- package/dist/adapter/helpers/webgpu-parameters.js.map +0 -1
- package/dist/adapter/resources/webgpu-buffer.js.map +0 -1
- package/dist/adapter/resources/webgpu-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgpu-compute-pass.js.map +0 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgpu-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgpu-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgpu-query.js.map +0 -1
- package/dist/adapter/resources/webgpu-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgpu-sampler.js.map +0 -1
- package/dist/adapter/resources/webgpu-shader.js.map +0 -1
- package/dist/adapter/resources/webgpu-texture.js.map +0 -1
- package/dist/adapter/webgpu-canvas-context.js.map +0 -1
- package/dist/adapter/webgpu-device.js.map +0 -1
- package/dist/adapter/webgpu-types.js.map +0 -1
- package/dist/bundle.js.map +0 -1
- package/dist/glsl/glsllang.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.js.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _api = require("@luma.gl/api");
|
|
16
|
+
var _convertTextureFormat = require("../helpers/convert-texture-format");
|
|
17
|
+
var _webgpuSampler = _interopRequireDefault(require("./webgpu-sampler"));
|
|
18
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
19
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
20
|
+
var BASE_DIMENSIONS = {
|
|
21
|
+
'1d': '1d',
|
|
22
|
+
'2d': '2d',
|
|
23
|
+
'2d-array': '2d',
|
|
24
|
+
'cube': '2d',
|
|
25
|
+
'cube-array': '2d',
|
|
26
|
+
'3d': '3d'
|
|
27
|
+
};
|
|
28
|
+
var WebGPUTexture = function (_Texture) {
|
|
29
|
+
(0, _inherits2.default)(WebGPUTexture, _Texture);
|
|
30
|
+
var _super = _createSuper(WebGPUTexture);
|
|
31
|
+
function WebGPUTexture(device, props) {
|
|
32
|
+
var _this;
|
|
33
|
+
(0, _classCallCheck2.default)(this, WebGPUTexture);
|
|
34
|
+
_this = _super.call(this, device, props);
|
|
35
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
|
|
36
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handle", void 0);
|
|
37
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "view", void 0);
|
|
38
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sampler", void 0);
|
|
39
|
+
if (typeof _this.props.format === 'number') {
|
|
40
|
+
throw new Error('number format');
|
|
41
|
+
}
|
|
42
|
+
_this.device = device;
|
|
43
|
+
_this.handle = _this.props.handle || _this.createHandle();
|
|
44
|
+
if (_this.props.data) {
|
|
45
|
+
_this.setData({
|
|
46
|
+
data: _this.props.data
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
_this.sampler = props.sampler instanceof _webgpuSampler.default ? props.sampler : new _webgpuSampler.default(_this.device, props.sampler);
|
|
50
|
+
_this.view = _this.handle.createView({});
|
|
51
|
+
return _this;
|
|
52
|
+
}
|
|
53
|
+
(0, _createClass2.default)(WebGPUTexture, [{
|
|
54
|
+
key: "createHandle",
|
|
55
|
+
value: function createHandle() {
|
|
56
|
+
var _this$props$data, _this$props$data2;
|
|
57
|
+
if (typeof this.props.format === 'number') {
|
|
58
|
+
throw new Error('number format');
|
|
59
|
+
}
|
|
60
|
+
var width = this.props.width || ((_this$props$data = this.props.data) === null || _this$props$data === void 0 ? void 0 : _this$props$data.width) || 1;
|
|
61
|
+
var height = this.props.height || ((_this$props$data2 = this.props.data) === null || _this$props$data2 === void 0 ? void 0 : _this$props$data2.height) || 1;
|
|
62
|
+
return this.device.handle.createTexture({
|
|
63
|
+
size: {
|
|
64
|
+
width: width,
|
|
65
|
+
height: height,
|
|
66
|
+
depthOrArrayLayers: this.props.depth
|
|
67
|
+
},
|
|
68
|
+
dimension: BASE_DIMENSIONS[this.props.dimension],
|
|
69
|
+
format: (0, _convertTextureFormat.getWebGPUTextureFormat)(this.props.format),
|
|
70
|
+
usage: this.props.usage,
|
|
71
|
+
mipLevelCount: this.props.mipLevels,
|
|
72
|
+
sampleCount: this.props.samples
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}, {
|
|
76
|
+
key: "destroy",
|
|
77
|
+
value: function destroy() {
|
|
78
|
+
this.handle.destroy();
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
key: "setSampler",
|
|
82
|
+
value: function setSampler(sampler) {
|
|
83
|
+
this.sampler = sampler instanceof _webgpuSampler.default ? sampler : new _webgpuSampler.default(this.device, sampler);
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
87
|
+
key: "setData",
|
|
88
|
+
value: function setData(options) {
|
|
89
|
+
return this.setImage({
|
|
90
|
+
source: options.data
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "setImage",
|
|
95
|
+
value: function setImage(options) {
|
|
96
|
+
var source = options.source,
|
|
97
|
+
_options$width = options.width,
|
|
98
|
+
width = _options$width === void 0 ? options.source.width : _options$width,
|
|
99
|
+
_options$height = options.height,
|
|
100
|
+
height = _options$height === void 0 ? options.source.height : _options$height,
|
|
101
|
+
_options$depth = options.depth,
|
|
102
|
+
depth = _options$depth === void 0 ? 1 : _options$depth,
|
|
103
|
+
_options$sourceX = options.sourceX,
|
|
104
|
+
sourceX = _options$sourceX === void 0 ? 0 : _options$sourceX,
|
|
105
|
+
_options$sourceY = options.sourceY,
|
|
106
|
+
sourceY = _options$sourceY === void 0 ? 0 : _options$sourceY,
|
|
107
|
+
_options$mipLevel = options.mipLevel,
|
|
108
|
+
mipLevel = _options$mipLevel === void 0 ? 0 : _options$mipLevel,
|
|
109
|
+
_options$x = options.x,
|
|
110
|
+
x = _options$x === void 0 ? 0 : _options$x,
|
|
111
|
+
_options$y = options.y,
|
|
112
|
+
y = _options$y === void 0 ? 0 : _options$y,
|
|
113
|
+
_options$z = options.z,
|
|
114
|
+
z = _options$z === void 0 ? 0 : _options$z,
|
|
115
|
+
_options$aspect = options.aspect,
|
|
116
|
+
aspect = _options$aspect === void 0 ? 'all' : _options$aspect,
|
|
117
|
+
_options$colorSpace = options.colorSpace,
|
|
118
|
+
colorSpace = _options$colorSpace === void 0 ? 'srgb' : _options$colorSpace,
|
|
119
|
+
_options$premultiplie = options.premultipliedAlpha,
|
|
120
|
+
premultipliedAlpha = _options$premultiplie === void 0 ? false : _options$premultiplie;
|
|
121
|
+
this.device.handle.queue.copyExternalImageToTexture({
|
|
122
|
+
source: source,
|
|
123
|
+
origin: [sourceX, sourceY]
|
|
124
|
+
}, {
|
|
125
|
+
texture: this.handle,
|
|
126
|
+
origin: [x, y, z],
|
|
127
|
+
mipLevel: mipLevel,
|
|
128
|
+
aspect: aspect,
|
|
129
|
+
colorSpace: colorSpace,
|
|
130
|
+
premultipliedAlpha: premultipliedAlpha
|
|
131
|
+
}, [width, height, depth]);
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
}]);
|
|
135
|
+
return WebGPUTexture;
|
|
136
|
+
}(_api.Texture);
|
|
137
|
+
exports.default = WebGPUTexture;
|
|
138
|
+
//# sourceMappingURL=webgpu-texture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgpu-texture.js","names":["_api","require","_convertTextureFormat","_webgpuSampler","_interopRequireDefault","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","BASE_DIMENSIONS","WebGPUTexture","_Texture","_inherits2","_super","device","props","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","format","Error","handle","createHandle","data","setData","sampler","WebGPUSampler","view","createView","_createClass2","key","value","_this$props$data","_this$props$data2","width","height","createTexture","size","depthOrArrayLayers","depth","dimension","getWebGPUTextureFormat","usage","mipLevelCount","mipLevels","sampleCount","samples","destroy","setSampler","options","setImage","source","_options$width","_options$height","_options$depth","_options$sourceX","sourceX","_options$sourceY","sourceY","_options$mipLevel","mipLevel","_options$x","x","_options$y","y","_options$z","z","_options$aspect","aspect","_options$colorSpace","colorSpace","_options$premultiplie","premultipliedAlpha","queue","copyExternalImageToTexture","origin","texture","Texture","exports"],"sources":["../../../../src/adapter/resources/webgpu-texture.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {Texture, TextureProps, Sampler, SamplerProps} from '@luma.gl/api';\nimport {getWebGPUTextureFormat} from '../helpers/convert-texture-format';\nimport type WebGPUDevice from '../webgpu-device';\nimport WebGPUSampler from './webgpu-sampler';\n\nconst BASE_DIMENSIONS: Record<string, '1d' | '2d' | '3d'> = {\n '1d': '1d',\n '2d': '2d',\n '2d-array': '2d',\n 'cube': '2d',\n 'cube-array': '2d',\n '3d': '3d'\n};\n\nexport default class WebGPUTexture extends Texture {\n readonly device: WebGPUDevice;\n readonly handle: GPUTexture;\n readonly view: GPUTextureView;\n sampler: WebGPUSampler;\n\n // static async createFromImageURL(src, usage = 0) {\n // const img = document.createElement('img');\n // img.src = src;\n // await img.decode();\n // return WebGPUTexture(img, usage);\n // }\n\n constructor(device: WebGPUDevice, props: TextureProps) {\n super(device, props);\n\n if (typeof this.props.format === 'number') {\n throw new Error('number format');\n }\n\n this.device = device;\n this.handle = this.props.handle || this.createHandle();\n\n if (this.props.data) {\n this.setData({data: this.props.data} );\n }\n\n // Create a default sampler. This mimics the WebGL1 API where sampler props are stored on the texture\n // this.setSampler(props.sampler);\n this.sampler = props.sampler instanceof WebGPUSampler ? props.sampler : new WebGPUSampler(this.device, props.sampler);\n\n // TODO - To support texture arrays we need to create custom views...\n // But we are not ready to expose TextureViews to the public API.\n this.view = this.handle.createView({\n // format: this.props.format,\n // dimension: this.props.dimension,\n // aspect = \"all\";\n // baseMipLevel: 0;\n // mipLevelCount;\n // baseArrayLayer = 0;\n // arrayLayerCount;\n });\n }\n\n protected createHandle(): GPUTexture {\n if (typeof this.props.format === 'number') {\n throw new Error('number format');\n }\n\n // Deduce size from data - TODO this is a hack\n // @ts-expect-error\n const width = this.props.width || this.props.data?.width || 1;\n // @ts-expect-error\n const height = this.props.height || this.props.data?.height || 1;\n\n return this.device.handle.createTexture({\n size: {\n width,\n height,\n depthOrArrayLayers: this.props.depth\n },\n dimension: BASE_DIMENSIONS[this.props.dimension],\n format: getWebGPUTextureFormat(this.props.format),\n usage: this.props.usage,\n mipLevelCount: this.props.mipLevels,\n sampleCount: this.props.samples\n });\n }\n\n override destroy(): void {\n this.handle.destroy();\n }\n\n /**\n * Set default sampler\n * Accept a sampler instance or set of props;\n */\n setSampler(sampler: Sampler | SamplerProps): this {\n this.sampler = sampler instanceof WebGPUSampler ? sampler : new WebGPUSampler(this.device, sampler);\n return this;\n }\n\n setData(options: {\n data: any;\n }) {\n return this.setImage({source: options.data});\n }\n\n /** Set image */\n setImage(options: {\n source: ImageBitmap | HTMLCanvasElement | OffscreenCanvas;\n width?: number;\n height?: number;\n depth?: number;\n sourceX?: number;\n sourceY?: number;\n mipLevel?: number;\n x?: number;\n y?: number;\n z?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only';\n colorSpace?: 'srgb';\n premultipliedAlpha?: boolean;\n }): this {\n const {\n source,\n width = options.source.width,\n height = options.source.height,\n depth = 1,\n sourceX = 0,\n sourceY = 0,\n mipLevel = 0,\n x = 0,\n y = 0,\n z = 0,\n aspect = 'all',\n colorSpace = 'srgb',\n premultipliedAlpha = false\n } = options;\n\n // TODO - max out width\n\n this.device.handle.queue.copyExternalImageToTexture(\n // source: GPUImageCopyExternalImage\n {\n source,\n origin: [sourceX, sourceY]\n },\n // destination: GPUImageCopyTextureTagged\n {\n texture: this.handle,\n origin: [x, y, z],\n mipLevel,\n aspect,\n colorSpace,\n premultipliedAlpha\n },\n // copySize: GPUExtent3D\n [\n width,\n height,\n depth\n ]\n );\n return this;\n }\n\n /*\n async readPixels() {\n const readbackBuffer = device.createBuffer({\n usage: Buffer.COPY_DST | Buffer.MAP_READ,\n size: 4 * textureWidth * textureHeight,\n });\n\n // Copy data from the texture to the buffer.\n const encoder = device.createCommandEncoder();\n encoder.copyTextureToBuffer(\n { texture },\n { buffer, rowPitch: textureWidth * 4 },\n [textureWidth, textureHeight],\n );\n device.submit([encoder.finish()]);\n\n // Get the data on the CPU.\n await buffer.mapAsync(GPUMapMode.READ);\n saveScreenshot(buffer.getMappedRange());\n buffer.unmap();\n }\n\n setImageData(imageData, usage): this {\n let data = null;\n\n const bytesPerRow = Math.ceil((img.width * 4) / 256) * 256;\n if (bytesPerRow == img.width * 4) {\n data = imageData.data;\n } else {\n data = new Uint8Array(bytesPerRow * img.height);\n let imagePixelIndex = 0;\n for (let y = 0; y < img.height; ++y) {\n for (let x = 0; x < img.width; ++x) {\n const i = x * 4 + y * bytesPerRow;\n data[i] = imageData.data[imagePixelIndex];\n data[i + 1] = imageData.data[imagePixelIndex + 1];\n data[i + 2] = imageData.data[imagePixelIndex + 2];\n data[i + 3] = imageData.data[imagePixelIndex + 3];\n imagePixelIndex += 4;\n }\n }\n }\n return this;\n }\n\n setData(data): this {\n const textureDataBuffer = this.device.handle.createBuffer({\n size: data.byteLength,\n usage: Buffer.COPY_DST | Buffer.COPY_SRC,\n mappedAtCreation: true\n });\n new Uint8Array(textureDataBuffer.getMappedRange()).set(data);\n textureDataBuffer.unmap();\n\n this.setBuffer(textureDataBuffer);\n\n textureDataBuffer.destroy();\n return this;\n }\n\n setBuffer(textureDataBuffer, {bytesPerRow}): this {\n const commandEncoder = this.device.handle.createCommandEncoder();\n commandEncoder.copyBufferToTexture(\n {\n buffer: textureDataBuffer,\n bytesPerRow\n },\n {\n texture: this.handle\n },\n {\n width,\n height,\n depth\n }\n );\n\n this.device.handle.defaultQueue.submit([commandEncoder.finish()]);\n return this;\n }\n */\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
14
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _api = require("@luma.gl/api");
|
|
17
|
+
var _convertTextureFormat = require("./helpers/convert-texture-format");
|
|
18
|
+
var _webgpuFramebuffer = _interopRequireDefault(require("./resources/webgpu-framebuffer"));
|
|
19
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
20
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
21
|
+
var WebGPUCanvasContext = function (_CanvasContext) {
|
|
22
|
+
(0, _inherits2.default)(WebGPUCanvasContext, _CanvasContext);
|
|
23
|
+
var _super = _createSuper(WebGPUCanvasContext);
|
|
24
|
+
function WebGPUCanvasContext(device, adapter, props) {
|
|
25
|
+
var _this;
|
|
26
|
+
(0, _classCallCheck2.default)(this, WebGPUCanvasContext);
|
|
27
|
+
_this = _super.call(this, props);
|
|
28
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
|
|
29
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "gpuCanvasContext", void 0);
|
|
30
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "format", void 0);
|
|
31
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "depthStencilFormat", 'depth24plus');
|
|
32
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sampleCount", 1);
|
|
33
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "depthStencilAttachment", null);
|
|
34
|
+
_this.device = device;
|
|
35
|
+
_this.width = -1;
|
|
36
|
+
_this.height = -1;
|
|
37
|
+
_this._setAutoCreatedCanvasId("".concat(_this.device.id, "-canvas"));
|
|
38
|
+
_this.gpuCanvasContext = _this.canvas.getContext('webgpu');
|
|
39
|
+
_this.format = _this.gpuCanvasContext.getPreferredFormat(adapter);
|
|
40
|
+
return _this;
|
|
41
|
+
}
|
|
42
|
+
(0, _createClass2.default)(WebGPUCanvasContext, [{
|
|
43
|
+
key: "destroy",
|
|
44
|
+
value: function destroy() {
|
|
45
|
+
this.gpuCanvasContext.unconfigure();
|
|
46
|
+
}
|
|
47
|
+
}, {
|
|
48
|
+
key: "getCurrentFramebuffer",
|
|
49
|
+
value: function getCurrentFramebuffer() {
|
|
50
|
+
this.update();
|
|
51
|
+
var currentColorAttachment = this.device.createTexture({
|
|
52
|
+
id: 'default-render-target',
|
|
53
|
+
handle: this.gpuCanvasContext.getCurrentTexture(),
|
|
54
|
+
format: this.format,
|
|
55
|
+
width: this.width,
|
|
56
|
+
height: this.height
|
|
57
|
+
});
|
|
58
|
+
this._createDepthStencilAttachment();
|
|
59
|
+
return new _webgpuFramebuffer.default(this.device, {
|
|
60
|
+
colorAttachments: [currentColorAttachment],
|
|
61
|
+
depthStencilAttachment: this.depthStencilAttachment
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "update",
|
|
66
|
+
value: function update() {
|
|
67
|
+
var _this$getPixelSize = this.getPixelSize(),
|
|
68
|
+
_this$getPixelSize2 = (0, _slicedToArray2.default)(_this$getPixelSize, 2),
|
|
69
|
+
width = _this$getPixelSize2[0],
|
|
70
|
+
height = _this$getPixelSize2[1];
|
|
71
|
+
var sizeChanged = width !== this.width || height !== this.height;
|
|
72
|
+
if (sizeChanged) {
|
|
73
|
+
this.width = width;
|
|
74
|
+
this.height = height;
|
|
75
|
+
if (this.depthStencilAttachment) {
|
|
76
|
+
this.depthStencilAttachment.destroy();
|
|
77
|
+
this.depthStencilAttachment = null;
|
|
78
|
+
}
|
|
79
|
+
this.gpuCanvasContext.configure({
|
|
80
|
+
device: this.device.handle,
|
|
81
|
+
format: (0, _convertTextureFormat.getWebGPUTextureFormat)(this.format),
|
|
82
|
+
colorSpace: this.props.colorSpace,
|
|
83
|
+
alphaMode: this.props.alphaMode
|
|
84
|
+
});
|
|
85
|
+
_api.log.log(1, "Resized to ".concat(this.width, "x").concat(this.height, "px"))();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
key: "resize",
|
|
90
|
+
value: function resize(options) {
|
|
91
|
+
this.update();
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "_createDepthStencilAttachment",
|
|
95
|
+
value: function _createDepthStencilAttachment() {
|
|
96
|
+
if (!this.depthStencilAttachment) {
|
|
97
|
+
this.depthStencilAttachment = this.device.createTexture({
|
|
98
|
+
id: 'depth-stencil-target',
|
|
99
|
+
format: this.depthStencilFormat,
|
|
100
|
+
width: this.width,
|
|
101
|
+
height: this.height,
|
|
102
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return this.depthStencilAttachment;
|
|
106
|
+
}
|
|
107
|
+
}]);
|
|
108
|
+
return WebGPUCanvasContext;
|
|
109
|
+
}(_api.CanvasContext);
|
|
110
|
+
exports.default = WebGPUCanvasContext;
|
|
111
|
+
//# sourceMappingURL=webgpu-canvas-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgpu-canvas-context.js","names":["_api","require","_convertTextureFormat","_webgpuFramebuffer","_interopRequireDefault","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","WebGPUCanvasContext","_CanvasContext","_inherits2","_super","device","adapter","props","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","width","height","_setAutoCreatedCanvasId","concat","id","gpuCanvasContext","canvas","getContext","format","getPreferredFormat","_createClass2","key","value","destroy","unconfigure","getCurrentFramebuffer","update","currentColorAttachment","createTexture","handle","getCurrentTexture","_createDepthStencilAttachment","WEBGPUFramebuffer","colorAttachments","depthStencilAttachment","_this$getPixelSize","getPixelSize","_this$getPixelSize2","_slicedToArray2","sizeChanged","configure","getWebGPUTextureFormat","colorSpace","alphaMode","log","resize","options","depthStencilFormat","usage","GPUTextureUsage","RENDER_ATTACHMENT","CanvasContext","exports"],"sources":["../../../src/adapter/webgpu-canvas-context.ts"],"sourcesContent":["import type {Texture, TextureFormat, CanvasContextProps} from '@luma.gl/api';\nimport {CanvasContext, log} from '@luma.gl/api';\nimport {getWebGPUTextureFormat} from './helpers/convert-texture-format';\nimport WebGPUDevice from './webgpu-device';\nimport WEBGPUFramebuffer from './resources/webgpu-framebuffer';\n\n/** \n * Holds a WebGPU Canvas Context which handles resizing etc \n */\nexport default class WebGPUCanvasContext extends CanvasContext {\n readonly device: WebGPUDevice;\n readonly gpuCanvasContext: GPUCanvasContext;\n readonly format: TextureFormat;\n depthStencilFormat: TextureFormat = 'depth24plus';\n sampleCount: number = 1;\n\n private depthStencilAttachment: Texture | null = null;\n\n constructor(device: WebGPUDevice, adapter: GPUAdapter, props: CanvasContextProps) {\n super(props);\n this.device = device;\n // TODO - hack to trigger resize?\n this.width = -1;\n this.height = -1;\n \n this._setAutoCreatedCanvasId(`${this.device.id}-canvas`);\n this.gpuCanvasContext = this.canvas.getContext('webgpu') as GPUCanvasContext;\n // @ts-expect-error TODO this has been replaced\n this.format = this.gpuCanvasContext.getPreferredFormat(adapter);\n }\n\n destroy(): void {\n this.gpuCanvasContext.unconfigure();\n }\n\n /** Update framebuffer with properly resized \"swap chain\" texture views */\n getCurrentFramebuffer(): WEBGPUFramebuffer {\n // Ensure the canvas context size is updated\n this.update();\n\n // Wrap the current canvas context texture in a luma.gl texture \n const currentColorAttachment = this.device.createTexture({\n id: 'default-render-target',\n handle: this.gpuCanvasContext.getCurrentTexture(),\n format: this.format,\n width: this.width,\n height: this.height\n });\n\n // Resize the depth stencil attachment\n this._createDepthStencilAttachment();\n\n return new WEBGPUFramebuffer(this.device, {\n colorAttachments: [currentColorAttachment],\n depthStencilAttachment: this.depthStencilAttachment\n });\n }\n\n /** Resizes and updates render targets if necessary */\n update() {\n const [width, height] = this.getPixelSize();\n\n const sizeChanged = width !== this.width || height !== this.height;\n\n if (sizeChanged) {\n this.width = width;\n this.height = height;\n\n if (this.depthStencilAttachment) {\n this.depthStencilAttachment.destroy();\n this.depthStencilAttachment = null;\n }\n\n // Reconfigure the canvas size.\n // https://www.w3.org/TR/webgpu/#canvas-configuration\n this.gpuCanvasContext.configure({\n device: this.device.handle,\n format: getWebGPUTextureFormat(this.format),\n // size: [this.width, this.height],\n colorSpace: this.props.colorSpace,\n alphaMode: this.props.alphaMode\n });\n\n log.log(1, `Resized to ${this.width}x${this.height}px`)();\n }\n\n }\n\n resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {\n this.update();\n }\n\n /** We build render targets on demand (i.e. not when size changes but when about to render) */\n _createDepthStencilAttachment() {\n if (!this.depthStencilAttachment) {\n this.depthStencilAttachment = this.device.createTexture({\n id: 'depth-stencil-target',\n format: this.depthStencilFormat,\n width: this.width,\n height: this.height,\n usage: GPUTextureUsage.RENDER_ATTACHMENT\n });\n }\n return this.depthStencilAttachment;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
var _api = require("@luma.gl/api");
|
|
18
|
+
var _webgpuBuffer = _interopRequireDefault(require("./resources/webgpu-buffer"));
|
|
19
|
+
var _webgpuTexture = _interopRequireDefault(require("./resources/webgpu-texture"));
|
|
20
|
+
var _webgpuExternalTexture = _interopRequireDefault(require("./resources/webgpu-external-texture"));
|
|
21
|
+
var _webgpuSampler = _interopRequireDefault(require("./resources/webgpu-sampler"));
|
|
22
|
+
var _webgpuShader = _interopRequireDefault(require("./resources/webgpu-shader"));
|
|
23
|
+
var _webgpuRenderPipeline = _interopRequireDefault(require("./resources/webgpu-render-pipeline"));
|
|
24
|
+
var _webgpuComputePipeline = _interopRequireDefault(require("./resources/webgpu-compute-pipeline"));
|
|
25
|
+
var _webgpuRenderPass = _interopRequireDefault(require("./resources/webgpu-render-pass"));
|
|
26
|
+
var _webgpuComputePass = _interopRequireDefault(require("./resources/webgpu-compute-pass"));
|
|
27
|
+
var _webgpuCanvasContext = _interopRequireDefault(require("./webgpu-canvas-context"));
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
30
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
31
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
32
|
+
var WebGPUDevice = function (_Device) {
|
|
33
|
+
(0, _inherits2.default)(WebGPUDevice, _Device);
|
|
34
|
+
var _super = _createSuper(WebGPUDevice);
|
|
35
|
+
function WebGPUDevice(device, adapter, props) {
|
|
36
|
+
var _this;
|
|
37
|
+
(0, _classCallCheck2.default)(this, WebGPUDevice);
|
|
38
|
+
_this = _super.call(this, _objectSpread(_objectSpread({}, props), {}, {
|
|
39
|
+
id: props.id || (0, _api.uid)('webgpu-device')
|
|
40
|
+
}));
|
|
41
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handle", void 0);
|
|
42
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "adapter", void 0);
|
|
43
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lost", void 0);
|
|
44
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "canvasContext", null);
|
|
45
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "commandEncoder", null);
|
|
46
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderPass", null);
|
|
47
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_info", void 0);
|
|
48
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_isLost", false);
|
|
49
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "features", void 0);
|
|
50
|
+
_this.handle = device;
|
|
51
|
+
_this.adapter = adapter;
|
|
52
|
+
_this._info = {
|
|
53
|
+
type: 'webgpu',
|
|
54
|
+
vendor: _this.adapter.__brand,
|
|
55
|
+
renderer: '',
|
|
56
|
+
version: '',
|
|
57
|
+
gpu: 'unknown',
|
|
58
|
+
shadingLanguages: ['glsl', 'wgsl'],
|
|
59
|
+
shadingLanguageVersions: {
|
|
60
|
+
glsl: '450',
|
|
61
|
+
wgsl: '100'
|
|
62
|
+
},
|
|
63
|
+
vendorMasked: '',
|
|
64
|
+
rendererMasked: ''
|
|
65
|
+
};
|
|
66
|
+
_this.lost = new Promise(function () {
|
|
67
|
+
var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(resolve) {
|
|
68
|
+
var lostInfo;
|
|
69
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
70
|
+
while (1) switch (_context.prev = _context.next) {
|
|
71
|
+
case 0:
|
|
72
|
+
_context.next = 2;
|
|
73
|
+
return _this.handle.lost;
|
|
74
|
+
case 2:
|
|
75
|
+
lostInfo = _context.sent;
|
|
76
|
+
_this._isLost = true;
|
|
77
|
+
resolve({
|
|
78
|
+
reason: 'destroyed',
|
|
79
|
+
message: lostInfo.message
|
|
80
|
+
});
|
|
81
|
+
case 5:
|
|
82
|
+
case "end":
|
|
83
|
+
return _context.stop();
|
|
84
|
+
}
|
|
85
|
+
}, _callee);
|
|
86
|
+
}));
|
|
87
|
+
return function (_x) {
|
|
88
|
+
return _ref.apply(this, arguments);
|
|
89
|
+
};
|
|
90
|
+
}());
|
|
91
|
+
if (props.canvas) {
|
|
92
|
+
_this.canvasContext = new _webgpuCanvasContext.default((0, _assertThisInitialized2.default)(_this), _this.adapter, {
|
|
93
|
+
canvas: props.canvas
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
_this.features = _this._getFeatures();
|
|
97
|
+
return _this;
|
|
98
|
+
}
|
|
99
|
+
(0, _createClass2.default)(WebGPUDevice, [{
|
|
100
|
+
key: "destroy",
|
|
101
|
+
value: function destroy() {
|
|
102
|
+
this.handle.destroy();
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
key: "info",
|
|
106
|
+
get: function get() {
|
|
107
|
+
return this._info;
|
|
108
|
+
}
|
|
109
|
+
}, {
|
|
110
|
+
key: "limits",
|
|
111
|
+
get: function get() {
|
|
112
|
+
return this.handle.limits;
|
|
113
|
+
}
|
|
114
|
+
}, {
|
|
115
|
+
key: "isTextureFormatSupported",
|
|
116
|
+
value: function isTextureFormatSupported(format) {
|
|
117
|
+
return !format.includes('webgl');
|
|
118
|
+
}
|
|
119
|
+
}, {
|
|
120
|
+
key: "isTextureFormatFilterable",
|
|
121
|
+
value: function isTextureFormatFilterable(format) {
|
|
122
|
+
return this.isTextureFormatSupported(format);
|
|
123
|
+
}
|
|
124
|
+
}, {
|
|
125
|
+
key: "isTextureFormatRenderable",
|
|
126
|
+
value: function isTextureFormatRenderable(format) {
|
|
127
|
+
return this.isTextureFormatSupported(format);
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "isLost",
|
|
131
|
+
get: function get() {
|
|
132
|
+
return this._isLost;
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
key: "_createBuffer",
|
|
136
|
+
value: function _createBuffer(props) {
|
|
137
|
+
return new _webgpuBuffer.default(this, props);
|
|
138
|
+
}
|
|
139
|
+
}, {
|
|
140
|
+
key: "_createTexture",
|
|
141
|
+
value: function _createTexture(props) {
|
|
142
|
+
return new _webgpuTexture.default(this, props);
|
|
143
|
+
}
|
|
144
|
+
}, {
|
|
145
|
+
key: "createExternalTexture",
|
|
146
|
+
value: function createExternalTexture(props) {
|
|
147
|
+
return new _webgpuExternalTexture.default(this, props);
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
key: "createShader",
|
|
151
|
+
value: function createShader(props) {
|
|
152
|
+
return new _webgpuShader.default(this, props);
|
|
153
|
+
}
|
|
154
|
+
}, {
|
|
155
|
+
key: "createSampler",
|
|
156
|
+
value: function createSampler(props) {
|
|
157
|
+
return new _webgpuSampler.default(this, props);
|
|
158
|
+
}
|
|
159
|
+
}, {
|
|
160
|
+
key: "createRenderPipeline",
|
|
161
|
+
value: function createRenderPipeline(props) {
|
|
162
|
+
return new _webgpuRenderPipeline.default(this, props);
|
|
163
|
+
}
|
|
164
|
+
}, {
|
|
165
|
+
key: "createFramebuffer",
|
|
166
|
+
value: function createFramebuffer(props) {
|
|
167
|
+
throw new Error('Not implemented');
|
|
168
|
+
}
|
|
169
|
+
}, {
|
|
170
|
+
key: "createComputePipeline",
|
|
171
|
+
value: function createComputePipeline(props) {
|
|
172
|
+
return new _webgpuComputePipeline.default(this, props);
|
|
173
|
+
}
|
|
174
|
+
}, {
|
|
175
|
+
key: "beginRenderPass",
|
|
176
|
+
value: function beginRenderPass(props) {
|
|
177
|
+
this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
|
|
178
|
+
return new _webgpuRenderPass.default(this, props);
|
|
179
|
+
}
|
|
180
|
+
}, {
|
|
181
|
+
key: "beginComputePass",
|
|
182
|
+
value: function beginComputePass(props) {
|
|
183
|
+
this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
|
|
184
|
+
return new _webgpuComputePass.default(this, props);
|
|
185
|
+
}
|
|
186
|
+
}, {
|
|
187
|
+
key: "createCanvasContext",
|
|
188
|
+
value: function createCanvasContext(props) {
|
|
189
|
+
return new _webgpuCanvasContext.default(this, this.adapter, props);
|
|
190
|
+
}
|
|
191
|
+
}, {
|
|
192
|
+
key: "getDefaultRenderPass",
|
|
193
|
+
value: function getDefaultRenderPass() {
|
|
194
|
+
var _this$canvasContext;
|
|
195
|
+
this.renderPass = this.renderPass || this.beginRenderPass({
|
|
196
|
+
framebuffer: (_this$canvasContext = this.canvasContext) === null || _this$canvasContext === void 0 ? void 0 : _this$canvasContext.getCurrentFramebuffer()
|
|
197
|
+
});
|
|
198
|
+
return this.renderPass;
|
|
199
|
+
}
|
|
200
|
+
}, {
|
|
201
|
+
key: "submit",
|
|
202
|
+
value: function submit() {
|
|
203
|
+
var _this$renderPass, _this$commandEncoder;
|
|
204
|
+
(_this$renderPass = this.renderPass) === null || _this$renderPass === void 0 ? void 0 : _this$renderPass.end();
|
|
205
|
+
var commandBuffer = (_this$commandEncoder = this.commandEncoder) === null || _this$commandEncoder === void 0 ? void 0 : _this$commandEncoder.finish();
|
|
206
|
+
if (commandBuffer) {
|
|
207
|
+
this.handle.queue.submit([commandBuffer]);
|
|
208
|
+
}
|
|
209
|
+
this.commandEncoder = null;
|
|
210
|
+
this.renderPass = null;
|
|
211
|
+
}
|
|
212
|
+
}, {
|
|
213
|
+
key: "_getFeatures",
|
|
214
|
+
value: function _getFeatures() {
|
|
215
|
+
var features = new Set(this.handle.features);
|
|
216
|
+
if (features.has('depth-clamping')) {
|
|
217
|
+
features.delete('depth-clamping');
|
|
218
|
+
features.add('depth-clip-control');
|
|
219
|
+
}
|
|
220
|
+
if (features.has('texture-compression-bc')) {
|
|
221
|
+
features.add('texture-compression-bc5-webgl');
|
|
222
|
+
}
|
|
223
|
+
features.add('webgpu');
|
|
224
|
+
features.add('timer-query-webgl');
|
|
225
|
+
features.add('vertex-array-object-webgl1');
|
|
226
|
+
features.add('instanced-rendering-webgl1');
|
|
227
|
+
features.add('multiple-render-targets-webgl1');
|
|
228
|
+
features.add('index-uint32-webgl1');
|
|
229
|
+
features.add('blend-minmax-webgl1');
|
|
230
|
+
features.add('texture-blend-float-webgl1');
|
|
231
|
+
features.add('texture-formats-srgb-webgl1');
|
|
232
|
+
features.add('texture-formats-depth-webgl1');
|
|
233
|
+
features.add('texture-formats-float32-webgl1');
|
|
234
|
+
features.add('texture-formats-float16-webgl1');
|
|
235
|
+
features.add('texture-filter-linear-float32-webgl');
|
|
236
|
+
features.add('texture-filter-linear-float16-webgl');
|
|
237
|
+
features.add('texture-filter-anisotropic-webgl');
|
|
238
|
+
features.add('texture-renderable-rgba32float-webgl');
|
|
239
|
+
features.add('texture-renderable-float32-webgl');
|
|
240
|
+
features.add('texture-renderable-float16-webgl');
|
|
241
|
+
features.add('glsl-frag-data');
|
|
242
|
+
features.add('glsl-frag-depth');
|
|
243
|
+
features.add('glsl-derivatives');
|
|
244
|
+
features.add('glsl-texture-lod');
|
|
245
|
+
return features;
|
|
246
|
+
}
|
|
247
|
+
}], [{
|
|
248
|
+
key: "isSupported",
|
|
249
|
+
value: function isSupported() {
|
|
250
|
+
return Boolean(typeof navigator !== 'undefined' && navigator.gpu);
|
|
251
|
+
}
|
|
252
|
+
}, {
|
|
253
|
+
key: "create",
|
|
254
|
+
value: function () {
|
|
255
|
+
var _create = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(props) {
|
|
256
|
+
var adapter, gpuDevice, device;
|
|
257
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
258
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
259
|
+
case 0:
|
|
260
|
+
if (navigator.gpu) {
|
|
261
|
+
_context2.next = 2;
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
throw new Error('WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu');
|
|
265
|
+
case 2:
|
|
266
|
+
_api.log.groupCollapsed(1, 'WebGPUDevice created')();
|
|
267
|
+
_context2.next = 5;
|
|
268
|
+
return navigator.gpu.requestAdapter({
|
|
269
|
+
powerPreference: 'high-performance'
|
|
270
|
+
});
|
|
271
|
+
case 5:
|
|
272
|
+
adapter = _context2.sent;
|
|
273
|
+
if (adapter) {
|
|
274
|
+
_context2.next = 8;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
throw new Error('Failed to request WebGPU adapter');
|
|
278
|
+
case 8:
|
|
279
|
+
_api.log.probe(1, 'Adapter available')();
|
|
280
|
+
_context2.next = 11;
|
|
281
|
+
return adapter.requestDevice({
|
|
282
|
+
requiredFeatures: adapter.features
|
|
283
|
+
});
|
|
284
|
+
case 11:
|
|
285
|
+
gpuDevice = _context2.sent;
|
|
286
|
+
_api.log.probe(1, 'GPUDevice available')();
|
|
287
|
+
if (!(typeof props.canvas === 'string')) {
|
|
288
|
+
_context2.next = 17;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
_context2.next = 16;
|
|
292
|
+
return _api.CanvasContext.pageLoaded;
|
|
293
|
+
case 16:
|
|
294
|
+
_api.log.probe(1, 'DOM is loaded')();
|
|
295
|
+
case 17:
|
|
296
|
+
device = new WebGPUDevice(gpuDevice, adapter, props);
|
|
297
|
+
_api.log.probe(1, 'Device created', device.info)();
|
|
298
|
+
_api.log.table(1, device.info)();
|
|
299
|
+
_api.log.groupEnd(1)();
|
|
300
|
+
return _context2.abrupt("return", device);
|
|
301
|
+
case 22:
|
|
302
|
+
case "end":
|
|
303
|
+
return _context2.stop();
|
|
304
|
+
}
|
|
305
|
+
}, _callee2);
|
|
306
|
+
}));
|
|
307
|
+
function create(_x2) {
|
|
308
|
+
return _create.apply(this, arguments);
|
|
309
|
+
}
|
|
310
|
+
return create;
|
|
311
|
+
}()
|
|
312
|
+
}]);
|
|
313
|
+
return WebGPUDevice;
|
|
314
|
+
}(_api.Device);
|
|
315
|
+
exports.default = WebGPUDevice;
|
|
316
|
+
(0, _defineProperty2.default)(WebGPUDevice, "type", 'webgpu');
|
|
317
|
+
//# sourceMappingURL=webgpu-device.js.map
|