oidn-web 0.3.3 → 0.3.5

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/oidn.umd.cjs CHANGED
@@ -2965,7 +2965,7 @@
2965
2965
  * license that can be found in the LICENSE file or at
2966
2966
  * https://opensource.org/licenses/MIT.
2967
2967
  * =============================================================================
2968
- */function Oc(n,t,e){return(n==="inboundNodes"||n==="outputLayers"||n==="inputLayers")&&t===0&&typeof e=="string"}function Di(n,t){if(n===null)return null;if(typeof n=="string")return pn(n);if(typeof n=="number"||typeof n=="boolean")return n;if(n instanceof Array){const e=[],s=n.length;for(let r=0;r<s;++r){const o=n[r];Oc(t,r,o)?e.push(o):e.push(Di(o,t))}return e}else{const e={};for(const s of Object.keys(n)){const r=n[s];if(s==="name"&&typeof r=="string")e[s]=r;else{const o=pn(s);e[o]=Di(r,o)}}return e}}function Pi(n,t){if(n==null)return null;if(typeof n=="string")return Oe(n);if(typeof n=="number"||typeof n=="boolean")return n;if(n instanceof Array){const e=[],s=n.length;for(let r=0;r<s;++r){const o=n[r];Oc(t,r,o)?e.push(o):e.push(Pi(o,t))}return e}else{const e={};for(const s of Object.keys(n)){const r=n[s],o=Oe(s);(s==="name"||s==="className")&&typeof r=="string"?e[o]=r:e[o]=Pi(r,s)}return e}}/** @license See the LICENSE file. */const Mc="4.22.0";/**
2968
+ */function Oc(n,t,e){return(n==="inboundNodes"||n==="outputLayers"||n==="inputLayers")&&t===0&&typeof e=="string"}function Di(n,t){if(n===null)return null;if(typeof n=="string")return pn(n);if(typeof n=="number"||typeof n=="boolean")return n;if(n instanceof Array){const e=[],s=n.length;for(let r=0;r<s;++r){const o=n[r];Oc(t,r,o)?e.push(o):e.push(Di(o,t))}return e}else{const e={};for(const s of Object.keys(n)){const r=n[s];if(s==="name"&&typeof r=="string")e[s]=r;else{const o=pn(s);e[o]=Di(r,o)}}return e}}function Pi(n,t){if(n==null)return null;if(typeof n=="string")return Oe(n);if(typeof n=="number"||typeof n=="boolean")return n;if(n instanceof Array){const e=[],s=n.length;for(let r=0;r<s;++r){const o=n[r];Oc(t,r,o)?e.push(o):e.push(Pi(o,t))}return e}else{const e={};for(const s of Object.keys(n)){const r=n[s],o=Oe(s);(s==="name"||s==="className")&&typeof r=="string"?e[o]=r:e[o]=Pi(r,s)}return e}}/** @license See the LICENSE file. */const Mc="4.20.0";/**
2969
2969
  * @license
2970
2970
  * Copyright 2022 Google LLC
2971
2971
  *
@@ -3057,7 +3057,7 @@ const x1 =${Fh};
3057
3057
 
3058
3058
  const normScale = ${Wh};
3059
3059
  const rcpNormScale = ${Gh};
3060
- `;class hx{constructor(t,e){V(this,"_inputPassAux");V(this,"_inputPassColor");V(this,"_outputPass");V(this,"_copyPass");V(this,"_isInputTexture");this._device=t,this._isHDR=e;const s=[{label:"inputScale",type:"f32",data:new Float32Array([1])},{label:"inputSize",type:"vec2<f32>",data:new Float32Array(2)},{label:"outputSize",type:"vec2<f32>",data:new Float32Array(2)},{label:"inputOffset",type:"vec2<f32>",data:new Float32Array(2)}];this._inputPassAux=new to("inputPassAux",this._device,{inputs:["color","albedo","normal"],outputs:["color","albedo","normal"],uniforms:s,csDefine:"",csMain:""}),this._inputPassColor=new to("inputPassColor",this._device,{inputs:["color"],outputs:["color"],uniforms:s,csDefine:"",csMain:""}),this._outputPass=new to("outputPass",this._device,{inputs:["color","raw"],outputs:["color"],uniforms:[{label:"inputScale",type:"f32",data:new Float32Array([1])},{label:"inputSize",type:"vec2<f32>",data:new Float32Array(2)},{label:"outputSize",type:"vec2<f32>",data:new Float32Array(2)},{label:"imageSize",type:"vec2<f32>",data:new Float32Array(2)},{label:"inputOffset",type:"vec2<f32>",data:new Float32Array(2)},{label:"outputOffset",type:"vec2<f32>",data:new Float32Array(2)}],csDefine:"",csMain:""}),this._copyPass=new to("copyPass",this._device,{inputs:["color"],outputs:["color"],autoUpdateOutputBuffer:!1,uniforms:[{label:"size",type:"vec2<f32>",data:new Float32Array(2)}],csMain:`
3060
+ `;class hx{constructor(t,e){V(this,"_inputPassAux");V(this,"_inputPassColor");V(this,"_outputPass");V(this,"_copyPass");V(this,"_isInputTexture");this._device=t,this._isHDR=e;const s=[{label:"inputScale",type:"f32",data:new Float32Array([1])},{label:"inputSize",type:"vec2i",data:new Int32Array(2)},{label:"outputSize",type:"vec2i",data:new Int32Array(2)},{label:"inputOffset",type:"vec2i",data:new Int32Array(2)}];this._inputPassAux=new to("inputPassAux",this._device,{inputs:["color","albedo","normal"],outputs:["color","albedo","normal"],uniforms:s,csDefine:"",csMain:""}),this._inputPassColor=new to("inputPassColor",this._device,{inputs:["color"],outputs:["color"],uniforms:s,csDefine:"",csMain:""}),this._outputPass=new to("outputPass",this._device,{inputs:["color","raw"],outputs:["color"],uniforms:[{label:"inputScale",type:"f32",data:new Float32Array([1])},{label:"inputSize",type:"vec2i",data:new Int32Array(2)},{label:"outputSize",type:"vec2i",data:new Int32Array(2)},{label:"imageSize",type:"vec2i",data:new Int32Array(2)},{label:"inputOffset",type:"vec2i",data:new Int32Array(2)},{label:"outputOffset",type:"vec2i",data:new Int32Array(2)}],csDefine:"",csMain:""}),this._copyPass=new to("copyPass",this._device,{inputs:["color"],outputs:["color"],autoUpdateOutputBuffer:!1,uniforms:[{label:"size",type:"vec2i",data:new Int32Array(2)}],csMain:`
3061
3061
  let outIdx = i32(globalId.x + globalId.y * u32(size.x));
3062
3062
  out_color[outIdx] = textureLoad(in_color, globalId.xy, 0);
3063
3063
  `}),this._inputPassAux.setOutputParams({color:{channels:3},albedo:{channels:3},normal:{channels:3}}),this._inputPassColor.setOutputParams({color:{channels:3}}),this._outputPass.setOutputParams({color:{channels:4}})}_updatePasses(t,e=!1){if(this._isInputTexture!=null&&this._isInputTexture===t)return;this._isInputTexture=t;const s=this._isHDR,r=`
@@ -3071,12 +3071,12 @@ fn PUForward(y: f32) -> f32 {
3071
3071
  return e * log(y + f) + g;
3072
3072
  }
3073
3073
  }`;function o(a){return t?`textureLoad(in_${a}, globalId.xy + vec2u(inputOffset), 0)`:`in_${a}[inIdx]`}const i=`
3074
- let x = f32(globalId.x);
3075
- let y = f32(globalId.y);
3076
- let inIdx = i32((y + inputOffset.y) * inputSize.x + (x + inputOffset.x));
3074
+ let x = i32(globalId.x);
3075
+ let y = i32(globalId.y);
3076
+ let inIdx = (y + inputOffset.y) * inputSize.x + (x + inputOffset.x);
3077
3077
  let col = ${o("color")};
3078
3078
 
3079
- let outIdx = i32(y * outputSize.x + x);
3079
+ let outIdx = y * outputSize.x + x;
3080
3080
 
3081
3081
  if (${e}) {
3082
3082
  // Denoise the inversed alpha. Or the anti aliased edge will be too dark after denoised
@@ -3108,13 +3108,13 @@ fn PUInverse(y: f32) -> f32 {
3108
3108
  }
3109
3109
  }
3110
3110
  `,csMain:`
3111
- let x = f32(globalId.x);
3112
- let y = f32(globalId.y);
3111
+ let x = i32(globalId.x);
3112
+ let y = i32(globalId.y);
3113
3113
  if (x >= outputSize.x || y >= outputSize.y) {
3114
3114
  return;
3115
3115
  }
3116
- let inIdx = i32((y + inputOffset.y) * inputSize.x + x + inputOffset.x);
3117
- let outIdx = i32((y + outputOffset.y) * imageSize.x + x + outputOffset.x);
3116
+ let inIdx = (y + inputOffset.y) * inputSize.x + x + inputOffset.x;
3117
+ let outIdx = (y + outputOffset.y) * imageSize.x + x + outputOffset.x;
3118
3118
  let col = in_color[inIdx];
3119
3119
  let raw = ${t?"textureLoad(in_raw, globalId.xy + vec2u(outputOffset), 0)":"in_raw[outIdx]"};
3120
3120
 
@@ -3131,7 +3131,7 @@ else if (${s}) {
3131
3131
  else {
3132
3132
  out_color[outIdx] = vec4f(col.rgb, raw.a);
3133
3133
  }
3134
- `})}setImageSize(t,e){this._inputPassAux.setUniform("inputSize",new Float32Array([t,e])),this._inputPassColor.setUniform("inputSize",new Float32Array([t,e])),this._outputPass.setUniform("imageSize",new Float32Array([t,e])),this._outputPass.setSize(t,e),this._copyPass.setSize(t,e),this._copyPass.setUniform("size",new Float32Array([t,e]))}setInputTile(t){const e=new Float32Array([t.width,t.height]);[this._inputPassAux,this._inputPassColor].forEach(s=>{s.setUniform("inputOffset",new Float32Array([t.x,t.y])),s.setUniform("outputSize",e),s.setSize(e[0],e[1])}),this._outputPass.setUniform("inputSize",e)}setOutputTile(t,e){const s=this._outputPass,r=new Float32Array([t.width,t.height]),o=t.x-e.x,i=t.y-e.y;s.setUniform("outputSize",r),s.setUniform("inputOffset",new Float32Array([o,i])),s.setUniform("outputOffset",new Float32Array([t.x,t.y])),s.setExecuteSize(r[0],r[1])}forward(t,e,s,r){const o=t instanceof GPUTexture;this._updatePasses(o,r);const i=this._inputPassAux,a=this._inputPassColor,l=this._device.createCommandEncoder();function u(c){return c instanceof GPUTexture?{texture:c,channels:4}:{buffer:c,channels:4}}return e&&s?i.createPass(l,{color:u(t),albedo:u(e),normal:u(s)}):a.createPass(l,{color:u(t)}),this._device.queue.submit([l.finish()]),e&&s?{color:i.getOutput("color"),albedo:i.getOutput("albedo"),normal:i.getOutput("normal")}:{color:a.getOutput("color")}}inverse(t,e){const r=this._device.createCommandEncoder(),o=this._outputPass;return o.createPass(r,{color:{buffer:t,channels:4},raw:e instanceof GPUBuffer?{buffer:e,channels:4}:{texture:e,channels:4}}),this._device.queue.submit([r.finish()]),o.getOutput("color")}copyInputDataToOutput(t){const e=this._device.createCommandEncoder(),r=this._outputPass.getOutput("color"),o=this._copyPass;t instanceof GPUTexture?(o.setOutputBuffers({color:r}),o.createPass(e,{color:{texture:t,channels:4}})):e.copyBufferToBuffer(t,0,r,0,r.size),this._device.queue.submit([e.finish()])}dispose(){this._outputPass.dispose(),this._inputPassAux.dispose()}}function qh(n,t){const e=n.buffer;if(t==="Float32")return new Float32Array(n.buffer);const s=new ft(e),r=new Float32Array(s.length);for(let o=0;o<r.length;++o)r[o]=s[o];return r}function fx(n,t){const[e,s,r,o]=t,i=new Float32Array(n.length);for(let a=0;a<e;++a)for(let l=0;l<s;++l)for(let u=0;u<r;++u)for(let c=0;c<o;++c){const h=a*s*r*o+l*r*o+u*o+c,f=u*o*s*e+c*s*e+l*e+a;i[f]=n[h]}return i}function Bs(n,t){return Math.ceil(n/t)*t}function eo(n){return n.data instanceof GPUBuffer||n.data instanceof GPUTexture}const dx=174,px=202,jh=16,no=Bs(dx/2,jh),Hh=Bs(px/2,jh);class Kh{constructor(t,e,s={}){V(this,"_tfModel");V(this,"_device");V(this,"_tileWidth",0);V(this,"_tileHeight",0);V(this,"_tileOverlapX",0);V(this,"_tileOverlapY",0);V(this,"_aux");V(this,"_hdr");V(this,"_dataProcessGPU");V(this,"_maxTileSize");V(this,"_tensors",new Map);V(this,"_modelsCache",new Map);this._hostTensors=t,this._backend=e,this._aux=s.aux||!1,this._hdr=s.hdr||!1,this._maxTileSize=Bs(s.maxTileSize??512,2),this._device=this._backend.device}getDevice(){return this._device}_buildModel(t){const s=3+(this._aux?6:0),r=this._getTileSizeWithOverlap(),o=this._modelsCache,i=[r.width,r.height].join(",");if(o.has(i)){this._tfModel=o.get(i);return}const a=Yw({name:"input",shape:[r.height,r.width,s],dtype:"float32"});this._tfModel=new Mr({inputs:[a],outputs:t?this._addNetLarge(a):this._addNet(a)}),o.set(i,this._tfModel)}_createConv(t,e,s){const r=t+".weight",o=t+".bias",i=this._tensors;let a=i.get(r),l=i.get(o);const u=this._hostTensors.get(r);if(!a){const h=u.desc.dims;a=nr(fx(qh(u.data,u.desc.dataType),h),[h[2],h[3],h[1],h[0]],"float32"),i.set(r,a)}if(!l){const h=this._hostTensors.get(t+".bias");l=Pt(qh(h.data,h.desc.dataType),"float32"),i.set(o,l)}return new Yn({name:t,filters:u.desc.dims[0],kernelSize:u.desc.dims.slice(2,4),useBias:!0,activation:s,padding:"same",weights:[a,l],trainable:!1}).apply(e)}_createConcatConv(t,e,s){const r=new Ti({name:t+"/concat",trainable:!1,axis:3});return this._createConv(t,r.apply([e,s]),"relu")}_createPooling(t){return new Ei({name:t.name+"/pooling",poolSize:[2,2],strides:[2,2],padding:"same",trainable:!1}).apply(t)}_addUpsamplingLayer(t){return new Ai({name:t.name+"/upsampling",size:[2,2],trainable:!1}).apply(t)}_addNet(t){let e=this._createConv("enc_conv0",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1",e,"relu")),r=e=this._createPooling(this._createConv("enc_conv2",e,"relu")),o=e=this._createPooling(this._createConv("enc_conv3",e,"relu")),i=e=this._createPooling(this._createConv("enc_conv4",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv0",e,"relu"),e}_addNetLarge(t){let e=this._createConv("enc_conv1a",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1b",e,"relu"));e=this._createConv("enc_conv2a",e,"relu");const r=e=this._createPooling(this._createConv("enc_conv2b",e,"relu"));e=this._createConv("enc_conv3a",e,"relu");const o=e=this._createPooling(this._createConv("enc_conv3b",e,"relu"));e=this._createConv("enc_conv4a",e,"relu");const i=e=this._createPooling(this._createConv("enc_conv4b",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv1c",e,"relu"),e}_updateModel(t,e){const s=this._hostTensors.has("enc_conv1b.weight"),r=this._maxTileSize;let o=r,i=r,a=s?Hh:no,l=s?Hh:no;t<r+no*2&&(o=Bs(t,r/2),t<=r&&(a=0)),e<r+no*2&&(i=Bs(e,r/2),e<=r&&(l=0));const u=Math.max(o,i),c=Math.max(a,l);o=u,i=u,a=c,l=c,(o!==this._tileWidth||i!==this._tileHeight||a!==this._tileOverlapX||l!==this._tileOverlapY||!this._tfModel)&&(this._tileWidth=o,this._tileHeight=i,this._tileOverlapX=a,this._tileOverlapY=l,this._buildModel(s))}_getTileSizeWithOverlap(){return{width:this._tileWidth+2*this._tileOverlapX,height:this._tileHeight+2*this._tileOverlapY}}_processImageData(t,e,s,r){const o=t.data,i=o.length/4,a=this._aux?9:3,l=new Float32Array(i*a);if(e&&!s||s&&!e)throw new Error("Normal map and albedo map are both required");if(e&&s&&(e.width!==s.width||e.height!==s.height||t.width!==e.width||t.height!==e.height))throw new Error("Image size mismatch");const u=e==null?void 0:e.data,c=s==null?void 0:s.data;for(let h=0;h<o.length;h+=4){const f=h/4*a;for(let d=0;d<3;d++)r?l[f+d]=o[h+d]:l[f+d]=o[h+d]/255,u&&(l[f+d+3]=u[h+d]/255),c&&(l[f+d+6]=c[h+d]/255)}return l}_readTile(t,e,s,r){const o=new Float32Array(s.width*s.height*e);for(let i=0;i<s.height;i++)for(let a=0;a<s.width;a++){const l=((i+s.y)*r+(a+s.x))*e,u=(i*s.width+a)*e;for(let c=0;c<e;c++)o[u+c]=t[l+c]}return o}_writeTile(t,e,s,r,o,i){const{data:a,width:l}=t,u=s.x-e.x,c=s.y-e.y;for(let h=0;h<s.height;h++)for(let f=0;f<s.width;f++){const d=((h+c)*o+f+u)*3,p=((h+s.y)*l+(f+s.x))*4;for(let g=0;g<3;g++)i?a[p+g]=r[d+g]:a[p+g]=Math.min(Math.max(r[d+g]*255,0),255);t.data[p+3]=i?1:255}}_executeTile(t,e,s,r,o,i,a,l,u){const c=this._aux?9:3,h=this._tileOverlapX,f=this._tileOverlapY;let d=this._getTileSizeWithOverlap(),p={width:this._tileWidth,height:this._tileHeight},g=r>0?r*p.width-h:0,m=Math.min(g+d.width,i);g=Math.max(m-d.width,0);let b=o>0?o*p.height-f:0,y=Math.min(b+d.height,a);b=Math.max(y-d.height,0);const S=d.width,x=d.height,v=new ca(g,b,S,x);let E,D=1;const k=this._device;let T=this._dataProcessGPU;if(t instanceof Float32Array){let U=this._readTile(t,c,v,i);l&&(D=lx({data:U,channels:c}),U=ux({data:U,channels:c,inputScale:D})),E=nr(U,[1,x,S,c],"float32")}else{T||(T=this._dataProcessGPU=new hx(k,l)),T.setImageSize(i,a),T.setInputTile(v),r===0&&o===0&&T.copyInputDataToOutput(t.color);const{color:U,albedo:j,normal:Zt}=T.forward(t.color,this._aux?t.albedo:void 0,this._aux?t.normal:void 0,u),qt=xe=>{const jt=nr({buffer:xe,zeroCopy:!0},[1,x,S,4]);return cs(jt,[0,0,0,0],[1,x,S,3])};if(this._aux){const xe=[U,j,Zt].map(jt=>qt(jt));E=qp(xe,3)}else E=qt(U)}let R;const B=this._tfModel.predict(E),K=Math.min(p.width,i),Z=Math.min(p.height,a),W=new ca(r*K,o*Z,K,Z);if(W.width=Math.min(W.width,i-W.x),W.height=Math.min(W.height,a-W.y),t instanceof Float32Array){let U=B.dataSync();l&&(U=cx({data:U,channels:3,inputScale:D})),this._writeTile(s,v,W,U,d.width,l);for(let j=0;j<Z;j++)for(let Zt=0;Zt<K;Zt++){const qt=(j*K+Zt)*4,xe=((j+W.y)*i+(Zt+W.x))*4;for(let jt=0;jt<4;jt++)e.data[qt+jt]=s.data[xe+jt]}}else{T.setOutputTile(W,v);const U=Fp(B,[[0,0],[0,0],[0,0],[0,1]]);R=T.inverse(U.dataToGPU().buffer,t.color)}return R}tileExecute({color:t,albedo:e,normal:s,done:r,progress:o,denoiseAlpha:i}){if(this._aux&&(!e||!s))throw new Error("Normal map and albedo map are both required");if(!this._aux&&(e||s))throw new Error("Normal map and albedo map are not required");const a=t.width,l=t.height;this._updateModel(a,l);const u=this._hdr||!1;let c;eo(t)||(c=this._processImageData(t,e,s,u));const h=this._tileWidth,f=this._tileHeight,d=Math.ceil(l/f),p=Math.ceil(a/h);function g(x,v){return u?{data:new Float32Array(x*v*4),width:x,height:v}:new ImageData(x,v)}const m=eo(t)?void 0:g(a,l),b=eo(t)?void 0:g(Math.min(h,a),Math.min(f,l));let y=!1;const S=(x,v)=>{if(y)return;let E;A.startScope(),E=this._executeTile(eo(t)?{color:t.data,albedo:e==null?void 0:e.data,normal:s==null?void 0:s.data}:c,b,m,x,v,a,l,u,i),A.endScope();const D=m||{data:E,width:a,height:l};o==null||o(D,b,new ca(x*h,v*f,h,f),x+v*p,p*d),x+1<p||v+1<d?requestAnimationFrame(()=>{x+1<p?S(x+1,v):v+1<d&&S(0,v+1)}):r(D)};return S(0,0),()=>{y=!0}}dispose(){var t,e;(t=this._tfModel)==null||t.dispose(),(e=this._dataProcessGPU)==null||e.dispose(),this._tensors.forEach(s=>s.dispose())}}/**
3134
+ `})}setImageSize(t,e){this._inputPassAux.setUniform("inputSize",new Int32Array([t,e])),this._inputPassColor.setUniform("inputSize",new Int32Array([t,e])),this._outputPass.setUniform("imageSize",new Int32Array([t,e])),this._outputPass.setSize(t,e),this._copyPass.setSize(t,e),this._copyPass.setUniform("size",new Int32Array([t,e]))}setInputTile(t){const e=new Int32Array([t.width,t.height]);[this._inputPassAux,this._inputPassColor].forEach(s=>{s.setUniform("inputOffset",new Int32Array([t.x,t.y])),s.setUniform("outputSize",e),s.setSize(e[0],e[1])}),this._outputPass.setUniform("inputSize",e)}setOutputTile(t,e){const s=this._outputPass,r=new Int32Array([t.width,t.height]),o=t.x-e.x,i=t.y-e.y;s.setUniform("outputSize",r),s.setUniform("inputOffset",new Int32Array([o,i])),s.setUniform("outputOffset",new Int32Array([t.x,t.y])),s.setExecuteSize(r[0],r[1])}forward(t,e,s,r){const o=t instanceof GPUTexture;this._updatePasses(o,r);const i=this._inputPassAux,a=this._inputPassColor,l=this._device.createCommandEncoder();function u(c){return c instanceof GPUTexture?{texture:c,channels:4}:{buffer:c,channels:4}}return e&&s?i.createPass(l,{color:u(t),albedo:u(e),normal:u(s)}):a.createPass(l,{color:u(t)}),this._device.queue.submit([l.finish()]),e&&s?{color:i.getOutput("color"),albedo:i.getOutput("albedo"),normal:i.getOutput("normal")}:{color:a.getOutput("color")}}inverse(t,e){const r=this._device.createCommandEncoder(),o=this._outputPass;return o.createPass(r,{color:{buffer:t,channels:4},raw:e instanceof GPUBuffer?{buffer:e,channels:4}:{texture:e,channels:4}}),this._device.queue.submit([r.finish()]),o.getOutput("color")}copyInputDataToOutput(t){const e=this._device.createCommandEncoder(),r=this._outputPass.getOutput("color"),o=this._copyPass;t instanceof GPUTexture?(o.setOutputBuffers({color:r}),o.createPass(e,{color:{texture:t,channels:4}})):e.copyBufferToBuffer(t,0,r,0,r.size),this._device.queue.submit([e.finish()])}dispose(){this._outputPass.dispose(),this._inputPassAux.dispose()}}function qh(n,t){const e=n.buffer;if(t==="Float32")return new Float32Array(n.buffer);const s=new ft(e),r=new Float32Array(s.length);for(let o=0;o<r.length;++o)r[o]=s[o];return r}function fx(n,t){const[e,s,r,o]=t,i=new Float32Array(n.length);for(let a=0;a<e;++a)for(let l=0;l<s;++l)for(let u=0;u<r;++u)for(let c=0;c<o;++c){const h=a*s*r*o+l*r*o+u*o+c,f=u*o*s*e+c*s*e+l*e+a;i[f]=n[h]}return i}function Bs(n,t){return Math.ceil(n/t)*t}function eo(n){return n.data instanceof GPUBuffer||n.data instanceof GPUTexture}const dx=174,px=202,jh=16,no=Bs(dx/2,jh),Hh=Bs(px/2,jh);class Kh{constructor(t,e,s={}){V(this,"_tfModel");V(this,"_device");V(this,"_tileWidth",0);V(this,"_tileHeight",0);V(this,"_tileOverlapX",0);V(this,"_tileOverlapY",0);V(this,"_aux");V(this,"_hdr");V(this,"_dataProcessGPU");V(this,"_maxTileSize");V(this,"_tensors",new Map);V(this,"_modelsCache",new Map);this._hostTensors=t,this._backend=e,this._aux=s.aux||!1,this._hdr=s.hdr||!1,this._maxTileSize=Bs(s.maxTileSize??512,2),this._device=this._backend.device}getDevice(){return this._device}_buildModel(t){const s=3+(this._aux?6:0),r=this._getTileSizeWithOverlap(),o=this._modelsCache,i=[r.width,r.height].join(",");if(o.has(i)){this._tfModel=o.get(i);return}const a=Yw({name:"input",shape:[r.height,r.width,s],dtype:"float32"});this._tfModel=new Mr({inputs:[a],outputs:t?this._addNetLarge(a):this._addNet(a)}),o.set(i,this._tfModel)}_createConv(t,e,s){const r=t+".weight",o=t+".bias",i=this._tensors;let a=i.get(r),l=i.get(o);const u=this._hostTensors.get(r);if(!a){const h=u.desc.dims;a=nr(fx(qh(u.data,u.desc.dataType),h),[h[2],h[3],h[1],h[0]],"float32"),i.set(r,a)}if(!l){const h=this._hostTensors.get(t+".bias");l=Pt(qh(h.data,h.desc.dataType),"float32"),i.set(o,l)}return new Yn({name:t,filters:u.desc.dims[0],kernelSize:u.desc.dims.slice(2,4),useBias:!0,activation:s,padding:"same",weights:[a,l],trainable:!1}).apply(e)}_createConcatConv(t,e,s){const r=new Ti({name:t+"/concat",trainable:!1,axis:3});return this._createConv(t,r.apply([e,s]),"relu")}_createPooling(t){return new Ei({name:t.name+"/pooling",poolSize:[2,2],strides:[2,2],padding:"same",trainable:!1}).apply(t)}_addUpsamplingLayer(t){return new Ai({name:t.name+"/upsampling",size:[2,2],trainable:!1}).apply(t)}_addNet(t){let e=this._createConv("enc_conv0",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1",e,"relu")),r=e=this._createPooling(this._createConv("enc_conv2",e,"relu")),o=e=this._createPooling(this._createConv("enc_conv3",e,"relu")),i=e=this._createPooling(this._createConv("enc_conv4",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv0",e,"relu"),e}_addNetLarge(t){let e=this._createConv("enc_conv1a",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1b",e,"relu"));e=this._createConv("enc_conv2a",e,"relu");const r=e=this._createPooling(this._createConv("enc_conv2b",e,"relu"));e=this._createConv("enc_conv3a",e,"relu");const o=e=this._createPooling(this._createConv("enc_conv3b",e,"relu"));e=this._createConv("enc_conv4a",e,"relu");const i=e=this._createPooling(this._createConv("enc_conv4b",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv1c",e,"relu"),e}_updateModel(t,e){const s=this._hostTensors.has("enc_conv1b.weight"),r=this._maxTileSize;let o=r,i=r,a=s?Hh:no,l=s?Hh:no;t<r+no*2&&(o=Bs(t,r/2),t<=r&&(a=0)),e<r+no*2&&(i=Bs(e,r/2),e<=r&&(l=0));const u=Math.max(o,i),c=Math.max(a,l);o=u,i=u,a=c,l=c,(o!==this._tileWidth||i!==this._tileHeight||a!==this._tileOverlapX||l!==this._tileOverlapY||!this._tfModel)&&(this._tileWidth=o,this._tileHeight=i,this._tileOverlapX=a,this._tileOverlapY=l,this._buildModel(s))}_getTileSizeWithOverlap(){return{width:this._tileWidth+2*this._tileOverlapX,height:this._tileHeight+2*this._tileOverlapY}}_processImageData(t,e,s,r){const o=t.data,i=o.length/4,a=this._aux?9:3,l=new Float32Array(i*a);if(e&&!s||s&&!e)throw new Error("Normal map and albedo map are both required");if(e&&s&&(e.width!==s.width||e.height!==s.height||t.width!==e.width||t.height!==e.height))throw new Error("Image size mismatch");const u=e==null?void 0:e.data,c=s==null?void 0:s.data;for(let h=0;h<o.length;h+=4){const f=h/4*a;for(let d=0;d<3;d++)r?l[f+d]=o[h+d]:l[f+d]=o[h+d]/255,u&&(l[f+d+3]=u[h+d]/255),c&&(l[f+d+6]=c[h+d]/255)}return l}_readTile(t,e,s,r){const o=new Float32Array(s.width*s.height*e);for(let i=0;i<s.height;i++)for(let a=0;a<s.width;a++){const l=((i+s.y)*r+(a+s.x))*e,u=(i*s.width+a)*e;for(let c=0;c<e;c++)o[u+c]=t[l+c]}return o}_writeTile(t,e,s,r,o,i){const{data:a,width:l}=t,u=s.x-e.x,c=s.y-e.y;for(let h=0;h<s.height;h++)for(let f=0;f<s.width;f++){const d=((h+c)*o+f+u)*3,p=((h+s.y)*l+(f+s.x))*4;for(let g=0;g<3;g++)i?a[p+g]=r[d+g]:a[p+g]=Math.min(Math.max(r[d+g]*255,0),255);t.data[p+3]=i?1:255}}_executeTile(t,e,s,r,o,i,a,l,u){const c=this._aux?9:3,h=this._tileOverlapX,f=this._tileOverlapY;let d=this._getTileSizeWithOverlap(),p={width:this._tileWidth,height:this._tileHeight},g=r>0?r*p.width-h:0,m=Math.min(g+d.width,i);g=Math.max(m-d.width,0);let b=o>0?o*p.height-f:0,y=Math.min(b+d.height,a);b=Math.max(y-d.height,0);const S=d.width,x=d.height,v=new ca(g,b,S,x);let E,D=1;const k=this._device;let T=this._dataProcessGPU;if(t instanceof Float32Array){let U=this._readTile(t,c,v,i);l&&(D=lx({data:U,channels:c}),U=ux({data:U,channels:c,inputScale:D})),E=nr(U,[1,x,S,c],"float32")}else{T||(T=this._dataProcessGPU=new hx(k,l)),T.setImageSize(i,a),T.setInputTile(v),r===0&&o===0&&T.copyInputDataToOutput(t.color);const{color:U,albedo:j,normal:Zt}=T.forward(t.color,this._aux?t.albedo:void 0,this._aux?t.normal:void 0,u),qt=xe=>{const jt=nr({buffer:xe,zeroCopy:!0},[1,x,S,4]);return cs(jt,[0,0,0,0],[1,x,S,3])};if(this._aux){const xe=[U,j,Zt].map(jt=>qt(jt));E=qp(xe,3)}else E=qt(U)}let R;const B=this._tfModel.predict(E),K=Math.min(p.width,i),Z=Math.min(p.height,a),W=new ca(r*K,o*Z,K,Z);if(W.width=Math.min(W.width,i-W.x),W.height=Math.min(W.height,a-W.y),t instanceof Float32Array){let U=B.dataSync();l&&(U=cx({data:U,channels:3,inputScale:D})),this._writeTile(s,v,W,U,d.width,l);for(let j=0;j<Z;j++)for(let Zt=0;Zt<K;Zt++){const qt=(j*K+Zt)*4,xe=((j+W.y)*i+(Zt+W.x))*4;for(let jt=0;jt<4;jt++)e.data[qt+jt]=s.data[xe+jt]}}else{T.setOutputTile(W,v);const U=Fp(B,[[0,0],[0,0],[0,0],[0,1]]);R=T.inverse(U.dataToGPU().buffer,t.color)}return R}tileExecute({color:t,albedo:e,normal:s,done:r,progress:o,denoiseAlpha:i}){if(this._aux&&(!e||!s))throw new Error("Normal map and albedo map are both required");if(!this._aux&&(e||s))throw new Error("Normal map and albedo map are not required");const a=t.width,l=t.height;this._updateModel(a,l);const u=this._hdr||!1;let c;eo(t)||(c=this._processImageData(t,e,s,u));const h=this._tileWidth,f=this._tileHeight,d=Math.ceil(l/f),p=Math.ceil(a/h);function g(x,v){return u?{data:new Float32Array(x*v*4),width:x,height:v}:new ImageData(x,v)}const m=eo(t)?void 0:g(a,l),b=eo(t)?void 0:g(Math.min(h,a),Math.min(f,l));let y=!1;const S=(x,v)=>{if(y)return;let E;A.startScope(),E=this._executeTile(eo(t)?{color:t.data,albedo:e==null?void 0:e.data,normal:s==null?void 0:s.data}:c,b,m,x,v,a,l,u,i),A.endScope();const D=m||{data:E,width:a,height:l};o==null||o(D,b,new ca(x*h,v*f,h,f),x+v*p,p*d),x+1<p||v+1<d?requestAnimationFrame(()=>{x+1<p?S(x+1,v):v+1<d&&S(0,v+1)}):r(D)};return S(0,0),()=>{y=!0}}dispose(){var t,e;(t=this._tfModel)==null||t.dispose(),(e=this._dataProcessGPU)==null||e.dispose(),this._tensors.forEach(s=>s.dispose())}}/**
3135
3135
  * @license
3136
3136
  * Copyright 2019 Google LLC. All Rights Reserved.
3137
3137
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3493,7 +3493,7 @@ else {
3493
3493
  * See the License for the specific language governing permissions and
3494
3494
  * limitations under the License.
3495
3495
  * =============================================================================
3496
- */sf()&&Yp("webgpu",async()=>{const n={powerPreference:G().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(n),e={},s=[];t.features.has("timestamp-query")&&s.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&s.push(["bgra8unorm-storage"]),e.requiredFeatures=s;const r=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};const o=await t.requestDevice(e),i="info"in t?t.info:"requestAdapterInfo"in t?await t.requestAdapterInfo():void 0;return new Fs(o,i)},3);/**
3496
+ */sf()&&Yp("webgpu",async()=>{const n={powerPreference:G().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(n),e={},s=[];t.features.has("timestamp-query")&&s.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&s.push(["bgra8unorm-storage"]),e.requiredFeatures=s;const r=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};const o=await t.requestDevice(e),i=await t.requestAdapterInfo();return new Fs(o,i)},3);/**
3497
3497
  * @license
3498
3498
  * Copyright 2020 Google LLC. All Rights Reserved.
3499
3499
  * Licensed under the Apache License, Version 2.0 (the "License");
package/lib/process.js CHANGED
@@ -129,18 +129,18 @@ export class GPUDataProcess {
129
129
  },
130
130
  {
131
131
  label: 'inputSize',
132
- type: 'vec2<f32>',
133
- data: new Float32Array(2)
132
+ type: 'vec2i',
133
+ data: new Int32Array(2)
134
134
  },
135
135
  {
136
136
  label: 'outputSize',
137
- type: 'vec2<f32>',
138
- data: new Float32Array(2)
137
+ type: 'vec2i',
138
+ data: new Int32Array(2)
139
139
  },
140
140
  {
141
141
  label: 'inputOffset',
142
- type: 'vec2<f32>',
143
- data: new Float32Array(2)
142
+ type: 'vec2i',
143
+ data: new Int32Array(2)
144
144
  }
145
145
  ];
146
146
  this._inputPassAux = new WGPUComputePass('inputPassAux', this._device, {
@@ -168,28 +168,28 @@ export class GPUDataProcess {
168
168
  },
169
169
  {
170
170
  label: 'inputSize',
171
- type: 'vec2<f32>',
172
- data: new Float32Array(2)
171
+ type: 'vec2i',
172
+ data: new Int32Array(2)
173
173
  },
174
174
  {
175
175
  label: 'outputSize',
176
- type: 'vec2<f32>',
177
- data: new Float32Array(2)
176
+ type: 'vec2i',
177
+ data: new Int32Array(2)
178
178
  },
179
179
  {
180
180
  label: 'imageSize',
181
- type: 'vec2<f32>',
182
- data: new Float32Array(2)
181
+ type: 'vec2i',
182
+ data: new Int32Array(2)
183
183
  },
184
184
  {
185
185
  label: 'inputOffset',
186
- type: 'vec2<f32>',
187
- data: new Float32Array(2)
186
+ type: 'vec2i',
187
+ data: new Int32Array(2)
188
188
  },
189
189
  {
190
190
  label: 'outputOffset',
191
- type: 'vec2<f32>',
192
- data: new Float32Array(2)
191
+ type: 'vec2i',
192
+ data: new Int32Array(2)
193
193
  }
194
194
  ],
195
195
  csDefine: '',
@@ -202,8 +202,8 @@ export class GPUDataProcess {
202
202
  uniforms: [
203
203
  {
204
204
  label: 'size',
205
- type: 'vec2<f32>',
206
- data: new Float32Array(2)
205
+ type: 'vec2i',
206
+ data: new Int32Array(2)
207
207
  }
208
208
  ],
209
209
  csMain: /*wgsl*/ `
@@ -247,12 +247,12 @@ fn PUForward(y: f32) -> f32 {
247
247
  : `in_${inputName}[inIdx]`;
248
248
  }
249
249
  const commonCSMain = /* wgsl */ `
250
- let x = f32(globalId.x);
251
- let y = f32(globalId.y);
252
- let inIdx = i32((y + inputOffset.y) * inputSize.x + (x + inputOffset.x));
250
+ let x = i32(globalId.x);
251
+ let y = i32(globalId.y);
252
+ let inIdx = (y + inputOffset.y) * inputSize.x + (x + inputOffset.x);
253
253
  let col = ${readInputCode('color')};
254
254
 
255
- let outIdx = i32(y * outputSize.x + x);
255
+ let outIdx = y * outputSize.x + x;
256
256
 
257
257
  if (${denoiseAlpha}) {
258
258
  // Denoise the inversed alpha. Or the anti aliased edge will be too dark after denoised
@@ -295,13 +295,13 @@ fn PUInverse(y: f32) -> f32 {
295
295
  }
296
296
  `,
297
297
  csMain: /* wgsl */ `
298
- let x = f32(globalId.x);
299
- let y = f32(globalId.y);
298
+ let x = i32(globalId.x);
299
+ let y = i32(globalId.y);
300
300
  if (x >= outputSize.x || y >= outputSize.y) {
301
301
  return;
302
302
  }
303
- let inIdx = i32((y + inputOffset.y) * inputSize.x + x + inputOffset.x);
304
- let outIdx = i32((y + outputOffset.y) * imageSize.x + x + outputOffset.x);
303
+ let inIdx = (y + inputOffset.y) * inputSize.x + x + inputOffset.x;
304
+ let outIdx = (y + outputOffset.y) * imageSize.x + x + outputOffset.x;
305
305
  let col = in_color[inIdx];
306
306
  let raw = ${isInputTexture
307
307
  ? 'textureLoad(in_raw, globalId.xy + vec2u(outputOffset), 0)'
@@ -324,17 +324,17 @@ else {
324
324
  });
325
325
  }
326
326
  setImageSize(w, h) {
327
- this._inputPassAux.setUniform('inputSize', new Float32Array([w, h]));
328
- this._inputPassColor.setUniform('inputSize', new Float32Array([w, h]));
329
- this._outputPass.setUniform('imageSize', new Float32Array([w, h]));
327
+ this._inputPassAux.setUniform('inputSize', new Int32Array([w, h]));
328
+ this._inputPassColor.setUniform('inputSize', new Int32Array([w, h]));
329
+ this._outputPass.setUniform('imageSize', new Int32Array([w, h]));
330
330
  this._outputPass.setSize(w, h);
331
331
  this._copyPass.setSize(w, h);
332
- this._copyPass.setUniform('size', new Float32Array([w, h]));
332
+ this._copyPass.setUniform('size', new Int32Array([w, h]));
333
333
  }
334
334
  setInputTile(tile) {
335
- const size = new Float32Array([tile.width, tile.height]);
335
+ const size = new Int32Array([tile.width, tile.height]);
336
336
  [this._inputPassAux, this._inputPassColor].forEach((inputPass) => {
337
- inputPass.setUniform('inputOffset', new Float32Array([tile.x, tile.y]));
337
+ inputPass.setUniform('inputOffset', new Int32Array([tile.x, tile.y]));
338
338
  inputPass.setUniform('outputSize', size);
339
339
  inputPass.setSize(size[0], size[1]);
340
340
  });
@@ -342,12 +342,12 @@ else {
342
342
  }
343
343
  setOutputTile(dstTile, srcTile) {
344
344
  const outputPass = this._outputPass;
345
- const size = new Float32Array([dstTile.width, dstTile.height]);
345
+ const size = new Int32Array([dstTile.width, dstTile.height]);
346
346
  const dx = dstTile.x - srcTile.x;
347
347
  const dy = dstTile.y - srcTile.y;
348
348
  outputPass.setUniform('outputSize', size);
349
- outputPass.setUniform('inputOffset', new Float32Array([dx, dy]));
350
- outputPass.setUniform('outputOffset', new Float32Array([dstTile.x, dstTile.y]));
349
+ outputPass.setUniform('inputOffset', new Int32Array([dx, dy]));
350
+ outputPass.setUniform('outputOffset', new Int32Array([dstTile.x, dstTile.y]));
351
351
  outputPass.setExecuteSize(size[0], size[1]);
352
352
  }
353
353
  forward(colorBuffer,
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oidn-web",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "Run Open Image Denoiser on the Web",
5
5
  "main": "lib/main.js",
6
6
  "types": "lib/main.d.ts",
@@ -17,8 +17,8 @@
17
17
  "license": "MIT",
18
18
  "dependencies": {
19
19
  "@petamoriken/float16": "^3.8.7",
20
- "@tensorflow/tfjs": "^4.22.0",
21
- "@tensorflow/tfjs-backend-webgpu": "^4.22.0"
20
+ "@tensorflow/tfjs": "4.20.0",
21
+ "@tensorflow/tfjs-backend-webgpu": "4.20.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "typescript": "^5.7.3",
package/src/process.ts CHANGED
@@ -157,18 +157,18 @@ export class GPUDataProcess {
157
157
  },
158
158
  {
159
159
  label: 'inputSize',
160
- type: 'vec2<f32>',
161
- data: new Float32Array(2)
160
+ type: 'vec2i',
161
+ data: new Int32Array(2)
162
162
  },
163
163
  {
164
164
  label: 'outputSize',
165
- type: 'vec2<f32>',
166
- data: new Float32Array(2)
165
+ type: 'vec2i',
166
+ data: new Int32Array(2)
167
167
  },
168
168
  {
169
169
  label: 'inputOffset',
170
- type: 'vec2<f32>',
171
- data: new Float32Array(2)
170
+ type: 'vec2i',
171
+ data: new Int32Array(2)
172
172
  }
173
173
  ];
174
174
  this._inputPassAux = new WGPUComputePass('inputPassAux', this._device, {
@@ -196,28 +196,28 @@ export class GPUDataProcess {
196
196
  },
197
197
  {
198
198
  label: 'inputSize',
199
- type: 'vec2<f32>',
200
- data: new Float32Array(2)
199
+ type: 'vec2i',
200
+ data: new Int32Array(2)
201
201
  },
202
202
  {
203
203
  label: 'outputSize',
204
- type: 'vec2<f32>',
205
- data: new Float32Array(2)
204
+ type: 'vec2i',
205
+ data: new Int32Array(2)
206
206
  },
207
207
  {
208
208
  label: 'imageSize',
209
- type: 'vec2<f32>',
210
- data: new Float32Array(2)
209
+ type: 'vec2i',
210
+ data: new Int32Array(2)
211
211
  },
212
212
  {
213
213
  label: 'inputOffset',
214
- type: 'vec2<f32>',
215
- data: new Float32Array(2)
214
+ type: 'vec2i',
215
+ data: new Int32Array(2)
216
216
  },
217
217
  {
218
218
  label: 'outputOffset',
219
- type: 'vec2<f32>',
220
- data: new Float32Array(2)
219
+ type: 'vec2i',
220
+ data: new Int32Array(2)
221
221
  }
222
222
  ],
223
223
  csDefine: '',
@@ -230,8 +230,8 @@ export class GPUDataProcess {
230
230
  uniforms: [
231
231
  {
232
232
  label: 'size',
233
- type: 'vec2<f32>',
234
- data: new Float32Array(2)
233
+ type: 'vec2i',
234
+ data: new Int32Array(2)
235
235
  }
236
236
  ],
237
237
  csMain: /*wgsl*/ `
@@ -279,12 +279,12 @@ fn PUForward(y: f32) -> f32 {
279
279
  : `in_${inputName}[inIdx]`;
280
280
  }
281
281
  const commonCSMain = /* wgsl */ `
282
- let x = f32(globalId.x);
283
- let y = f32(globalId.y);
284
- let inIdx = i32((y + inputOffset.y) * inputSize.x + (x + inputOffset.x));
282
+ let x = i32(globalId.x);
283
+ let y = i32(globalId.y);
284
+ let inIdx = (y + inputOffset.y) * inputSize.x + (x + inputOffset.x);
285
285
  let col = ${readInputCode('color')};
286
286
 
287
- let outIdx = i32(y * outputSize.x + x);
287
+ let outIdx = y * outputSize.x + x;
288
288
 
289
289
  if (${denoiseAlpha}) {
290
290
  // Denoise the inversed alpha. Or the anti aliased edge will be too dark after denoised
@@ -328,13 +328,13 @@ fn PUInverse(y: f32) -> f32 {
328
328
  }
329
329
  `,
330
330
  csMain: /* wgsl */ `
331
- let x = f32(globalId.x);
332
- let y = f32(globalId.y);
331
+ let x = i32(globalId.x);
332
+ let y = i32(globalId.y);
333
333
  if (x >= outputSize.x || y >= outputSize.y) {
334
334
  return;
335
335
  }
336
- let inIdx = i32((y + inputOffset.y) * inputSize.x + x + inputOffset.x);
337
- let outIdx = i32((y + outputOffset.y) * imageSize.x + x + outputOffset.x);
336
+ let inIdx = (y + inputOffset.y) * inputSize.x + x + inputOffset.x;
337
+ let outIdx = (y + outputOffset.y) * imageSize.x + x + outputOffset.x;
338
338
  let col = in_color[inIdx];
339
339
  let raw = ${
340
340
  isInputTexture
@@ -360,18 +360,18 @@ else {
360
360
  }
361
361
 
362
362
  setImageSize(w: number, h: number) {
363
- this._inputPassAux.setUniform('inputSize', new Float32Array([w, h]));
364
- this._inputPassColor.setUniform('inputSize', new Float32Array([w, h]));
365
- this._outputPass.setUniform('imageSize', new Float32Array([w, h]));
363
+ this._inputPassAux.setUniform('inputSize', new Int32Array([w, h]));
364
+ this._inputPassColor.setUniform('inputSize', new Int32Array([w, h]));
365
+ this._outputPass.setUniform('imageSize', new Int32Array([w, h]));
366
366
  this._outputPass.setSize(w, h);
367
367
  this._copyPass.setSize(w, h);
368
- this._copyPass.setUniform('size', new Float32Array([w, h]));
368
+ this._copyPass.setUniform('size', new Int32Array([w, h]));
369
369
  }
370
370
 
371
371
  setInputTile(tile: Tile) {
372
- const size = new Float32Array([tile.width, tile.height]);
372
+ const size = new Int32Array([tile.width, tile.height]);
373
373
  [this._inputPassAux, this._inputPassColor].forEach((inputPass) => {
374
- inputPass.setUniform('inputOffset', new Float32Array([tile.x, tile.y]));
374
+ inputPass.setUniform('inputOffset', new Int32Array([tile.x, tile.y]));
375
375
  inputPass.setUniform('outputSize', size);
376
376
  inputPass.setSize(size[0], size[1]);
377
377
  });
@@ -381,14 +381,14 @@ else {
381
381
 
382
382
  setOutputTile(dstTile: Tile, srcTile: Tile) {
383
383
  const outputPass = this._outputPass;
384
- const size = new Float32Array([dstTile.width, dstTile.height]);
384
+ const size = new Int32Array([dstTile.width, dstTile.height]);
385
385
  const dx = dstTile.x - srcTile.x;
386
386
  const dy = dstTile.y - srcTile.y;
387
387
  outputPass.setUniform('outputSize', size);
388
- outputPass.setUniform('inputOffset', new Float32Array([dx, dy]));
388
+ outputPass.setUniform('inputOffset', new Int32Array([dx, dy]));
389
389
  outputPass.setUniform(
390
390
  'outputOffset',
391
- new Float32Array([dstTile.x, dstTile.y])
391
+ new Int32Array([dstTile.x, dstTile.y])
392
392
  );
393
393
  outputPass.setExecuteSize(size[0], size[1]);
394
394
  }