Skip to content

Commit

Permalink
Support more platforms by dynamically determining max WASM memory
Browse files Browse the repository at this point in the history
  • Loading branch information
SinclaM committed Feb 10, 2024
1 parent 6e36594 commit 391728a
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
1 change: 1 addition & 0 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ pub fn build(b: *std.Build) !void {
"-pthread",
"-sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency",
"-sINITIAL_MEMORY=167772160",
"-sMAXIMUM_MEMORY=4gb",
"-sALLOW_MEMORY_GROWTH",
"-sEXPORTED_FUNCTIONS=_startInitRenderer,_tryFinishInitRenderer,_initRendererIsOk,_initRendererGetPixels,_initRendererGetWidth,_initRendererGetHeight,_initRendererGetErr,_deinitRenderer,_startRender,_tryFinishRender,_rotateCamera,_moveCamera",
"-sEXPORTED_RUNTIME_METHODS=ccall,cwrap",
Expand Down
45 changes: 45 additions & 0 deletions www/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,51 @@
charset="utf-8"
></script>
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
<script>
const initialMemorySize = 2560;

const allowed = (maximum) => {
try {
new WebAssembly.Memory({ initial: initialMemorySize, maximum, shared: true });
return true;
} catch (RangeError) {
return false;
}
};

const findMaximumMemorySize = () => {
let maximum = initialMemorySize;

while (maximum < 65536 && allowed(initialMemorySize, maximum)) {
maximum = Math.min(maximum * 2, 65536);
}

let left = initialMemorySize;
let right = maximum;

while (left < right) {
const mid = Math.ceil((left + right) / 2);

if (allowed(initialMemorySize, mid)) {
left = mid;
} else {
right = mid - 1;
}
}

return left;
};

const maximumMemorySize = findMaximumMemorySize();

var Module = {
wasmMemory: new WebAssembly.Memory({
initial: initialMemorySize,
maximum: maximumMemorySize,
shared: true,
}),
};
</script>
<script src="ray-tracer-challenge.js"></script>
<script src="index.js"></script>
</body>
Expand Down

0 comments on commit 391728a

Please sign in to comment.