Skip to content

Commit 96c5a00

Browse files
committed
25w09a (The world stopper)
1 parent ad6957b commit 96c5a00

File tree

85 files changed

+618
-484
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+618
-484
lines changed

buildSrc/src/main/kotlin/BuildConfig.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import org.gradle.api.Project
22

33
object BuildConfig {
4-
val MINECRAFT_VERSION: String = "25w08a"
4+
val MINECRAFT_VERSION: String = "25w09a"
55
val NEOFORGE_VERSION: String = "21.4.88-beta"
66
val FABRIC_LOADER_VERSION: String = "0.16.10"
77
val FABRIC_API_VERSION: String = "0.112.1+1.21.4"

common/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ dependencies {
9191
addDependentFabricModule("fabric-rendering-data-attachment-v1")
9292
compileOnly("maven.modrinth:distanthorizonsapi:3.0.0")
9393

94-
modImplementation(files(rootDir.resolve("sodium-fabric-0.7.0-snapshot+mc25w08a-local.jar")))
94+
modImplementation(files(rootDir.resolve("sodium-fabric-0.7.0-snapshot+mc25w09a-local.jar")))
9595
modCompileOnly("org.antlr:antlr4-runtime:4.13.1")
9696
modCompileOnly("io.github.douira:glsl-transformer:2.0.1")
9797
modCompileOnly("org.anarres:jcpp:1.4.14")
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
package net.irisshaders.batchedentityrendering.impl;
22

3+
import com.mojang.blaze3d.buffers.GpuBuffer;
4+
import com.mojang.blaze3d.systems.RenderPass;
35
import com.mojang.blaze3d.systems.RenderSystem;
4-
import com.mojang.blaze3d.vertex.VertexBuffer;
56

67
public class BufferSegmentRenderer {
78
public BufferSegmentRenderer() {
89
}
910

1011
/**
11-
* Sets up the render type, draws the buffer, and then tears down the render type.
12+
* Like draw(), but it doesn't setup / tear down the render type.
1213
*/
13-
public void draw(BufferSegment segment) {
14-
if (segment.meshData() != null) {
15-
segment.type().setupRenderState();
16-
drawInner(segment);
17-
segment.type().clearRenderState();
14+
public void drawInner(RenderPass currentPass, BufferSegment segment) {
15+
GpuBuffer vertexBuffer = segment.meshData().drawState().format().uploadImmediateVertexBuffer(segment.meshData().vertexBuffer());
16+
17+
GpuBuffer gpuBuffer2 = segment.meshData().indexBuffer() == null ? null : segment.type().getRenderPipeline().getVertexFormat().uploadImmediateIndexBuffer(segment.meshData().indexBuffer());
18+
19+
if (gpuBuffer2 != null) {
20+
currentPass.setIndexBuffer(gpuBuffer2, segment.meshData().drawState().indexType());
21+
} else {
22+
RenderSystem.AutoStorageIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(segment.meshData().drawState().mode());
23+
currentPass.setIndexBuffer(autoStorageIndexBuffer.getBuffer(segment.meshData().drawState().indexCount()), autoStorageIndexBuffer.type());
1824
}
19-
}
2025

21-
/**
22-
* Like draw(), but it doesn't setup / tear down the render type.
23-
*/
24-
public void drawInner(BufferSegment segment) {
25-
VertexBuffer vertexBuffer = segment.meshData().drawState().format().getImmediateDrawVertexBuffer();
26-
vertexBuffer.bind();
27-
vertexBuffer.upload(segment.meshData());
28-
vertexBuffer.drawWithShader(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), segment.type().getCompiledShaderProgram());
26+
currentPass.setVertexBuffer(0, vertexBuffer);
27+
currentPass.drawIndexed(0, segment.meshData().drawState().indexCount());
28+
29+
segment.meshData().close();
2930
}
3031
}

common/src/main/java/net/irisshaders/batchedentityrendering/impl/ByteBufferBuilderHolder.java

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
public class ByteBufferBuilderHolder implements MemoryTrackingBuffer {
66
private final ByteBufferBuilder builder;
77
private long lastUse;
8+
private boolean wasUsedSince;
89

910
public ByteBufferBuilderHolder(ByteBufferBuilder builder) {
1011
this.lastUse = System.currentTimeMillis();
@@ -21,7 +22,10 @@ public boolean deleteOrClear(int clearTime) {
2122
this.builder.close();
2223
return true;
2324
} else {
25+
if (!wasUsedSince) return false;
26+
// TODO POSSIBLE MEMORY LEAK
2427
this.builder.clear();
28+
wasUsedSince = false;
2529
return false;
2630
}
2731
}
@@ -57,5 +61,6 @@ public void freeAndDeleteBuffer() {
5761

5862
public void wasUsed() {
5963
this.lastUse = System.currentTimeMillis();
64+
wasUsedSince = true;
6065
}
6166
}

common/src/main/java/net/irisshaders/batchedentityrendering/impl/FullyBufferedMultiBufferSource.java

+68-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package net.irisshaders.batchedentityrendering.impl;
22

3+
import com.mojang.blaze3d.pipeline.RenderTarget;
4+
import com.mojang.blaze3d.systems.RenderPass;
5+
import com.mojang.blaze3d.systems.RenderSystem;
6+
import com.mojang.blaze3d.textures.GpuTexture;
37
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
48
import com.mojang.blaze3d.vertex.VertexConsumer;
59
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMaps;
@@ -19,6 +23,8 @@
1923
import java.util.LinkedHashMap;
2024
import java.util.List;
2125
import java.util.Map;
26+
import java.util.OptionalDouble;
27+
import java.util.OptionalInt;
2228
import java.util.function.Function;
2329

2430
public class FullyBufferedMultiBufferSource extends MultiBufferSource.BufferSource implements MemoryTrackingBuffer, Groupable, WrappingMultiBufferSource {
@@ -137,18 +143,43 @@ public void endBatch() {
137143
profiler.push("iris draw buffers");
138144

139145
for (RenderType type : renderOrder) {
140-
if (!typeToSegment.containsKey(type)) continue;
141-
142-
type.setupRenderState();
143-
144-
renderTypes += 1;
145-
146-
for (BufferSegment segment : typeToSegment.getOrDefault(type, Collections.emptyList())) {
147-
segmentRenderer.drawInner(segment);
148-
drawCalls += 1;
146+
try {
147+
if (!typeToSegment.containsKey(type)) continue;
148+
149+
type.setupRenderState();
150+
151+
RenderTarget renderTarget = type.getRenderTarget();
152+
153+
try (RenderPass renderPass = RenderSystem.getDevice()
154+
.createCommandEncoder()
155+
.createRenderPass(
156+
renderTarget.getColorTexture(), OptionalInt.empty(), renderTarget.useDepth ? renderTarget.getDepthTexture() : null, OptionalDouble.empty()
157+
)) {
158+
renderPass.setPipeline(type.getRenderPipeline());
159+
if (RenderSystem.SCISSOR_STATE.isEnabled()) {
160+
renderPass.enableScissor(RenderSystem.SCISSOR_STATE);
161+
}
162+
163+
for (int i = 0; i < 12; i++) {
164+
GpuTexture gpuTexture = RenderSystem.getShaderTexture(i);
165+
if (gpuTexture != null) {
166+
renderPass.bindSampler("Sampler" + i, gpuTexture);
167+
}
168+
}
169+
170+
171+
renderTypes += 1;
172+
173+
for (BufferSegment segment : typeToSegment.getOrDefault(type, Collections.emptyList())) {
174+
segmentRenderer.drawInner(renderPass, segment);
175+
drawCalls += 1;
176+
}
177+
}
178+
179+
type.clearRenderState();
180+
} catch (Exception e) {
181+
throw new RuntimeException("Failed to draw " + type, e);
149182
}
150-
151-
type.clearRenderState();
152183
}
153184

154185
int targetClearTime = getTargetClearTime();
@@ -182,11 +213,34 @@ public void endBatchWithType(TransparencyType transparencyType) {
182213

183214
type.setupRenderState();
184215

216+
RenderTarget renderTarget = type.getRenderTarget();
217+
185218
renderTypes += 1;
186219

187-
for (BufferSegment segment : typeToSegment.getOrDefault(type, Collections.emptyList())) {
188-
segmentRenderer.drawInner(segment);
189-
drawCalls += 1;
220+
try (RenderPass renderPass = RenderSystem.getDevice()
221+
.createCommandEncoder()
222+
.createRenderPass(
223+
renderTarget.getColorTexture(), OptionalInt.empty(), renderTarget.useDepth ? renderTarget.getDepthTexture() : null, OptionalDouble.empty()
224+
)) {
225+
renderPass.setPipeline(type.getRenderPipeline());
226+
if (RenderSystem.SCISSOR_STATE.isEnabled()) {
227+
renderPass.enableScissor(RenderSystem.SCISSOR_STATE);
228+
}
229+
230+
for (int i = 0; i < 12; i++) {
231+
GpuTexture gpuTexture = RenderSystem.getShaderTexture(i);
232+
if (gpuTexture != null) {
233+
renderPass.bindSampler("Sampler" + i, gpuTexture);
234+
}
235+
}
236+
237+
238+
renderTypes += 1;
239+
240+
for (BufferSegment segment : typeToSegment.getOrDefault(type, Collections.emptyList())) {
241+
segmentRenderer.drawInner(renderPass, segment);
242+
drawCalls += 1;
243+
}
190244
}
191245

192246
typeToSegment.remove(type);

common/src/main/java/net/irisshaders/batchedentityrendering/impl/wrappers/TaggingRenderTypeWrapper.java

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package net.irisshaders.batchedentityrendering.impl.wrappers;
22

3+
import com.mojang.blaze3d.pipeline.RenderPipeline;
4+
import com.mojang.blaze3d.pipeline.RenderTarget;
5+
import com.mojang.blaze3d.vertex.MeshData;
36
import com.mojang.blaze3d.vertex.VertexFormat;
47
import net.irisshaders.batchedentityrendering.impl.BlendingStateHolder;
58
import net.irisshaders.batchedentityrendering.impl.TransparencyType;
69
import net.irisshaders.batchedentityrendering.impl.WrappableRenderType;
710
import net.irisshaders.batchedentityrendering.mixin.RenderTypeAccessor;
8-
import net.minecraft.client.renderer.CompiledShaderProgram;
911
import net.minecraft.client.renderer.RenderType;
1012
import org.jetbrains.annotations.Nullable;
1113

@@ -66,8 +68,18 @@ public int hashCode() {
6668
}
6769

6870
@Override
69-
public @Nullable CompiledShaderProgram getCompiledShaderProgram() {
70-
return wrapped.getCompiledShaderProgram();
71+
public void draw(MeshData meshData) {
72+
wrapped.draw(meshData);
73+
}
74+
75+
@Override
76+
public RenderTarget getRenderTarget() {
77+
return wrapped.getRenderTarget();
78+
}
79+
80+
@Override
81+
public RenderPipeline getRenderPipeline() {
82+
return wrapped.getRenderPipeline();
7183
}
7284

7385
@Override

common/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinCompositeRenderType.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import com.mojang.blaze3d.pipeline.BlendFunction;
44
import com.mojang.blaze3d.pipeline.RenderPipeline;
5+
import com.mojang.blaze3d.platform.DepthTestFunction;
56
import com.mojang.blaze3d.vertex.VertexFormat;
67
import net.irisshaders.batchedentityrendering.impl.BlendingStateHolder;
78
import net.irisshaders.batchedentityrendering.impl.TransparencyType;
8-
import net.minecraft.client.renderer.DepthTestFunction;
99
import net.minecraft.client.renderer.RenderStateShard;
1010
import net.minecraft.client.renderer.RenderType;
1111
import org.spongepowered.asm.mixin.Mixin;

common/src/main/java/net/irisshaders/batchedentityrendering/mixin/RenderPipelineAccessor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.mojang.blaze3d.pipeline.BlendFunction;
44
import com.mojang.blaze3d.pipeline.RenderPipeline;
5-
import net.minecraft.client.renderer.DepthTestFunction;
5+
import com.mojang.blaze3d.platform.DepthTestFunction;
66
import net.minecraft.client.renderer.RenderStateShard;
77
import org.spongepowered.asm.mixin.Mixin;
88
import org.spongepowered.asm.mixin.gen.Accessor;

common/src/main/java/net/irisshaders/iris/Iris.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.irisshaders.iris;
22

33
import com.google.common.base.Throwables;
4-
import com.mojang.blaze3d.platform.GlDebug;
4+
import com.mojang.blaze3d.opengl.GlDebug;
55
import com.mojang.blaze3d.platform.InputConstants;
66
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
77
import net.caffeinemc.mods.sodium.api.vertex.serializer.VertexSerializerRegistry;

common/src/main/java/net/irisshaders/iris/compat/dh/DHCompatInternal.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.irisshaders.iris.compat.dh;
22

3+
import com.mojang.blaze3d.opengl.GlTexture;
4+
import com.mojang.blaze3d.platform.GlStateManager;
35
import com.mojang.blaze3d.systems.RenderSystem;
46
import com.mojang.blaze3d.textures.GpuTexture;
57
import com.mojang.blaze3d.textures.TextureFormat;
@@ -184,7 +186,7 @@ public void createDepthTex(int width, int height) {
184186

185187
translucentDepthDirty = true;
186188

187-
depthTexNoTranslucent = new GpuTexture("DH depth tex", TextureFormat.DEPTH32, width, height, 1);
189+
depthTexNoTranslucent = RenderSystem.getDevice().createTexture("DH depth tex", TextureFormat.DEPTH32, width, height, 1);
188190
}
189191

190192
public void clear() {
@@ -261,11 +263,11 @@ public int getStoredDepthTex() {
261263
public void copyTranslucents(int width, int height) {
262264
if (translucentDepthDirty) {
263265
translucentDepthDirty = false;
264-
depthTexNoTranslucent.bind();
266+
GlStateManager._bindTexture(((GlTexture) depthTexNoTranslucent).glId());
265267
dhTerrainFramebuffer.bindAsReadBuffer();
266268
IrisRenderSystem.copyTexImage2D(GL20C.GL_TEXTURE_2D, 0, DepthBufferFormat.DEPTH32F.getGlInternalFormat(), 0, 0, width, height, 0);
267269
} else {
268-
DepthCopyStrategy.fastest(false).copy(dhTerrainFramebuffer, storedDepthTex, null, depthTexNoTranslucent.glId(), width, height);
270+
DepthCopyStrategy.fastest(false).copy(dhTerrainFramebuffer, storedDepthTex, null, ((GlTexture) depthTexNoTranslucent).glId(), width, height);
269271
}
270272
}
271273

@@ -280,7 +282,7 @@ public GlFramebuffer getGenericFB() {
280282
public int getDepthTexNoTranslucent() {
281283
if (depthTexNoTranslucent == null) return 0;
282284

283-
return depthTexNoTranslucent.glId();
285+
return ((GlTexture) depthTexNoTranslucent).glId();
284286
}
285287

286288
public IDhApiGenericObjectShaderProgram getGenericShader() {

common/src/main/java/net/irisshaders/iris/compat/dh/IrisGenericRenderProgram.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public void setUniform(int index, Matrix4f matrix) {
209209
matrix.get(buffer);
210210
buffer.rewind();
211211

212-
RenderSystem.glUniformMatrix4(index, buffer);
212+
GlStateManager._glUniformMatrix4(index, buffer);
213213
}
214214
}
215215

@@ -282,8 +282,8 @@ public void free() {
282282

283283
public void fillIndirectUniformData(DhApiRenderParam dhApiRenderParam, DhApiRenderableBoxGroupShading dhApiRenderableBoxGroupShading, IDhApiRenderableBoxGroup boxGroup, DhApiVec3d camPos) {
284284
bind(dhApiRenderParam);
285-
RenderSystem.enableDepthTest();
286-
RenderSystem.depthFunc(GL30C.GL_LEQUAL);
285+
GlStateManager._enableDepthTest();
286+
GlStateManager._depthFunc(GL30C.GL_LEQUAL);
287287
this.setUniform(this.instancedShaderOffsetChunkUniform,
288288
new DhApiVec3i(
289289
getChunkPosFromDouble(boxGroup.getOriginBlockPos().x),

common/src/main/java/net/irisshaders/iris/compat/dh/IrisLodRenderProgram.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.irisshaders.iris.compat.dh;
22

33
import com.google.common.primitives.Ints;
4+
import com.mojang.blaze3d.platform.GlStateManager;
45
import com.mojang.blaze3d.systems.RenderSystem;
56
import com.seibel.distanthorizons.api.DhApi;
67
import com.seibel.distanthorizons.api.objects.math.DhApiVec3f;
@@ -180,7 +181,7 @@ public void setUniform(int index, Matrix4fc matrix) {
180181
matrix.get(buffer);
181182
buffer.rewind();
182183

183-
RenderSystem.glUniformMatrix4(index, buffer);
184+
GlStateManager._glUniformMatrix4(index, buffer);
184185
}
185186
}
186187

common/src/main/java/net/irisshaders/iris/compat/dh/LodRendererEvents.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.irisshaders.iris.compat.dh;
22

3+
import com.mojang.blaze3d.platform.GlStateManager;
34
import com.mojang.blaze3d.systems.RenderSystem;
45
import com.seibel.distanthorizons.api.DhApi;
56
import com.seibel.distanthorizons.api.enums.rendering.EDhApiFogDrawMode;
@@ -198,7 +199,7 @@ public void beforeClear(DhApiCancelableEventParam<DhApiRenderParam> event) {
198199
if (ShadowRenderingState.areShadowsCurrentlyBeingRendered()) {
199200
event.cancelEvent();
200201
} else if (getInstance().shouldOverride) {
201-
RenderSystem.clear(GL43C.GL_DEPTH_BUFFER_BIT);
202+
GlStateManager._clear(GL43C.GL_DEPTH_BUFFER_BIT);
202203
event.cancelEvent();
203204
}
204205
}

common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinAbstractBlockRenderContext.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.irisshaders.iris.platform.IrisPlatformHelpers;
77
import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings;
88
import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder;
9+
import net.minecraft.client.renderer.block.model.BlockModelPart;
910
import net.minecraft.client.renderer.block.model.BlockStateModel;
1011
import net.minecraft.core.BlockPos;
1112
import net.minecraft.core.Direction;
@@ -28,8 +29,8 @@ public class MixinAbstractBlockRenderContext {
2829
@Shadow
2930
protected BlockAndTintGetter level;
3031

31-
@Inject(method = "bufferDefaultModel", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/services/PlatformModelAccess;getQuads(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/client/renderer/block/model/BlockStateModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraft/client/renderer/RenderType;Lnet/caffeinemc/mods/sodium/client/services/SodiumModelData;)Ljava/util/List;"))
32-
private void checkDirectionNeo(BlockStateModel model, @Nullable BlockState state, Predicate<Direction> cullTest, CallbackInfo ci, @Local Direction cullFace) {
32+
@Inject(method = "bufferDefaultModel", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/services/PlatformModelAccess;getQuads(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/client/renderer/block/model/BlockModelPart;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraft/client/renderer/RenderType;Lnet/caffeinemc/mods/sodium/client/services/SodiumModelData;)Ljava/util/List;"))
33+
private void checkDirectionNeo(BlockModelPart model, @Nullable BlockState state, Predicate<Direction> cullTest, CallbackInfo ci, @Local Direction cullFace) {
3334
if ((Object) this instanceof BlockRenderer r && WorldRenderingSettings.INSTANCE.getBlockStateIds() != null && cullFace != null) {
3435
BlockState appearance = IrisPlatformHelpers.getInstance().getBlockAppearance(this.level, state, cullFace, this.pos);
3536
if (appearance != state)
@@ -38,7 +39,7 @@ private void checkDirectionNeo(BlockStateModel model, @Nullable BlockState state
3839
}
3940

4041
@Inject(method = "bufferDefaultModel", at = @At(value = "TAIL"))
41-
private void checkDirectionNeo(BlockStateModel model, @Nullable BlockState state, Predicate<Direction> cullTest, CallbackInfo ci) {
42+
private void checkDirectionNeo(BlockModelPart model, @Nullable BlockState state, Predicate<Direction> cullTest, CallbackInfo ci) {
4243
if ((Object) this instanceof BlockRenderer r && WorldRenderingSettings.INSTANCE.getBlockStateIds() != null) {
4344
((BlockSensitiveBufferBuilder) ((BlockRendererAccessor) r).getBuffers()).restoreBlock();
4445
}

0 commit comments

Comments
 (0)