mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-15 09:18:27 +00:00
emscripten: Fixes for data addresses above 2gb
This includes both wasm64 and wasm32 when addressing more than 2gb of memory.
Fixes: #9052
(Manually cherry-picked from 3deb07ea39
.)
This commit is contained in:
parent
c34790f9f1
commit
02434cd293
4 changed files with 12 additions and 5 deletions
|
@ -428,7 +428,7 @@ typedef Sint64 SDL_Time;
|
||||||
#define SDL_PRIs64 "I64d"
|
#define SDL_PRIs64 "I64d"
|
||||||
#elif defined(PRIs64)
|
#elif defined(PRIs64)
|
||||||
#define SDL_PRIs64 PRIs64
|
#define SDL_PRIs64 PRIs64
|
||||||
#elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE)
|
#elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE) && !defined(__EMSCRIPTEN__)
|
||||||
#define SDL_PRIs64 "ld"
|
#define SDL_PRIs64 "ld"
|
||||||
#else
|
#else
|
||||||
#define SDL_PRIs64 "lld"
|
#define SDL_PRIs64 "lld"
|
||||||
|
@ -439,7 +439,7 @@ typedef Sint64 SDL_Time;
|
||||||
#define SDL_PRIu64 "I64u"
|
#define SDL_PRIu64 "I64u"
|
||||||
#elif defined(PRIu64)
|
#elif defined(PRIu64)
|
||||||
#define SDL_PRIu64 PRIu64
|
#define SDL_PRIu64 PRIu64
|
||||||
#elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE)
|
#elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE) && !defined(__EMSCRIPTEN__)
|
||||||
#define SDL_PRIu64 "lu"
|
#define SDL_PRIu64 "lu"
|
||||||
#else
|
#else
|
||||||
#define SDL_PRIu64 "llu"
|
#define SDL_PRIu64 "llu"
|
||||||
|
|
|
@ -40,6 +40,13 @@ static bool EMSCRIPTENAUDIO_PlayDevice(SDL_AudioDevice *device, const Uint8 *buf
|
||||||
{
|
{
|
||||||
const int framelen = SDL_AUDIO_FRAMESIZE(device->spec);
|
const int framelen = SDL_AUDIO_FRAMESIZE(device->spec);
|
||||||
MAIN_THREAD_EM_ASM({
|
MAIN_THREAD_EM_ASM({
|
||||||
|
/* Convert incoming buf pointer to a HEAPF32 offset. */
|
||||||
|
#ifdef __wasm64__
|
||||||
|
var buf = $0 / 4;
|
||||||
|
#else
|
||||||
|
var buf = $0 >>> 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
var SDL3 = Module['SDL3'];
|
var SDL3 = Module['SDL3'];
|
||||||
var numChannels = SDL3.audio_playback.currentPlaybackBuffer['numberOfChannels'];
|
var numChannels = SDL3.audio_playback.currentPlaybackBuffer['numberOfChannels'];
|
||||||
for (var c = 0; c < numChannels; ++c) {
|
for (var c = 0; c < numChannels; ++c) {
|
||||||
|
@ -49,7 +56,7 @@ static bool EMSCRIPTENAUDIO_PlayDevice(SDL_AudioDevice *device, const Uint8 *buf
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0; j < $1; ++j) {
|
for (var j = 0; j < $1; ++j) {
|
||||||
channelData[j] = HEAPF32[$0 + ((j*numChannels + c) << 2) >> 2]; // !!! FIXME: why are these shifts here?
|
channelData[j] = HEAPF32[buf + (j*numChannels + c)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, buffer, buffer_size / framelen);
|
}, buffer, buffer_size / framelen);
|
||||||
|
|
|
@ -88,7 +88,7 @@ bool Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *wind
|
||||||
SDL3.imageCtx = SDL3.ctx;
|
SDL3.imageCtx = SDL3.ctx;
|
||||||
}
|
}
|
||||||
var data = SDL3.image.data;
|
var data = SDL3.image.data;
|
||||||
var src = pixels >> 2;
|
var src = pixels / 4;
|
||||||
var dst = 0;
|
var dst = 0;
|
||||||
var num;
|
var num;
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ static SDL_Cursor *Emscripten_CreateCursor(SDL_Surface *surface, int hot_x, int
|
||||||
|
|
||||||
var image = ctx.createImageData(w, h);
|
var image = ctx.createImageData(w, h);
|
||||||
var data = image.data;
|
var data = image.data;
|
||||||
var src = pixels >> 2;
|
var src = pixels / 4;
|
||||||
|
|
||||||
var data32 = new Int32Array(data.buffer);
|
var data32 = new Int32Array(data.buffer);
|
||||||
data32.set(HEAP32.subarray(src, src + data32.length));
|
data32.set(HEAP32.subarray(src, src + data32.length));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue