This commit is contained in:
Akko
2025-08-04 18:57:35 +02:00
parent 8cf6e78a79
commit 9495868c2e
5030 changed files with 518594 additions and 17609 deletions

View File

@@ -0,0 +1,3 @@
import type { UboElement, UniformsSyncCallback } from '../../rendering/renderers/shared/shader/types';
export declare function generateUboSyncPolyfillSTD40(uboElements: UboElement[]): UniformsSyncCallback;
export declare function generateUboSyncPolyfillWGSL(uboElements: UboElement[]): UniformsSyncCallback;

View File

@@ -0,0 +1,83 @@
'use strict';
var createUboElementsSTD40 = require('../../rendering/renderers/gl/shader/utils/createUboElementsSTD40.js');
var createUboElementsWGSL = require('../../rendering/renderers/gpu/shader/utils/createUboElementsWGSL.js');
var uniformParsers = require('../../rendering/renderers/shared/shader/utils/uniformParsers.js');
var uboSyncFunctions = require('./uboSyncFunctions.js');
"use strict";
function generateUboSyncPolyfillSTD40(uboElements) {
return generateUboSyncPolyfill(
uboElements,
uboSyncFunctions.uboSingleFunctionsSTD40,
(uboElement) => {
const rowSize = Math.max(createUboElementsSTD40.WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);
const elementSize = uboElement.data.value.length / uboElement.data.size;
const remainder = (4 - elementSize % 4) % 4;
return (_name, data, offset, _uv, v) => {
let t = 0;
for (let i = 0; i < uboElement.data.size * rowSize; i++) {
for (let j = 0; j < elementSize; j++) {
data[offset++] = v[t++];
}
offset += remainder;
}
};
}
);
}
function generateUboSyncPolyfillWGSL(uboElements) {
return generateUboSyncPolyfill(
uboElements,
uboSyncFunctions.uboSingleFunctionsWGSL,
(uboElement) => {
const { size, align } = createUboElementsWGSL.WGSL_ALIGN_SIZE_DATA[uboElement.data.type];
const remainder = (size - align) / 4;
return (_name, data, offset, _uv, v) => {
let t = 0;
for (let i = 0; i < uboElement.data.size * (size / 4); i++) {
for (let j = 0; j < size / 4; j++) {
data[offset++] = v[t++];
}
offset += remainder;
}
};
}
);
}
function generateUboSyncPolyfill(uboElements, uboFunctions, arrayUploadFunction) {
const functionMap = {};
for (const i in uboElements) {
const uboElement = uboElements[i];
const uniform = uboElement.data;
let parsed = false;
functionMap[uniform.name] = {
offset: uboElement.offset / 4,
func: null
};
for (let j = 0; j < uniformParsers.uniformParsers.length; j++) {
const parser = uniformParsers.uniformParsers[j];
if (uniform.type === parser.type && parser.test(uniform)) {
functionMap[uniform.name].func = uboSyncFunctions.uboParserFunctions[j];
parsed = true;
break;
}
}
if (!parsed) {
if (uniform.size === 1) {
functionMap[uniform.name].func = uboFunctions[uniform.type];
} else {
functionMap[uniform.name].func = arrayUploadFunction(uboElement);
}
}
}
return (uniforms, data, offset) => {
for (const i in functionMap) {
functionMap[i].func(i, data, offset + functionMap[i].offset, uniforms, uniforms[i]);
}
};
}
exports.generateUboSyncPolyfillSTD40 = generateUboSyncPolyfillSTD40;
exports.generateUboSyncPolyfillWGSL = generateUboSyncPolyfillWGSL;
//# sourceMappingURL=generateUboSyncPolyfill.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,80 @@
import { WGSL_TO_STD40_SIZE } from '../../rendering/renderers/gl/shader/utils/createUboElementsSTD40.mjs';
import { WGSL_ALIGN_SIZE_DATA } from '../../rendering/renderers/gpu/shader/utils/createUboElementsWGSL.mjs';
import { uniformParsers } from '../../rendering/renderers/shared/shader/utils/uniformParsers.mjs';
import { uboSingleFunctionsSTD40, uboSingleFunctionsWGSL, uboParserFunctions } from './uboSyncFunctions.mjs';
"use strict";
function generateUboSyncPolyfillSTD40(uboElements) {
return generateUboSyncPolyfill(
uboElements,
uboSingleFunctionsSTD40,
(uboElement) => {
const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);
const elementSize = uboElement.data.value.length / uboElement.data.size;
const remainder = (4 - elementSize % 4) % 4;
return (_name, data, offset, _uv, v) => {
let t = 0;
for (let i = 0; i < uboElement.data.size * rowSize; i++) {
for (let j = 0; j < elementSize; j++) {
data[offset++] = v[t++];
}
offset += remainder;
}
};
}
);
}
function generateUboSyncPolyfillWGSL(uboElements) {
return generateUboSyncPolyfill(
uboElements,
uboSingleFunctionsWGSL,
(uboElement) => {
const { size, align } = WGSL_ALIGN_SIZE_DATA[uboElement.data.type];
const remainder = (size - align) / 4;
return (_name, data, offset, _uv, v) => {
let t = 0;
for (let i = 0; i < uboElement.data.size * (size / 4); i++) {
for (let j = 0; j < size / 4; j++) {
data[offset++] = v[t++];
}
offset += remainder;
}
};
}
);
}
function generateUboSyncPolyfill(uboElements, uboFunctions, arrayUploadFunction) {
const functionMap = {};
for (const i in uboElements) {
const uboElement = uboElements[i];
const uniform = uboElement.data;
let parsed = false;
functionMap[uniform.name] = {
offset: uboElement.offset / 4,
func: null
};
for (let j = 0; j < uniformParsers.length; j++) {
const parser = uniformParsers[j];
if (uniform.type === parser.type && parser.test(uniform)) {
functionMap[uniform.name].func = uboParserFunctions[j];
parsed = true;
break;
}
}
if (!parsed) {
if (uniform.size === 1) {
functionMap[uniform.name].func = uboFunctions[uniform.type];
} else {
functionMap[uniform.name].func = arrayUploadFunction(uboElement);
}
}
}
return (uniforms, data, offset) => {
for (const i in functionMap) {
functionMap[i].func(i, data, offset + functionMap[i].offset, uniforms, uniforms[i]);
}
};
}
export { generateUboSyncPolyfillSTD40, generateUboSyncPolyfillWGSL };
//# sourceMappingURL=generateUboSyncPolyfill.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
/**
* This file is auto generated by scripts/utils/autoGenerateUnsafeEvalFunctions.ts
* Do not edit manually - or you will be sad.
*/
import type { UNIFORM_TYPES } from '../../rendering/renderers/shared/shader/types';
export type UboUploadFunction = (name: string, data: Float32Array, offset: number, uv: any, v: any) => void;
export declare const uboParserFunctions: UboUploadFunction[];
export declare const uboSingleFunctionsWGSL: Record<UNIFORM_TYPES | string, UboUploadFunction>;
export declare const uboSingleFunctionsSTD40: Record<UNIFORM_TYPES | string, UboUploadFunction>;

View File

@@ -0,0 +1,197 @@
'use strict';
"use strict";
const uboParserFunctions = [
(name, data, offset, uv, _v) => {
const matrix = uv[name].toArray(true);
data[offset] = matrix[0];
data[offset + 1] = matrix[1];
data[offset + 2] = matrix[2];
data[offset + 4] = matrix[3];
data[offset + 5] = matrix[4];
data[offset + 6] = matrix[5];
data[offset + 8] = matrix[6];
data[offset + 9] = matrix[7];
data[offset + 10] = matrix[8];
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.x;
data[offset + 1] = v.y;
data[offset + 2] = v.width;
data[offset + 3] = v.height;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.x;
data[offset + 1] = v.y;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.red;
data[offset + 1] = v.green;
data[offset + 2] = v.blue;
data[offset + 3] = v.alpha;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.red;
data[offset + 1] = v.green;
data[offset + 2] = v.blue;
}
];
const uboSingleFunctionsWGSL = {
f32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
i32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
"vec2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
},
"vec3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
},
"vec4<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat2x2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat3x3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 4] = v[3];
data[offset + 5] = v[4];
data[offset + 6] = v[5];
data[offset + 8] = v[6];
data[offset + 9] = v[7];
data[offset + 10] = v[8];
},
"mat4x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 16; i++) {
data[offset + i] = v[i];
}
},
"mat3x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
},
"mat4x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat4x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat3x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
}
};
const uboSingleFunctionsSTD40 = {
f32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
i32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
"vec2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
},
"vec3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
},
"vec4<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat2x2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 4] = v[2];
data[offset + 5] = v[3];
},
"mat3x3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 4] = v[3];
data[offset + 5] = v[4];
data[offset + 6] = v[5];
data[offset + 8] = v[6];
data[offset + 9] = v[7];
data[offset + 10] = v[8];
},
"mat4x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 16; i++) {
data[offset + i] = v[i];
}
},
"mat3x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
},
"mat4x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat4x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat3x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
}
};
exports.uboParserFunctions = uboParserFunctions;
exports.uboSingleFunctionsSTD40 = uboSingleFunctionsSTD40;
exports.uboSingleFunctionsWGSL = uboSingleFunctionsWGSL;
//# sourceMappingURL=uboSyncFunctions.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,193 @@
"use strict";
const uboParserFunctions = [
(name, data, offset, uv, _v) => {
const matrix = uv[name].toArray(true);
data[offset] = matrix[0];
data[offset + 1] = matrix[1];
data[offset + 2] = matrix[2];
data[offset + 4] = matrix[3];
data[offset + 5] = matrix[4];
data[offset + 6] = matrix[5];
data[offset + 8] = matrix[6];
data[offset + 9] = matrix[7];
data[offset + 10] = matrix[8];
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.x;
data[offset + 1] = v.y;
data[offset + 2] = v.width;
data[offset + 3] = v.height;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.x;
data[offset + 1] = v.y;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.red;
data[offset + 1] = v.green;
data[offset + 2] = v.blue;
data[offset + 3] = v.alpha;
},
(name, data, offset, uv, v) => {
v = uv[name];
data[offset] = v.red;
data[offset + 1] = v.green;
data[offset + 2] = v.blue;
}
];
const uboSingleFunctionsWGSL = {
f32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
i32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
"vec2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
},
"vec3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
},
"vec4<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat2x2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat3x3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 4] = v[3];
data[offset + 5] = v[4];
data[offset + 6] = v[5];
data[offset + 8] = v[6];
data[offset + 9] = v[7];
data[offset + 10] = v[8];
},
"mat4x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 16; i++) {
data[offset + i] = v[i];
}
},
"mat3x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
},
"mat4x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat4x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat3x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
}
};
const uboSingleFunctionsSTD40 = {
f32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
i32: (_name, data, offset, _uv, v) => {
data[offset] = v;
},
"vec2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
},
"vec3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
},
"vec4<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 3] = v[3];
},
"mat2x2<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 4] = v[2];
data[offset + 5] = v[3];
},
"mat3x3<f32>": (_name, data, offset, _uv, v) => {
data[offset] = v[0];
data[offset + 1] = v[1];
data[offset + 2] = v[2];
data[offset + 4] = v[3];
data[offset + 5] = v[4];
data[offset + 6] = v[5];
data[offset + 8] = v[6];
data[offset + 9] = v[7];
data[offset + 10] = v[8];
},
"mat4x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 16; i++) {
data[offset + i] = v[i];
}
},
"mat3x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
},
"mat4x2<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 6; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat4x3<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 4 | 0) * 4 + i % 4] = v[i];
}
},
"mat2x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 8; i++) {
data[offset + (i / 2 | 0) * 4 + i % 2] = v[i];
}
},
"mat3x4<f32>": (_name, data, offset, _uv, v) => {
for (let i = 0; i < 12; i++) {
data[offset + (i / 3 | 0) * 4 + i % 3] = v[i];
}
}
};
export { uboParserFunctions, uboSingleFunctionsSTD40, uboSingleFunctionsWGSL };
//# sourceMappingURL=uboSyncFunctions.mjs.map

File diff suppressed because one or more lines are too long