Support switching on and off MPC

This commit is contained in:
Daniel Mills 2021-07-27 17:24:06 -04:00
parent ee83cf2989
commit 8d967856b5
9 changed files with 41 additions and 36 deletions

View File

@ -163,12 +163,15 @@ public class IrisEngine extends BlockPopulator implements Engine {
@ChunkCoordinates @ChunkCoordinates
@Override @Override
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) { public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes, boolean multicore) {
try { try {
PrecisionStopwatch p = PrecisionStopwatch.start(); PrecisionStopwatch p = PrecisionStopwatch.start();
Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t)); Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
BurstExecutor b = burst().burst(16);
PrecisionStopwatch px = PrecisionStopwatch.start(); PrecisionStopwatch px = PrecisionStopwatch.start();
if(multicore)
{
BurstExecutor b = burst().burst(16);
for (int i = 0; i < vblocks.getWidth(); i++) { for (int i = 0; i < vblocks.getWidth(); i++) {
int finalI = i; int finalI = i;
b.queue(() -> { b.queue(() -> {
@ -180,22 +183,24 @@ public class IrisEngine extends BlockPopulator implements Engine {
} }
b.complete(); b.complete();
}
getMetrics().getPrecache().put(px.getMilliseconds()); getMetrics().getPrecache().put(px.getMilliseconds());
switch (getDimension().getTerrainMode()) { switch (getDimension().getTerrainMode()) {
case NORMAL -> { case NORMAL -> {
getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4); getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4);
getFramework().getTerrainActuator().actuate(x, z, vblocks); getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore);
getFramework().getBiomeActuator().actuate(x, z, vbiomes); getFramework().getBiomeActuator().actuate(x, z, vbiomes, multicore);
getFramework().getCaveModifier().modify(x, z, vblocks); getFramework().getCaveModifier().modify(x, z, vblocks, multicore);
getFramework().getRavineModifier().modify(x, z, vblocks); getFramework().getRavineModifier().modify(x, z, vblocks, multicore);
getFramework().getPostModifier().modify(x, z, vblocks); getFramework().getPostModifier().modify(x, z, vblocks, multicore);
getFramework().getDecorantActuator().actuate(x, z, blocks); getFramework().getDecorantActuator().actuate(x, z, blocks, multicore);
getFramework().getEngineParallax().insertParallax(x >> 4, z >> 4, blocks); getFramework().getEngineParallax().insertParallax(x >> 4, z >> 4, blocks);
getFramework().getDepositModifier().modify(x, z, blocks); getFramework().getDepositModifier().modify(x, z, blocks, multicore);
} }
case ISLANDS -> { case ISLANDS -> {
getFramework().getTerrainActuator().actuate(x, z, vblocks); getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore);
} }
} }
getMetrics().getTotal().put(p.getMilliseconds()); getMetrics().getTotal().put(p.getMilliseconds());

View File

@ -213,11 +213,11 @@ public class IrisEngineCompound implements EngineCompound {
} }
@Override @Override
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes) { public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes, boolean multicore) {
recycle(); recycle();
PrecisionStopwatch p = PrecisionStopwatch.start(); PrecisionStopwatch p = PrecisionStopwatch.start();
if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) { if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) {
engines[0].generate(x, z, blocks, biomes); engines[0].generate(x, z, blocks, biomes, multicore);
} else { } else {
int i; int i;
int offset = 0; int offset = 0;
@ -234,7 +234,7 @@ public class IrisEngineCompound implements EngineCompound {
cbiome = cbiome.invertY(); cbiome = cbiome.invertY();
} }
engine.generate(x, z, cblock, cbiome); engine.generate(x, z, cblock, cbiome, multicore);
blocks.insert(0, doffset, 0, cblock); blocks.insert(0, doffset, 0, cblock);
biomes.insert(0, doffset, 0, cbiome); biomes.insert(0, doffset, 0, cbiome);
offset += height; offset += height;

View File

@ -81,7 +81,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
double modifyZ(double z); double modifyZ(double z);
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes); void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes, boolean multicore);
EngineMetrics getMetrics(); EngineMetrics getMetrics();

View File

@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates;
public interface EngineActuator<O> extends EngineComponent { public interface EngineActuator<O> extends EngineComponent {
@BlockCoordinates @BlockCoordinates
void actuate(int x, int z, Hunk<O> output); void actuate(int x, int z, Hunk<O> output, boolean multicore);
} }

View File

@ -26,11 +26,11 @@ public abstract class EngineAssignedActuator<T> extends EngineAssignedComponent
super(engine, name); super(engine, name);
} }
public abstract void onActuate(int x, int z, Hunk<T> output); public abstract void onActuate(int x, int z, Hunk<T> output, boolean multicore);
@BlockCoordinates @BlockCoordinates
@Override @Override
public void actuate(int x, int z, Hunk<T> output) { public void actuate(int x, int z, Hunk<T> output, boolean multicore) {
onActuate(x, z, output); onActuate(x, z, output, multicore);
} }
} }

View File

@ -25,10 +25,10 @@ public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent
super(engine, name); super(engine, name);
} }
public abstract void onModify(int x, int z, Hunk<T> output); public abstract void onModify(int x, int z, Hunk<T> output, boolean multicore);
@Override @Override
public void modify(int x, int z, Hunk<T> output) { public void modify(int x, int z, Hunk<T> output, boolean multicore) {
onModify(x, z, output); onModify(x, z, output, multicore);
} }
} }

View File

@ -457,7 +457,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
PrecisionStopwatch ps = PrecisionStopwatch.start(); PrecisionStopwatch ps = PrecisionStopwatch.start();
TerrainChunk tc = TerrainChunk.create(world, biome); TerrainChunk tc = TerrainChunk.create(world, biome);
IrisWorld ww = (getComposite() == null || getComposite().getWorld() == null) ? IrisWorld.fromWorld(world) : getComposite().getWorld(); 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()) { if (!getComposite().getWorld().hasRealWorld()) {
getComposite().getWorld().bind(world); getComposite().getWorld().bind(world);
@ -540,7 +540,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
.minHeight(w.minHeight()).maxHeight(w.maxHeight()) .minHeight(w.minHeight()).maxHeight(w.maxHeight())
.injector((xx, yy, zz, biomeBase) -> chunk.setBiomeAt(ox + xx, yy, oz + zz, .injector((xx, yy, zz, biomeBase) -> chunk.setBiomeAt(ox + xx, yy, oz + zz,
INMS.get().getTrueBiomeBaseId(biomeBase))) INMS.get().getTrueBiomeBaseId(biomeBase)))
.build()).run(); .build(), false).run();
} catch (Throwable e) { } catch (Throwable e) {
Iris.error("======================================"); Iris.error("======================================");
e.printStackTrace(); 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); initialize(world);
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc); Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc); Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc);
Hunk<BlockData> post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth()); Hunk<BlockData> 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)); return () -> blocks.insertSoftly(0, 0, 0, post, (b) -> b == null || B.isAirOrFluid(b));
} }

View File

@ -41,7 +41,7 @@ import java.util.List;
public interface EngineCompound extends Listener, Hotloadable, DataProvider { public interface EngineCompound extends Listener, Hotloadable, DataProvider {
IrisDimension getRootDimension(); IrisDimension getRootDimension();
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes); void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes, boolean multicore);
IrisWorld getWorld(); IrisWorld getWorld();

View File

@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates;
public interface EngineModifier<T> extends EngineComponent { public interface EngineModifier<T> extends EngineComponent {
@BlockCoordinates @BlockCoordinates
void modify(int x, int z, Hunk<T> t); void modify(int x, int z, Hunk<T> t, boolean multicore);
} }