298 lines
7.1 KiB
WebGPU Shading Language
298 lines
7.1 KiB
WebGPU Shading Language
struct Mat4x4_ {
|
|
mx : vec4<f32>;
|
|
my : vec4<f32>;
|
|
mz : vec4<f32>;
|
|
mw : vec4<f32>;
|
|
};
|
|
|
|
struct Mat4x3_ {
|
|
mx : vec4<f32>;
|
|
my : vec4<f32>;
|
|
mz : vec4<f32>;
|
|
};
|
|
|
|
struct Mat4x2_ {
|
|
mx : vec4<f32>;
|
|
my : vec4<f32>;
|
|
};
|
|
|
|
[[block]]
|
|
struct ub_SceneParams {
|
|
u_Projection : Mat4x4_;
|
|
};
|
|
|
|
[[block]]
|
|
struct ub_MaterialParams {
|
|
u_TexMtx : [[stride(32)]] array<Mat4x2_, 1>;
|
|
u_Misc0_ : vec4<f32>;
|
|
};
|
|
|
|
[[block]]
|
|
struct ub_PacketParams {
|
|
u_PosMtx : [[stride(48)]] array<Mat4x3_, 32>;
|
|
};
|
|
|
|
struct VertexOutput {
|
|
[[location(0)]]
|
|
v_Color : vec4<f32>;
|
|
[[location(1)]]
|
|
v_TexCoord : vec2<f32>;
|
|
[[builtin(position)]]
|
|
member : vec4<f32>;
|
|
};
|
|
|
|
[[group(0), binding(0)]] var<uniform> global : ub_SceneParams;
|
|
|
|
[[group(0), binding(1)]] var<uniform> global1 : ub_MaterialParams;
|
|
|
|
[[group(0), binding(2)]] var<uniform> global2 : ub_PacketParams;
|
|
|
|
var<private> a_Position1 : vec3<f32>;
|
|
|
|
var<private> a_UV1 : vec2<f32>;
|
|
|
|
var<private> a_Color1 : vec4<f32>;
|
|
|
|
var<private> a_Normal1 : vec3<f32>;
|
|
|
|
var<private> a_PosMtxIdx1 : f32;
|
|
|
|
var<private> v_Color : vec4<f32>;
|
|
|
|
var<private> v_TexCoord : vec2<f32>;
|
|
|
|
var<private> gl_Position : vec4<f32>;
|
|
|
|
fn Mat4x3GetCol0_(m : Mat4x3_) -> vec3<f32> {
|
|
var m1 : Mat4x3_;
|
|
m1 = m;
|
|
let _e2 : Mat4x3_ = m1;
|
|
let _e5 : Mat4x3_ = m1;
|
|
let _e8 : Mat4x3_ = m1;
|
|
return vec3<f32>(_e2.mx.x, _e5.my.x, _e8.mz.x);
|
|
}
|
|
|
|
fn Mat4x3GetCol1_(m2 : Mat4x3_) -> vec3<f32> {
|
|
var m3 : Mat4x3_;
|
|
m3 = m2;
|
|
let _e2 : Mat4x3_ = m3;
|
|
let _e5 : Mat4x3_ = m3;
|
|
let _e8 : Mat4x3_ = m3;
|
|
return vec3<f32>(_e2.mx.y, _e5.my.y, _e8.mz.y);
|
|
}
|
|
|
|
fn Mat4x3GetCol2_(m4 : Mat4x3_) -> vec3<f32> {
|
|
var m5 : Mat4x3_;
|
|
m5 = m4;
|
|
let _e2 : Mat4x3_ = m5;
|
|
let _e5 : Mat4x3_ = m5;
|
|
let _e8 : Mat4x3_ = m5;
|
|
return vec3<f32>(_e2.mx.z, _e5.my.z, _e8.mz.z);
|
|
}
|
|
|
|
fn Mat4x3GetCol3_(m6 : Mat4x3_) -> vec3<f32> {
|
|
var m7 : Mat4x3_;
|
|
m7 = m6;
|
|
let _e2 : Mat4x3_ = m7;
|
|
let _e5 : Mat4x3_ = m7;
|
|
let _e8 : Mat4x3_ = m7;
|
|
return vec3<f32>(_e2.mx.w, _e5.my.w, _e8.mz.w);
|
|
}
|
|
|
|
fn Mul(m8 : Mat4x4_, v : vec4<f32>) -> vec4<f32> {
|
|
var m9 : Mat4x4_;
|
|
var v1 : vec4<f32>;
|
|
m9 = m8;
|
|
v1 = v;
|
|
let _e4 : Mat4x4_ = m9;
|
|
let _e6 : vec4<f32> = v1;
|
|
let _e8 : Mat4x4_ = m9;
|
|
let _e10 : vec4<f32> = v1;
|
|
let _e12 : Mat4x4_ = m9;
|
|
let _e14 : vec4<f32> = v1;
|
|
let _e16 : Mat4x4_ = m9;
|
|
let _e18 : vec4<f32> = v1;
|
|
return vec4<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
|
|
}
|
|
|
|
fn Mul1(m10 : Mat4x3_, v2 : vec4<f32>) -> vec3<f32> {
|
|
var m11 : Mat4x3_;
|
|
var v3 : vec4<f32>;
|
|
m11 = m10;
|
|
v3 = v2;
|
|
let _e4 : Mat4x3_ = m11;
|
|
let _e6 : vec4<f32> = v3;
|
|
let _e8 : Mat4x3_ = m11;
|
|
let _e10 : vec4<f32> = v3;
|
|
let _e12 : Mat4x3_ = m11;
|
|
let _e14 : vec4<f32> = v3;
|
|
return vec3<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
|
|
}
|
|
|
|
fn Mul2(m12 : Mat4x2_, v4 : vec4<f32>) -> vec2<f32> {
|
|
var m13 : Mat4x2_;
|
|
var v5 : vec4<f32>;
|
|
m13 = m12;
|
|
v5 = v4;
|
|
let _e4 : Mat4x2_ = m13;
|
|
let _e6 : vec4<f32> = v5;
|
|
let _e8 : Mat4x2_ = m13;
|
|
let _e10 : vec4<f32> = v5;
|
|
return vec2<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10));
|
|
}
|
|
|
|
fn Mul3(v6 : vec3<f32>, m14 : Mat4x3_) -> vec4<f32> {
|
|
var v7 : vec3<f32>;
|
|
var m15 : Mat4x3_;
|
|
v7 = v6;
|
|
m15 = m14;
|
|
let _e5 : Mat4x3_ = m15;
|
|
let _e6 : vec3<f32> = Mat4x3GetCol0_(_e5);
|
|
let _e7 : vec3<f32> = v7;
|
|
let _e10 : Mat4x3_ = m15;
|
|
let _e11 : vec3<f32> = Mat4x3GetCol1_(_e10);
|
|
let _e12 : vec3<f32> = v7;
|
|
let _e15 : Mat4x3_ = m15;
|
|
let _e16 : vec3<f32> = Mat4x3GetCol2_(_e15);
|
|
let _e17 : vec3<f32> = v7;
|
|
let _e20 : Mat4x3_ = m15;
|
|
let _e21 : vec3<f32> = Mat4x3GetCol3_(_e20);
|
|
let _e22 : vec3<f32> = v7;
|
|
return vec4<f32>(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
|
|
}
|
|
|
|
fn _Mat4x4_(n : f32) -> Mat4x4_ {
|
|
var n1 : f32;
|
|
var o : Mat4x4_;
|
|
n1 = n;
|
|
let _e4 : f32 = n1;
|
|
o.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
|
|
let _e11 : f32 = n1;
|
|
o.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
|
|
let _e18 : f32 = n1;
|
|
o.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
|
|
let _e25 : f32 = n1;
|
|
o.mw = vec4<f32>(0.0, 0.0, 0.0, _e25);
|
|
let _e27 : Mat4x4_ = o;
|
|
return _e27;
|
|
}
|
|
|
|
fn _Mat4x4_1(m16 : Mat4x3_) -> Mat4x4_ {
|
|
var m17 : Mat4x3_;
|
|
var o1 : Mat4x4_;
|
|
m17 = m16;
|
|
let _e4 : Mat4x4_ = _Mat4x4_(1.0);
|
|
o1 = _e4;
|
|
let _e7 : Mat4x3_ = m17;
|
|
o1.mx = _e7.mx;
|
|
let _e10 : Mat4x3_ = m17;
|
|
o1.my = _e10.my;
|
|
let _e13 : Mat4x3_ = m17;
|
|
o1.mz = _e13.mz;
|
|
let _e15 : Mat4x4_ = o1;
|
|
return _e15;
|
|
}
|
|
|
|
fn _Mat4x4_2(m18 : Mat4x2_) -> Mat4x4_ {
|
|
var m19 : Mat4x2_;
|
|
var o2 : Mat4x4_;
|
|
m19 = m18;
|
|
let _e4 : Mat4x4_ = _Mat4x4_(1.0);
|
|
o2 = _e4;
|
|
let _e7 : Mat4x2_ = m19;
|
|
o2.mx = _e7.mx;
|
|
let _e10 : Mat4x2_ = m19;
|
|
o2.my = _e10.my;
|
|
let _e12 : Mat4x4_ = o2;
|
|
return _e12;
|
|
}
|
|
|
|
fn _Mat4x3_(n2 : f32) -> Mat4x3_ {
|
|
var n3 : f32;
|
|
var o3 : Mat4x3_;
|
|
n3 = n2;
|
|
let _e4 : f32 = n3;
|
|
o3.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
|
|
let _e11 : f32 = n3;
|
|
o3.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
|
|
let _e18 : f32 = n3;
|
|
o3.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
|
|
let _e21 : Mat4x3_ = o3;
|
|
return _e21;
|
|
}
|
|
|
|
fn _Mat4x3_1(m20 : Mat4x4_) -> Mat4x3_ {
|
|
var m21 : Mat4x4_;
|
|
var o4 : Mat4x3_;
|
|
m21 = m20;
|
|
let _e4 : Mat4x4_ = m21;
|
|
o4.mx = _e4.mx;
|
|
let _e7 : Mat4x4_ = m21;
|
|
o4.my = _e7.my;
|
|
let _e10 : Mat4x4_ = m21;
|
|
o4.mz = _e10.mz;
|
|
let _e12 : Mat4x3_ = o4;
|
|
return _e12;
|
|
}
|
|
|
|
fn main1() {
|
|
var t_PosMtx : Mat4x3_;
|
|
var t_TexSpaceCoord : vec2<f32>;
|
|
let _e15 : f32 = a_PosMtxIdx1;
|
|
let _e18 : Mat4x3_ = global2.u_PosMtx[i32(_e15)];
|
|
t_PosMtx = _e18;
|
|
let _e23 : Mat4x3_ = t_PosMtx;
|
|
let _e24 : Mat4x4_ = _Mat4x4_1(_e23);
|
|
let _e25 : vec3<f32> = a_Position1;
|
|
let _e29 : Mat4x3_ = t_PosMtx;
|
|
let _e30 : Mat4x4_ = _Mat4x4_1(_e29);
|
|
let _e31 : vec3<f32> = a_Position1;
|
|
let _e34 : vec4<f32> = Mul(_e30, vec4<f32>(_e31, 1.0));
|
|
let _e35 : Mat4x4_ = global.u_Projection;
|
|
let _e37 : Mat4x3_ = t_PosMtx;
|
|
let _e38 : Mat4x4_ = _Mat4x4_1(_e37);
|
|
let _e39 : vec3<f32> = a_Position1;
|
|
let _e43 : Mat4x3_ = t_PosMtx;
|
|
let _e44 : Mat4x4_ = _Mat4x4_1(_e43);
|
|
let _e45 : vec3<f32> = a_Position1;
|
|
let _e48 : vec4<f32> = Mul(_e44, vec4<f32>(_e45, 1.0));
|
|
let _e49 : vec4<f32> = Mul(_e35, _e48);
|
|
gl_Position = _e49;
|
|
let _e50 : vec4<f32> = a_Color1;
|
|
v_Color = _e50;
|
|
let _e52 : vec4<f32> = global1.u_Misc0_;
|
|
if ((_e52.x == 2.0)) {
|
|
{
|
|
let _e59 : vec3<f32> = a_Normal1;
|
|
let _e64 : Mat4x2_ = global1.u_TexMtx[0];
|
|
let _e65 : vec3<f32> = a_Normal1;
|
|
let _e68 : vec2<f32> = Mul2(_e64, vec4<f32>(_e65, 1.0));
|
|
v_TexCoord = _e68.xy;
|
|
return;
|
|
}
|
|
} else {
|
|
{
|
|
let _e73 : vec2<f32> = a_UV1;
|
|
let _e79 : Mat4x2_ = global1.u_TexMtx[0];
|
|
let _e80 : vec2<f32> = a_UV1;
|
|
let _e84 : vec2<f32> = Mul2(_e79, vec4<f32>(_e80, 1.0, 1.0));
|
|
v_TexCoord = _e84.xy;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
[[stage(vertex)]]
|
|
fn main([[location(0)]] a_Position : vec3<f32>, [[location(1)]] a_UV : vec2<f32>, [[location(2)]] a_Color : vec4<f32>, [[location(3)]] a_Normal : vec3<f32>, [[location(4)]] a_PosMtxIdx : f32) -> VertexOutput {
|
|
a_Position1 = a_Position;
|
|
a_UV1 = a_UV;
|
|
a_Color1 = a_Color;
|
|
a_Normal1 = a_Normal;
|
|
a_PosMtxIdx1 = a_PosMtxIdx;
|
|
main1();
|
|
let _e11 : vec4<f32> = v_Color;
|
|
let _e13 : vec2<f32> = v_TexCoord;
|
|
let _e15 : vec4<f32> = gl_Position;
|
|
return VertexOutput(_e11, _e13, _e15);
|
|
}
|