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,39 +163,44 @@ public class IrisEngine extends BlockPopulator implements Engine {
@ChunkCoordinates
@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 {
PrecisionStopwatch p = PrecisionStopwatch.start();
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();
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());

View File

@ -213,11 +213,11 @@ public class IrisEngineCompound implements EngineCompound {
}
@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();
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;

View File

@ -81,7 +81,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
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();

View File

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

View File

@ -25,10 +25,10 @@ public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent
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
public void modify(int x, int z, Hunk<T> output) {
onModify(x, z, output);
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
onModify(x, z, output, multicore);
}
}

View File

@ -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<BlockData> blocks = Hunk.view((ChunkData) tc);
Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc);
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));
}

View File

@ -41,7 +41,7 @@ import java.util.List;
public interface EngineCompound extends Listener, Hotloadable, DataProvider {
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();

View File

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