9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-22 16:39:22 +00:00
Files
Leaf/patches/server/0134-Canvas-Use-VT-executor-for-noise-generating.patch
2024-11-02 22:23:20 -04:00

45 lines
2.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dueris <jedimastertoothless@hotmail.com>
Date: Fri, 18 Oct 2024 23:25:34 -0700
Subject: [PATCH] Canvas: Use VT executor for noise generating
Original project: https://github.com/CraftCanvasMC/Canvas
diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java
index c991da3d975e07f3e1e59d5b2e91ed629ea608e6..e3b6dd8a8cca9149aab63e68d0a513c06091b5fa 100644
--- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java
+++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java
@@ -267,8 +267,32 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator {
}
+ private static final java.util.concurrent.ExecutorService noiseGenExecutor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor(); // Canvas - Use VT executor for noise generating
@Override
public CompletableFuture<ChunkAccess> fillFromNoise(Blender blender, RandomState noiseConfig, StructureManager structureAccessor, ChunkAccess chunk) {
+ // Canvas start - Use VT executor for noise generating
+ if (true) {
+ NoiseSettings settings = this.settings.value().noiseSettings().clampToHeightAccessor(chunk.getHeightAccessorForGeneration());
+ int miny = settings.minY();
+ int minyDiv = Mth.floorDiv(miny, settings.getCellHeight());
+ int cellHeightDiv = Mth.floorDiv(settings.height(), settings.getCellHeight());
+
+ if (cellHeightDiv <= 0) return CompletableFuture.completedFuture(chunk);
+
+ int startIndex = chunk.getSectionIndex(cellHeightDiv * settings.getCellHeight() - 1 + miny);
+ int minYIndex = chunk.getSectionIndex(miny);
+
+ LevelChunkSection[] sections = chunk.getSections();
+ for (int i = startIndex; i >= minYIndex; --i) sections[i].acquire();
+
+ return CompletableFuture.supplyAsync(Util.wrapThreadWithTaskName(
+ "wgen_fill_noise",
+ () -> this.doFill(blender, structureAccessor, noiseConfig, chunk, minyDiv, cellHeightDiv)
+ ), Util.backgroundExecutor()).whenCompleteAsync((result, ignored) -> {
+ for (int i = startIndex; i >= minYIndex; --i) sections[i].release();
+ }, noiseGenExecutor);
+ }
+ // Canvas end - Use VT executor for noise generating
NoiseSettings noisesettings = ((NoiseGeneratorSettings) this.settings.value()).noiseSettings().clampToHeightAccessor(chunk.getHeightAccessorForGeneration());
int i = noisesettings.minY();
int j = Mth.floorDiv(i, noisesettings.getCellHeight());