MCPcopy Index your code
hub / github.com/tensorflow/tfjs / makeUniforms

Method makeUniforms

tfjs-backend-webgpu/src/backend_webgpu.ts:782–848  ·  view source on GitHub ↗
(programUniform: ProgramUniform)

Source from the content-addressed store, hash-verified

780 }
781
782 private makeUniforms(programUniform: ProgramUniform): GPUBindingResource {
783 let currentOffset = 0;
784 let preLength = 0;
785 const offsets: number[] = [];
786 let maxAlignmentOfField = 1;
787 programUniform.forEach((d) => {
788 if (d.data.length === 0) {
789 d.data = [1];
790 }
791 // https://www.w3.org/TR/WGSL/#alignof
792 let baseAlignment: number;
793 switch (d.data.length) {
794 case 1:
795 baseAlignment = 4;
796 break;
797 case 2:
798 baseAlignment = 8;
799 break;
800 case 3:
801 baseAlignment = 16;
802 break;
803 case 4:
804 baseAlignment = 16;
805 break;
806 case 5:
807 baseAlignment = 16;
808 break;
809 case 6:
810 baseAlignment = 16;
811 break;
812 default:
813 util.assert(false, () => `Unsupported ${d.data.length}D shape`);
814 }
815
816 if (preLength === 5 || preLength === 6) {
817 baseAlignment = 16;
818 }
819 if (baseAlignment > maxAlignmentOfField) {
820 maxAlignmentOfField = baseAlignment;
821 }
822 currentOffset = Math.ceil(currentOffset / baseAlignment) * baseAlignment;
823 preLength = d.data.length;
824 offsets.push(currentOffset);
825 currentOffset += d.data.length * 4;
826 });
827
828 currentOffset =
829 Math.ceil(currentOffset / maxAlignmentOfField) * maxAlignmentOfField;
830 const arrayBuffer = new ArrayBuffer(currentOffset);
831 programUniform.forEach((d, i) => {
832 const offset = offsets[i];
833 if (d.type === 'int32') {
834 new Int32Array(arrayBuffer, offset, d.data.length).set(d.data);
835 } else if (d.type === 'uint32') {
836 new Uint32Array(arrayBuffer, offset, d.data.length).set(d.data);
837 } else {
838 new Float32Array(arrayBuffer, offset, d.data.length).set(d.data);
839 }

Callers 1

recordAndSubmitMethod · 0.95

Calls 4

ceilMethod · 0.80
acquireBufferMethod · 0.80
pushMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected