From 8d967856b5880b66a1612bae595dc99c7c7436d3 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Tue, 27 Jul 2021 17:24:06 -0400 Subject: [PATCH] Support switching on and off MPC --- .../com/volmit/iris/engine/IrisEngine.java | 43 +++++++++++-------- .../iris/engine/IrisEngineCompound.java | 6 +-- .../volmit/iris/engine/framework/Engine.java | 2 +- .../iris/engine/framework/EngineActuator.java | 2 +- .../framework/EngineAssignedActuator.java | 6 +-- .../framework/EngineAssignedModifier.java | 6 +-- .../framework/EngineCompositeGenerator.java | 8 ++-- .../iris/engine/framework/EngineCompound.java | 2 +- .../iris/engine/framework/EngineModifier.java | 2 +- 9 files changed, 41 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 37bed2d92..8604b229c 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -163,39 +163,44 @@ public class IrisEngine extends BlockPopulator implements Engine { @ChunkCoordinates @Override - public void generate(int x, int z, Hunk vblocks, Hunk vbiomes) { + public void generate(int x, int z, Hunk vblocks, Hunk vbiomes, boolean multicore) { try { PrecisionStopwatch p = PrecisionStopwatch.start(); Hunk blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t)); - BurstExecutor b = burst().burst(16); PrecisionStopwatch px = PrecisionStopwatch.start(); - for (int i = 0; i < vblocks.getWidth(); i++) { - int finalI = i; - b.queue(() -> { - for (int j = 0; j < vblocks.getDepth(); j++) { - getFramework().getComplex().getTrueBiomeStream().get(x + finalI, z + j); - getFramework().getComplex().getTrueHeightStream().get(x + finalI, z + j); - } - }); + + if(multicore) + { + BurstExecutor b = burst().burst(16); + for (int i = 0; i < vblocks.getWidth(); i++) { + int finalI = i; + b.queue(() -> { + for (int j = 0; j < vblocks.getDepth(); j++) { + getFramework().getComplex().getTrueBiomeStream().get(x + finalI, z + j); + getFramework().getComplex().getTrueHeightStream().get(x + finalI, z + j); + } + }); + } + + b.complete(); } - b.complete(); getMetrics().getPrecache().put(px.getMilliseconds()); switch (getDimension().getTerrainMode()) { case NORMAL -> { getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4); - getFramework().getTerrainActuator().actuate(x, z, vblocks); - getFramework().getBiomeActuator().actuate(x, z, vbiomes); - getFramework().getCaveModifier().modify(x, z, vblocks); - getFramework().getRavineModifier().modify(x, z, vblocks); - getFramework().getPostModifier().modify(x, z, vblocks); - getFramework().getDecorantActuator().actuate(x, z, blocks); + getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore); + getFramework().getBiomeActuator().actuate(x, z, vbiomes, multicore); + getFramework().getCaveModifier().modify(x, z, vblocks, multicore); + getFramework().getRavineModifier().modify(x, z, vblocks, multicore); + getFramework().getPostModifier().modify(x, z, vblocks, multicore); + getFramework().getDecorantActuator().actuate(x, z, blocks, multicore); getFramework().getEngineParallax().insertParallax(x >> 4, z >> 4, blocks); - getFramework().getDepositModifier().modify(x, z, blocks); + getFramework().getDepositModifier().modify(x, z, blocks, multicore); } case ISLANDS -> { - getFramework().getTerrainActuator().actuate(x, z, vblocks); + getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore); } } getMetrics().getTotal().put(p.getMilliseconds()); diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineCompound.java b/src/main/java/com/volmit/iris/engine/IrisEngineCompound.java index df3ade035..85ab10d2a 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineCompound.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineCompound.java @@ -213,11 +213,11 @@ public class IrisEngineCompound implements EngineCompound { } @Override - public void generate(int x, int z, Hunk blocks, Hunk postblocks, Hunk biomes) { + public void generate(int x, int z, Hunk blocks, Hunk postblocks, Hunk biomes, boolean multicore) { recycle(); PrecisionStopwatch p = PrecisionStopwatch.start(); if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) { - engines[0].generate(x, z, blocks, biomes); + engines[0].generate(x, z, blocks, biomes, multicore); } else { int i; int offset = 0; @@ -234,7 +234,7 @@ public class IrisEngineCompound implements EngineCompound { cbiome = cbiome.invertY(); } - engine.generate(x, z, cblock, cbiome); + engine.generate(x, z, cblock, cbiome, multicore); blocks.insert(0, doffset, 0, cblock); biomes.insert(0, doffset, 0, cbiome); offset += height; diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index a25210ab7..c756185e1 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -81,7 +81,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro double modifyZ(double z); - void generate(int x, int z, Hunk blocks, Hunk biomes); + void generate(int x, int z, Hunk blocks, Hunk biomes, boolean multicore); EngineMetrics getMetrics(); diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineActuator.java b/src/main/java/com/volmit/iris/engine/framework/EngineActuator.java index c249e4548..6aac05f1f 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineActuator.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineActuator.java @@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates; public interface EngineActuator extends EngineComponent { @BlockCoordinates - void actuate(int x, int z, Hunk output); + void actuate(int x, int z, Hunk output, boolean multicore); } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedActuator.java b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedActuator.java index 118e98eec..fb0c0428c 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedActuator.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedActuator.java @@ -26,11 +26,11 @@ public abstract class EngineAssignedActuator extends EngineAssignedComponent super(engine, name); } - public abstract void onActuate(int x, int z, Hunk output); + public abstract void onActuate(int x, int z, Hunk output, boolean multicore); @BlockCoordinates @Override - public void actuate(int x, int z, Hunk output) { - onActuate(x, z, output); + public void actuate(int x, int z, Hunk output, boolean multicore) { + onActuate(x, z, output, multicore); } } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java index b242d710e..902136e6e 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java @@ -25,10 +25,10 @@ public abstract class EngineAssignedModifier extends EngineAssignedComponent super(engine, name); } - public abstract void onModify(int x, int z, Hunk output); + public abstract void onModify(int x, int z, Hunk output, boolean multicore); @Override - public void modify(int x, int z, Hunk output) { - onModify(x, z, output); + public void modify(int x, int z, Hunk output, boolean multicore) { + onModify(x, z, output, multicore); } } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java b/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java index aff2abbc8..7c6074169 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java @@ -457,7 +457,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce PrecisionStopwatch ps = PrecisionStopwatch.start(); TerrainChunk tc = TerrainChunk.create(world, biome); IrisWorld ww = (getComposite() == null || getComposite().getWorld() == null) ? IrisWorld.fromWorld(world) : getComposite().getWorld(); - generateChunkRawData(ww, x, z, tc).run(); + generateChunkRawData(ww, x, z, tc, true).run(); if (!getComposite().getWorld().hasRealWorld()) { getComposite().getWorld().bind(world); @@ -540,7 +540,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce .minHeight(w.minHeight()).maxHeight(w.maxHeight()) .injector((xx, yy, zz, biomeBase) -> chunk.setBiomeAt(ox + xx, yy, oz + zz, INMS.get().getTrueBiomeBaseId(biomeBase))) - .build()).run(); + .build(), false).run(); } catch (Throwable e) { Iris.error("======================================"); e.printStackTrace(); @@ -556,12 +556,12 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce } } - public Runnable generateChunkRawData(IrisWorld world, int x, int z, TerrainChunk tc) { + public Runnable generateChunkRawData(IrisWorld world, int x, int z, TerrainChunk tc, boolean multicore) { initialize(world); Hunk blocks = Hunk.view((ChunkData) tc); Hunk biomes = Hunk.view((BiomeGrid) tc); Hunk post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth()); - compound.get().generate(x * 16, z * 16, blocks, post, biomes); + compound.get().generate(x * 16, z * 16, blocks, post, biomes, multicore); return () -> blocks.insertSoftly(0, 0, 0, post, (b) -> b == null || B.isAirOrFluid(b)); } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineCompound.java b/src/main/java/com/volmit/iris/engine/framework/EngineCompound.java index 257e192ff..44257ed44 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineCompound.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineCompound.java @@ -41,7 +41,7 @@ import java.util.List; public interface EngineCompound extends Listener, Hotloadable, DataProvider { IrisDimension getRootDimension(); - void generate(int x, int z, Hunk blocks, Hunk postblocks, Hunk biomes); + void generate(int x, int z, Hunk blocks, Hunk postblocks, Hunk biomes, boolean multicore); IrisWorld getWorld(); diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineModifier.java b/src/main/java/com/volmit/iris/engine/framework/EngineModifier.java index 21642ae35..fa734bff2 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineModifier.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineModifier.java @@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates; public interface EngineModifier extends EngineComponent { @BlockCoordinates - void modify(int x, int z, Hunk t); + void modify(int x, int z, Hunk t, boolean multicore); }