Offthread gfx #22

Merged
merged 16 commits into from Jan 24, 2016

continuation

  • Loading branch information...
taisel committed Jan 24, 2016
commit f00e52c46d6d82cdd2429aaf726856827e05f9af
@@ -8,50 +8,39 @@
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-importScripts("../IodineGBA/includes/TypedArrayShim.js");
-importScripts("../IodineGBA/core/Cartridge.js");
-importScripts("../IodineGBA/core/DMA.js");
-importScripts("../IodineGBA/core/Emulator.js");
-importScripts("../IodineGBA/core/Graphics.js");
-importScripts("../IodineGBA/core/RunLoop.js");
-importScripts("../IodineGBA/core/Memory.js");
-importScripts("../IodineGBA/core/IRQ.js");
-importScripts("../IodineGBA/core/JoyPad.js");
-importScripts("../IodineGBA/core/Serial.js");
-importScripts("../IodineGBA/core/Sound.js");
-importScripts("../IodineGBA/core/Timer.js");
-importScripts("../IodineGBA/core/Wait.js");
-importScripts("../IodineGBA/core/CPU.js");
-importScripts("../IodineGBA/core/Saves.js");
-importScripts("../IodineGBA/core/sound/FIFO.js");
-importScripts("../IodineGBA/core/sound/Channel1.js");
-importScripts("../IodineGBA/core/sound/Channel2.js");
-importScripts("../IodineGBA/core/sound/Channel3.js");
-importScripts("../IodineGBA/core/sound/Channel4.js");
-importScripts("../IodineGBA/core/CPU/ARM.js");
-importScripts("../IodineGBA/core/CPU/THUMB.js");
-importScripts("../IodineGBA/core/CPU/CPSR.js");
-importScripts("../IodineGBA/core/graphics/RendererProxy.js");
-importScripts("../IodineGBA/core/graphics/RendererShim.js");
-/*importScripts("../IodineGBA/core/graphics/Renderer.js");
-importScripts("../IodineGBA/core/graphics/BGTEXT.js");
-importScripts("../IodineGBA/core/graphics/BG2FrameBuffer.js");
-importScripts("../IodineGBA/core/graphics/BGMatrix.js");
-importScripts("../IodineGBA/core/graphics/AffineBG.js");
-importScripts("../IodineGBA/core/graphics/ColorEffects.js");
-importScripts("../IodineGBA/core/graphics/Mosaic.js");
-importScripts("../IodineGBA/core/graphics/OBJ.js");
-importScripts("../IodineGBA/core/graphics/OBJWindow.js");
-importScripts("../IodineGBA/core/graphics/Window.js");
-importScripts("../IodineGBA/core/graphics/Compositor.js");*/
-importScripts("../IodineGBA/core/memory/DMA0.js");
-importScripts("../IodineGBA/core/memory/DMA1.js");
-importScripts("../IodineGBA/core/memory/DMA2.js");
-importScripts("../IodineGBA/core/memory/DMA3.js");
-importScripts("../IodineGBA/core/cartridge/SaveDeterminer.js");
-importScripts("../IodineGBA/core/cartridge/SRAM.js");
-importScripts("../IodineGBA/core/cartridge/FLASH.js");
-importScripts("../IodineGBA/core/cartridge/EEPROM.js");
+importScripts("../includes/TypedArrayShim.js");
+importScripts("Cartridge.js");
+importScripts("DMA.js");
+importScripts("Emulator.js");
+importScripts("Graphics.js");
+importScripts("RunLoop.js");
+importScripts("Memory.js");
+importScripts("IRQ.js");
+importScripts("JoyPad.js");
+importScripts("Serial.js");
+importScripts("Sound.js");
+importScripts("Timer.js");
+importScripts("Wait.js");
+importScripts("CPU.js");
+importScripts("Saves.js");
+importScripts("sound/FIFO.js");
+importScripts("sound/Channel1.js");
+importScripts("sound/Channel2.js");
+importScripts("sound/Channel3.js");
+importScripts("sound/Channel4.js");
+importScripts("CPU/ARM.js");
+importScripts("CPU/THUMB.js");
+importScripts("CPU/CPSR.js");
+importScripts("graphics/RendererProxy.js");
+importScripts("graphics/RendererShim.js");
+importScripts("memory/DMA0.js");
+importScripts("memory/DMA1.js");
+importScripts("memory/DMA2.js");
+importScripts("memory/DMA3.js");
+importScripts("cartridge/SaveDeterminer.js");
+importScripts("cartridge/SRAM.js");
+importScripts("cartridge/FLASH.js");
+importScripts("cartridge/EEPROM.js");
var Iodine = new GameBoyAdvanceEmulator();
//Save callbacks waiting to be satisfied:
var saveImportPool = [];
@@ -9,7 +9,7 @@
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
function getGameBoyAdvanceGraphicsRenderer(coreExposed, skippingBIOS) {
- if (!window.SharedArrayBuffer || !Atomics) {
+ if (typeof SharedArrayBuffer != "function" || typeof Atomics != "object") {
return new GameBoyAdvanceGraphicsRenderer(coreExposed, skippingBIOS);
}
else {
@@ -25,7 +25,11 @@
}
GameBoyAdvanceGraphicsRendererShim.prototype.initializeWorker = function (skippingBIOS) {
skippingBIOS = !!skippingBIOS;
- this.worker = new Worker("RendererShimWorker.js");
+ var loc = location.href;
+ loc = loc.split("/");
+ loc = loc.slice(0, loc.length - 1).join("/");
+ loc += "/graphics/Worker.js";
+ this.worker = new Worker(loc);
this.worker.postMessage({
messageID:2,
skippingBIOS:!!skippingBIOS
@@ -8,18 +8,18 @@
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-importScripts("../IodineGBA/includes/TypedArrayShim.js");
-importScripts("../IodineGBA/core/graphics/Renderer.js");
-importScripts("../IodineGBA/core/graphics/BGTEXT.js");
-importScripts("../IodineGBA/core/graphics/BG2FrameBuffer.js");
-importScripts("../IodineGBA/core/graphics/BGMatrix.js");
-importScripts("../IodineGBA/core/graphics/AffineBG.js");
-importScripts("../IodineGBA/core/graphics/ColorEffects.js");
-importScripts("../IodineGBA/core/graphics/Mosaic.js");
-importScripts("../IodineGBA/core/graphics/OBJ.js");
-importScripts("../IodineGBA/core/graphics/OBJWindow.js");
-importScripts("../IodineGBA/core/graphics/Window.js");
-importScripts("../IodineGBA/core/graphics/Compositor.js");
+importScripts("../../includes/TypedArrayShim.js");
+importScripts("Renderer.js");
+importScripts("BGTEXT.js");
+importScripts("BG2FrameBuffer.js");
+importScripts("BGMatrix.js");
+importScripts("AffineBG.js");
+importScripts("ColorEffects.js");
+importScripts("Mosaic.js");
+importScripts("OBJ.js");
+importScripts("OBJWindow.js");
+importScripts("Window.js");
+importScripts("Compositor.js");
var renderer = null;
var gfxBuffers = null;
var gfxCounters = null;
@@ -63,11 +63,11 @@ function initializeRenderer(skippingBIOS) {
skippingBIOS = !!skippingBIOS;
renderer = new GameBoyAdvanceGraphicsRenderer(coreExposed, !!skippingBIOS);
}
-function assignBuffers(gfxBuffers, gfxCounters, gfxCommandBuffer, gfxCommandCounters) {
- gfxBuffers = gfxBuffers;
- gfxCounters = gfxCounters;
- gfxCommandBuffer = gfxCommandBuffer;
- gfxCommandCounters = gfxCommandCounters;
+function assignBuffers(gfxb, gfxc, cmdb, cmdc) {
+ gfxBuffers = gfxb;
+ gfxCounters = gfxc;
+ gfxCommandBuffer = cmdb;
+ gfxCommandCounters = cmdc;
}
function processCommands() {
//Load the counter values:
@@ -87,6 +87,7 @@ function processCommands() {
} while ((startCorrected | 0) != (endCorrected | 0));
//Update the starting position counter to match the end position:
Atomics.store(gfxCommandCounters, 0, end | 0);
+ Atomics.futexWake(gfxCommandCounters, 1, end | 0);
}
function dispatchCommand(command, data) {
command = command | 0;
@@ -64,7 +64,7 @@ window.onload = function () {
function registerIodineHandler() {
try {
//Will run like shit if missing some of this for the webworker copy:
- if (!window.SharedArrayBuffer || !Atomics) {
+ if (typeof SharedArrayBuffer != "function" || typeof Atomics != "object") {
throw null;
}
//Try starting Iodine in a webworker:
@@ -29,7 +29,10 @@ var tempvar = document.getElementsByTagName("script");
IodineGBAWorkerShim.prototype.filepath = tempvar[tempvar.length-1].src;
IodineGBAWorkerShim.prototype.initialize = function () {
var parentObj = this;
- this.worker = new Worker(this.filepath.substring(0, (this.filepath.length | 0) - 3) + "Worker.js");
+ var loc = this.filepath.split("/");
+ loc = loc.slice(0, loc.length - 2).join("/");
+ loc += "/IodineGBA/core/Worker.js";
+ this.worker = new Worker(loc);
this.worker.onmessage = function (event) {
parentObj.decodeMessage(event.data);
}