Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/1.20.3' into 1.20.6
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/net/irisshaders/iris/gui/element/ShaderPackOptionList.java
  • Loading branch information
IMS212 committed May 20, 2024
2 parents 48b6f2b + 245d5fb commit 2b8dd4f
Show file tree
Hide file tree
Showing 22 changed files with 557 additions and 21 deletions.
4 changes: 3 additions & 1 deletion src/main/java/net/irisshaders/iris/Iris.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.irisshaders.iris.compat.dh.DHCompat;
import net.irisshaders.iris.config.IrisConfig;
import net.irisshaders.iris.gl.GLDebug;
import net.irisshaders.iris.gl.buffer.ShaderStorageBufferHolder;
import net.irisshaders.iris.gl.shader.ShaderCompileException;
import net.irisshaders.iris.gl.shader.StandardMacros;
import net.irisshaders.iris.gui.debug.DebugLoadFailedGridScreen;
Expand Down Expand Up @@ -97,7 +98,6 @@ public class Iris {

static {
if (!BuildConfig.ACTIVATE_RENDERDOC && FabricLoader.getInstance().isDevelopmentEnvironment() && System.getProperty("user.name").contains("ims") && Util.getPlatform() == Util.OS.LINUX) {
Configuration.GLFW_LIBRARY_NAME.set("/usr/lib/libglfw.so");
}
}

Expand Down Expand Up @@ -588,6 +588,8 @@ private static WorldRenderingPipeline createPipeline(NamespacedId dimensionId) {
storedError = Optional.of(e);
}
}

ShaderStorageBufferHolder.forceDeleteBuffers();
logger.error("Failed to create shader rendering pipeline, disabling shaders!", e);
// TODO: This should be reverted if a dimension change causes shaders to compile again
fallback = true;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/net/irisshaders/iris/gl/IrisLimits.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ public class IrisLimits {
* is implemented.
*/
public static final int MAX_COLOR_BUFFERS = 16;
public static final boolean VK_CONFORMANCE = false;
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ public void resizeIfRelative(int width, int height) {
GlStateManager._glBindBuffer(GL43C.GL_SHADER_STORAGE_BUFFER, newId);

// Calculation time
int newWidth = (int) (width * info.scaleX());
int newHeight = (int) (height * info.scaleY());
int finalSize = (newHeight * newWidth) * info.size();
long newWidth = (long) (width * info.scaleX());
long newHeight = (long) (height * info.scaleY());
long finalSize = (newHeight * newWidth) * info.size();
IrisRenderSystem.bufferStorage(GL43C.GL_SHADER_STORAGE_BUFFER, finalSize, 0);
IrisRenderSystem.clearBufferSubData(GL43C.GL_SHADER_STORAGE_BUFFER, GL43C.GL_R8, 0, finalSize, GL43C.GL_RED, GL43C.GL_BYTE, new int[]{0});
IrisRenderSystem.bindBufferBase(GL43C.GL_SHADER_STORAGE_BUFFER, index, newId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,25 @@

import com.mojang.blaze3d.platform.GlStateManager;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import net.irisshaders.iris.Iris;
import net.irisshaders.iris.gl.IrisRenderSystem;
import net.irisshaders.iris.gl.sampler.SamplerLimits;
import org.lwjgl.opengl.GL43C;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class ShaderStorageBufferHolder {
private int cachedWidth;
private int cachedHeight;
private ShaderStorageBuffer[] buffers;
private boolean destroyed;

private static List<ShaderStorageBuffer> ACTIVE_BUFFERS = new ArrayList<>();


public ShaderStorageBufferHolder(Int2ObjectArrayMap<ShaderStorageInfo> overrides, int width, int height) {
destroyed = false;
cachedWidth = width;
Expand All @@ -29,6 +36,7 @@ public ShaderStorageBufferHolder(Int2ObjectArrayMap<ShaderStorageInfo> overrides
}

buffers[index] = new ShaderStorageBuffer(index, bufferInfo);
ACTIVE_BUFFERS.add(buffers[index]);
int buffer = buffers[index].getId();

if (bufferInfo.relative()) {
Expand Down Expand Up @@ -59,6 +67,14 @@ public void hasResizedScreen(int width, int height) {
}
}

public static void forceDeleteBuffers() {
if (!ACTIVE_BUFFERS.isEmpty()) {
Iris.logger.warn("Found " + ACTIVE_BUFFERS.size() + " stored buffers with a total size of " + ACTIVE_BUFFERS.stream().map(ShaderStorageBuffer::getSize).reduce(0L, Long::sum) + ", forcing them to be deleted.");
ACTIVE_BUFFERS.forEach(ShaderStorageBuffer::destroy);
ACTIVE_BUFFERS.clear();
}
}

public void setupBuffers() {
if (destroyed) {
throw new IllegalStateException("Tried to use destroyed buffer objects");
Expand All @@ -81,6 +97,7 @@ public int getBufferIndex(int index) {
public void destroyBuffers() {
for (ShaderStorageBuffer buffer : buffers) {
if (buffer != null) {
ACTIVE_BUFFERS.remove(buffer);
buffer.destroy();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.irisshaders.iris.gl.buffer;

public record ShaderStorageInfo(int size, boolean relative, float scaleX, float scaleY) {
public record ShaderStorageInfo(long size, boolean relative, float scaleX, float scaleY) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import net.minecraft.util.Mth;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;

import java.io.IOException;
import java.io.InputStream;
Expand Down Expand Up @@ -106,6 +107,11 @@ protected void renderListSeparators(GuiGraphics pAbstractSelectionList0) {
RenderSystem.disableBlend();
}

@Override
protected boolean isValidMouseClick(int i) {
return i == GLFW.GLFW_MOUSE_BUTTON_1 || i == GLFW.GLFW_MOUSE_BUTTON_2;
}

public void addHeader(Component text, boolean backButton) {
this.addEntry(new HeaderEntry(this.screen, this.navigation, text, backButton));
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/irisshaders/iris/mixin/MixinBiome.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.irisshaders.iris.mixin;

import net.irisshaders.iris.parsing.ExtendedBiome;
import net.irisshaders.iris.mixinterface.ExtendedBiome;
import net.minecraft.world.level.biome.Biome;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package net.irisshaders.iris.mixin;

import com.llamalad7.mixinextras.sugar.Local;
import net.irisshaders.iris.Iris;
import net.irisshaders.iris.mixinterface.BiomeAmbienceInterface;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.resources.sounds.BiomeAmbientSoundsHandler;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.biome.AmbientMoodSettings;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(BiomeAmbientSoundsHandler.class)
public class MixinBiomeAmbientSoundsHandler implements BiomeAmbienceInterface {
@Shadow
@Final
private LocalPlayer player;

@Unique
private float constantMoodiness;

@Inject(method = "method_26271", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getBrightness(Lnet/minecraft/world/level/LightLayer;Lnet/minecraft/core/BlockPos;)I", ordinal = 0))
private void calculateConstantMoodiness(AmbientMoodSettings ambientMoodSettings, CallbackInfo ci, @Local BlockPos blockPos) {
int j = this.player.level().getBrightness(LightLayer.SKY, blockPos);
if (j > 0) {
this.constantMoodiness -= (float)j / (float)this.player.level().getMaxLightLevel() * 0.001F;
} else {
this.constantMoodiness -= (float)(this.player.level().getBrightness(LightLayer.BLOCK, blockPos) - 1) / (float)ambientMoodSettings.getTickDelay();
}

this.constantMoodiness = Mth.clamp(constantMoodiness, 0.0f, 1.0f);
}

@Override
public float getConstantMood() {
return constantMoodiness;
}
}
30 changes: 30 additions & 0 deletions src/main/java/net/irisshaders/iris/mixin/MixinLocalPlayer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package net.irisshaders.iris.mixin;

import net.irisshaders.iris.mixinterface.BiomeAmbienceInterface;
import net.irisshaders.iris.mixinterface.LocalPlayerInterface;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.resources.sounds.AmbientSoundHandler;
import net.minecraft.client.resources.sounds.BiomeAmbientSoundsHandler;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

import java.util.List;

@Mixin(LocalPlayer.class)
public class MixinLocalPlayer implements LocalPlayerInterface {
@Shadow
@Final
private List<AmbientSoundHandler> ambientSoundHandlers;

@Override
public float getCurrentConstantMood() {
for(AmbientSoundHandler ambientSoundHandler : this.ambientSoundHandlers) {
if (ambientSoundHandler instanceof BiomeAmbientSoundsHandler) {
return ((BiomeAmbienceInterface)ambientSoundHandler).getConstantMood();
}
}

return 0.0F;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import net.irisshaders.iris.pipeline.WorldRenderingPipeline;
import net.irisshaders.iris.pipeline.programs.ExtendedShader;
import net.irisshaders.iris.pipeline.programs.FallbackShader;
import net.irisshaders.iris.pipeline.programs.ShaderInstanceInterface;
import net.irisshaders.iris.mixinterface.ShaderInstanceInterface;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.server.packs.resources.ResourceProvider;
import org.slf4j.Logger;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package net.irisshaders.iris.mixinterface;

public interface BiomeAmbienceInterface {
float getConstantMood();
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.irisshaders.iris.parsing;
package net.irisshaders.iris.mixinterface;

public interface ExtendedBiome {
int getBiomeCategory();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package net.irisshaders.iris.mixinterface;

public interface LocalPlayerInterface {
float getCurrentConstantMood();
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.irisshaders.iris.pipeline.programs;
package net.irisshaders.iris.mixinterface;

import net.minecraft.server.packs.resources.ResourceProvider;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,10 @@ public IrisRenderingPipeline(ProgramSet programSet) {
return shadowRenderTargets;
};

if (shadowDirectives.isShadowEnabled() == OptionalBoolean.TRUE) {
shadowTargetsSupplier.get();
}

this.shadowComputes = createShadowComputes(programSet.getShadowCompute(), programSet);

this.beginRenderer = new CompositeRenderer(this, programSet.getPackDirectives(), programSet.getBegin(), programSet.getBeginCompute(), renderTargets, shaderStorageBufferHolder,
Expand Down Expand Up @@ -445,10 +449,6 @@ public IrisRenderingPipeline(ProgramSet programSet) {
WorldRenderingSettings.INSTANCE.setSeparateEntityDraws(programSet.getPackDirectives().shouldUseSeparateEntityDraws());
WorldRenderingSettings.INSTANCE.setUseExtendedVertexFormat(true);

if (shadowRenderTargets == null && shadowDirectives.isShadowEnabled() == OptionalBoolean.TRUE) {
shadowRenderTargets = new ShadowRenderTargets(this, shadowMapResolution, shadowDirectives);
}

if (shadowRenderTargets != null) {
ShaderInstance shader = shaderMap.getShader(ShaderKey.SHADOW_TERRAIN_CUTOUT);
boolean shadowUsesImages = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import net.irisshaders.iris.gl.sampler.SamplerHolder;
import net.irisshaders.iris.gl.texture.TextureType;
import net.irisshaders.iris.gl.uniform.DynamicLocationalUniformHolder;
import net.irisshaders.iris.mixinterface.ShaderInstanceInterface;
import net.irisshaders.iris.pipeline.IrisRenderingPipeline;
import net.irisshaders.iris.samplers.IrisSamplers;
import net.irisshaders.iris.uniforms.CapturedRenderingState;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import io.github.douira.glsl_transformer.util.LRUCache;
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
import net.irisshaders.iris.Iris;
import net.irisshaders.iris.gl.IrisLimits;
import net.irisshaders.iris.gl.blending.AlphaTest;
import net.irisshaders.iris.gl.shader.ShaderCompileException;
import net.irisshaders.iris.gl.state.ShaderAttributeInputs;
Expand All @@ -31,6 +32,7 @@
import net.irisshaders.iris.pipeline.transform.transformer.CompositeCoreTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.CompositeTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.DHTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.LayoutTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.SodiumCoreTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.SodiumTransformer;
import net.irisshaders.iris.pipeline.transform.transformer.TextureTransformer;
Expand Down Expand Up @@ -140,8 +142,8 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) {

if (profile == Profile.CORE || version.number >= 150 && profile == null || isLine) {
// patch the version number to at least 330
if (version.number < 330) {
versionStatement.version = Version.GLSL33;
if (version.number < 410) {
versionStatement.version = Version.GLSL41;
}

switch (parameters.patch) {
Expand All @@ -164,8 +166,8 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) {
}
} else {
// patch the version number to at least 330
if (version.number < 330) {
versionStatement.version = Version.GLSL33;
if (version.number < 410) {
versionStatement.version = Version.GLSL41;
}
versionStatement.profile = Profile.CORE;

Expand Down Expand Up @@ -196,6 +198,10 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) {

// the compatibility transformer does a grouped transformation
CompatibilityTransformer.transformGrouped(transformer, trees, parameters);

if (IrisLimits.VK_CONFORMANCE) {
LayoutTransformer.transformGrouped(transformer, trees, parameters);
}
});
transformer.setTokenFilter(parseTokenFilter);
}
Expand Down
Loading

0 comments on commit 2b8dd4f

Please sign in to comment.