diff --git a/src/main/java/kroppeb/stareval/function/AbstractTypedFunction.java b/src/main/java/kroppeb/stareval/function/AbstractTypedFunction.java index b67b78c1cd..c0f1b75dcf 100644 --- a/src/main/java/kroppeb/stareval/function/AbstractTypedFunction.java +++ b/src/main/java/kroppeb/stareval/function/AbstractTypedFunction.java @@ -1,6 +1,7 @@ package kroppeb.stareval.function; import java.util.Arrays; +import java.util.Objects; public abstract class AbstractTypedFunction implements TypedFunction { private final Type returnType; @@ -41,4 +42,26 @@ public boolean isPure() { public int priority() { return this.priority; } + + @Override + public boolean equals(Object obj) { + if (obj instanceof AbstractTypedFunction func) { + return Objects.equals(returnType, func.returnType) && + Arrays.equals(parameters, func.parameters) && + priority == func.priority && + isPure == func.isPure; + } + + return false; + } + + @Override + public int hashCode() { + return Objects.hash(returnType, Arrays.hashCode(parameters), priority, isPure); + } + + @Override + public String toString() { + return TypedFunction.format(this, "unknown"); + } } diff --git a/src/main/java/kroppeb/stareval/function/TypedFunction.java b/src/main/java/kroppeb/stareval/function/TypedFunction.java index b9f2837c29..bed05058ee 100644 --- a/src/main/java/kroppeb/stareval/function/TypedFunction.java +++ b/src/main/java/kroppeb/stareval/function/TypedFunction.java @@ -3,6 +3,7 @@ import kroppeb.stareval.expression.Expression; import java.util.Arrays; +import java.util.Objects; import java.util.stream.Collectors; public interface TypedFunction { @@ -53,6 +54,19 @@ public Type type() { public boolean constant() { return this.isConstant; } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Parameter p) { + return Objects.equals(type, p.type) && Objects.equals(isConstant, p.isConstant); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hashCode(type) + 3192 + Objects.hashCode(isConstant); + } } } diff --git a/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinLevelRenderer_EntityListSorting.java b/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinLevelRenderer_EntityListSorting.java index ad8c9a93ea..c1a35e3da5 100644 --- a/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinLevelRenderer_EntityListSorting.java +++ b/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinLevelRenderer_EntityListSorting.java @@ -1,5 +1,7 @@ package net.irisshaders.batchedentityrendering.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.world.entity.Entity; @@ -40,17 +42,15 @@ public class MixinLevelRenderer_EntityListSorting { @Shadow private ClientLevel level; - @ModifyVariable(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Ljava/lang/Iterable;iterator()Ljava/util/Iterator;"), - slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderBuffers;bufferSource()Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;"), - to = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;shouldRender(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/client/renderer/culling/Frustum;DDD)Z")), allow = 1) - private Iterator batchedentityrendering$sortEntityList(Iterator iterator) { + @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", target = "Ljava/lang/Iterable;iterator()Ljava/util/Iterator;")) + private Iterator batchedentityrendering$sortEntityList(Iterable instance, Operation> original) { // Sort the entity list first in order to allow vanilla's entity batching code to work better. this.level.getProfiler().push("sortEntityList"); Map, List> sortedEntities = new HashMap<>(); List entities = new ArrayList<>(); - iterator.forEachRemaining(entity -> { + original.call(instance).forEachRemaining(entity -> { sortedEntities.computeIfAbsent(entity.getType(), entityType -> new ArrayList<>(32)).add(entity); }); diff --git a/src/main/java/net/irisshaders/iris/features/FeatureFlags.java b/src/main/java/net/irisshaders/iris/features/FeatureFlags.java index 89ca843804..7bf4aa6862 100644 --- a/src/main/java/net/irisshaders/iris/features/FeatureFlags.java +++ b/src/main/java/net/irisshaders/iris/features/FeatureFlags.java @@ -14,7 +14,7 @@ public enum FeatureFlags { CUSTOM_IMAGES(() -> true, IrisRenderSystem::supportsImageLoadStore), PER_BUFFER_BLENDING(() -> true, IrisRenderSystem::supportsBufferBlending), COMPUTE_SHADERS(() -> true, IrisRenderSystem::supportsCompute), - TESSELATION_SHADERS(() -> true, IrisRenderSystem::supportsTesselation), + TESSELLATION_SHADERS(() -> true, IrisRenderSystem::supportsTesselation), ENTITY_TRANSLUCENT(() -> true, () -> true), REVERSED_CULLING(() -> true, () -> true), BLOCK_EMISSION_ATTRIBUTE(() -> true, () -> true), @@ -59,6 +59,11 @@ public static boolean isInvalid(String name) { } public static FeatureFlags getValue(String value) { + if (value.equalsIgnoreCase("TESSELATION_SHADERS")) { + // fix the sins of the past + value = "TESSELLATION_SHADERS"; + } + try { return FeatureFlags.valueOf(value.toUpperCase(Locale.US)); } catch (IllegalArgumentException e) { diff --git a/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java b/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java index ae466ca06f..ac0a27037e 100644 --- a/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java +++ b/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java @@ -12,6 +12,7 @@ import net.irisshaders.iris.texture.format.TextureFormat; import net.irisshaders.iris.texture.format.TextureFormatLoader; import net.minecraft.Util; +import org.jetbrains.annotations.Nullable; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20C; import org.lwjgl.opengl.GL30C; @@ -43,13 +44,14 @@ public static ImmutableList createStandardEnvironmentDefines() { ArrayList standardDefines = new ArrayList<>(); define(standardDefines, "MC_VERSION", getMcVersion()); + define(standardDefines, "IRIS_VERSION", getFormattedIrisVersion()); define(standardDefines, "MC_GL_VERSION", getGlVersion(GL20C.GL_VERSION)); define(standardDefines, "MC_GLSL_VERSION", getGlVersion(GL20C.GL_SHADING_LANGUAGE_VERSION)); define(standardDefines, getOsString()); define(standardDefines, getVendor()); define(standardDefines, getRenderer()); define(standardDefines, "IS_IRIS"); - define(standardDefines, "IRIS_TAG_SUPPORT"); + define(standardDefines, "IRIS_TAG_SUPPORT", "2"); if (FabricLoader.getInstance().isModLoaded("distanthorizons") && DHCompat.hasRenderingEnabled()) { @@ -103,6 +105,7 @@ public static ImmutableList createStandardEnvironmentDefines() { return ImmutableList.copyOf(standardDefines); } + /** * Gets the current mc version String in a 5 digit format * @@ -111,36 +114,78 @@ public static ImmutableList createStandardEnvironmentDefines() { */ public static String getMcVersion() { String version = Iris.getReleaseTarget(); - if (version == null) { - throw new IllegalStateException("Could not get the current minecraft version!"); + throw new IllegalStateException("Could not get the current Minecraft version!"); } - - String[] splitVersion = version.split("\\."); - - if (splitVersion.length < 2) { + String formattedVersion = formatVersionString(version); + if (formattedVersion == null) { Iris.logger.error("Could not parse game version \"" + version + "\""); - splitVersion = Iris.getBackupVersionNumber().split("\\."); + } else { + return formattedVersion; + } + String backupVersion = Iris.getBackupVersionNumber(); + String formattedBackupVersion = formatVersionString(backupVersion); + if (formattedBackupVersion == null) { + throw new IllegalArgumentException("Could not parse backup game version \"" + version + "\""); + } else { + return formattedBackupVersion; } + } - String major = splitVersion[0]; - String minor = splitVersion[1]; - String bugfix; - if (splitVersion.length < 3) { - bugfix = "00"; + /** + * Gets the current Iris version String in a 5 digit format + * + * @return The Iris version string + * + */ + public static String getFormattedIrisVersion() { + String rawVersion = Iris.getVersion(); + if (rawVersion == null) { + throw new IllegalArgumentException("Could not get current Iris version!"); + } + Matcher matcher = SEMVER_PATTERN.matcher(rawVersion); + if (!matcher.matches()) { + throw new IllegalArgumentException("Could not parse semantic Iris version from \"" + rawVersion + "\""); + } + String major = matcher.group("major"); + String minor = matcher.group("minor"); + String bugFix = matcher.group("bugfix"); + if (bugFix == null) { + bugFix = "0"; + } + if (major == null || minor == null) { + throw new IllegalArgumentException("Could not parse semantic Iris version from \"" + rawVersion + "\""); + } + String irisSemver = "%s.%s.%s".formatted(major, minor, bugFix); + String formattedSemver = formatVersionString(irisSemver); + if (formattedSemver == null) { + throw new IllegalArgumentException("Could not get a valid semantic version string for Iris version \"" + irisSemver + "\""); } else { - bugfix = splitVersion[2]; + return formattedSemver; } + } - if (minor.length() == 1) { - minor = 0 + minor; + /** + * + * Formats a semver string into a 122 format + * + * @param version The string version to format + * @return the formatted version in a 122 format, or null if the string is not a valid semver string. + */ + @Nullable + public static String formatVersionString(String version) { + String[] splitVersion = version.split("\\."); + if (splitVersion.length < 2) { + return null; } - if (bugfix.length() == 1) { - bugfix = 0 + bugfix; + String major = splitVersion[0]; + String minor = splitVersion[1].length() == 1 ? 0 + splitVersion[1] : splitVersion[1]; + String bugFix = splitVersion.length < 3 ? "00" : splitVersion[2]; + if (bugFix.length() == 1) { + bugFix = 0 + bugFix; } - - return major + minor + bugfix; + return major + minor + bugFix; } /** @@ -258,6 +303,8 @@ public static String getRenderer() { return "MC_GL_RENDERER_QUADRO"; } else if (renderer.startsWith("mesa")) { return "MC_GL_RENDERER_MESA"; + } else if (renderer.startsWith("apple")) { + return "MC_GL_RENDERER_APPLE"; } return "MC_GL_RENDERER_OTHER"; } diff --git a/src/main/java/net/irisshaders/iris/parsing/IrisFunctions.java b/src/main/java/net/irisshaders/iris/parsing/IrisFunctions.java index 380ab557c5..9dcb6317fd 100644 --- a/src/main/java/net/irisshaders/iris/parsing/IrisFunctions.java +++ b/src/main/java/net/irisshaders/iris/parsing/IrisFunctions.java @@ -23,6 +23,7 @@ import kroppeb.stareval.function.TypedFunction.Parameter; import kroppeb.stareval.function.V2FFunction; import kroppeb.stareval.function.V2IFunction; +import net.irisshaders.iris.Iris; import org.joml.Matrix4f; import org.joml.Vector2f; import org.joml.Vector2i; @@ -493,20 +494,6 @@ public void evaluateTo(Expression[] params, FunctionContext context, FunctionRet } }); } - - for (Type type : VectorType.AllVectorTypes) { - add("if", new AbstractTypedFunction(type, new Type[]{Type.Boolean, type, type}) { - @Override - public void evaluateTo(Expression[] params, FunctionContext context, FunctionReturn functionReturn) { - params[0].evaluateTo(context, functionReturn); - - params[ - functionReturn.booleanReturn ? 1 : 2 - ].evaluateTo(context, functionReturn); - - } - }); - } } } } diff --git a/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java b/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java index d2d6004ab1..627cec6b83 100644 --- a/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java +++ b/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java @@ -850,7 +850,7 @@ public void beginLevelRendering() { if (!initializedBlockIds) { WorldRenderingSettings.INSTANCE.setBlockStateIds( - BlockMaterialMapping.createBlockStateIdMap(pack.getIdMap().getBlockProperties())); + BlockMaterialMapping.createBlockStateIdMap(pack.getIdMap().getBlockProperties(), pack.getIdMap().getTagEntries())); WorldRenderingSettings.INSTANCE.setBlockTypeIds(BlockMaterialMapping.createBlockTypeMap(pack.getIdMap().getBlockRenderTypeMap())); Minecraft.getInstance().levelRenderer.allChanged(); initializedBlockIds = true; @@ -1001,7 +1001,7 @@ public void beginLevelRendering() { // A lot of dimension mods touch sky rendering, FabricSkyboxes injects at HEAD and cancels, etc. DimensionSpecialEffects.SkyType skyType = Minecraft.getInstance().level.effects().skyType(); - if (skyType == DimensionSpecialEffects.SkyType.NORMAL) { + if (skyType == DimensionSpecialEffects.SkyType.NORMAL || Minecraft.getInstance().level.dimensionType().hasSkyLight()) { RenderSystem.depthMask(false); RenderSystem.setShaderColor(fogColor.x, fogColor.y, fogColor.z, fogColor.w); diff --git a/src/main/java/net/irisshaders/iris/shaderpack/IdMap.java b/src/main/java/net/irisshaders/iris/shaderpack/IdMap.java index b51a96127e..6a65da5ea7 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/IdMap.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/IdMap.java @@ -1,9 +1,6 @@ package net.irisshaders.iris.shaderpack; import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntFunction; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMaps; @@ -18,6 +15,7 @@ import net.irisshaders.iris.shaderpack.materialmap.Entry; import net.irisshaders.iris.shaderpack.materialmap.LegacyIdMap; import net.irisshaders.iris.shaderpack.materialmap.NamespacedId; +import net.irisshaders.iris.shaderpack.materialmap.TagEntry; import net.irisshaders.iris.shaderpack.option.OrderBackedProperties; import net.irisshaders.iris.shaderpack.option.ShaderPackOptions; import net.irisshaders.iris.shaderpack.preprocessor.PropertiesPreprocessor; @@ -56,7 +54,12 @@ public class IdMap { /** * Maps block states to block ids defined in block.properties */ - private Int2ObjectLinkedOpenHashMap> blockPropertiesMap; + private Int2ObjectLinkedOpenHashMap> blockPropertiesMap; + + /** + * Maps tags to block ids defined in block.properties + */ + private Int2ObjectLinkedOpenHashMap> blockTagMap; /** * A set of render type overrides for specific blocks. Allows shader packs to move blocks to different render types. @@ -69,9 +72,10 @@ public class IdMap { entityIdMap = loadProperties(shaderPath, "entity.properties", shaderPackOptions, environmentDefines) .map(IdMap::parseEntityIdMap).orElse(Object2IntMaps.emptyMap()); + blockTagMap = new Int2ObjectLinkedOpenHashMap<>(); loadProperties(shaderPath, "block.properties", shaderPackOptions, environmentDefines).ifPresent(blockProperties -> { - blockPropertiesMap = parseBlockMap(blockProperties, "block.", "block.properties"); + blockPropertiesMap = parseBlockMap(blockProperties, "block.", "block.properties", blockTagMap); blockRenderTypeMap = parseRenderTypeMap(blockProperties, "layer.", "block.properties"); }); @@ -193,8 +197,9 @@ private static Object2IntMap parseIdMap(Properties properties, Str return Object2IntMaps.unmodifiable(idMap); } - private static Int2ObjectLinkedOpenHashMap> parseBlockMap(Properties properties, String keyPrefix, String fileName) { - Int2ObjectLinkedOpenHashMap> entriesById = new Int2ObjectLinkedOpenHashMap<>(); + private static Int2ObjectLinkedOpenHashMap> parseBlockMap(Properties properties, String keyPrefix, String fileName, Int2ObjectLinkedOpenHashMap> blockTagMap) { + Int2ObjectLinkedOpenHashMap> blockEntriesById = new Int2ObjectLinkedOpenHashMap<>(); + Int2ObjectLinkedOpenHashMap> tagEntriesById = new Int2ObjectLinkedOpenHashMap<>(); properties.forEach((keyObject, valueObject) -> { String key = (String) keyObject; @@ -215,7 +220,8 @@ private static Int2ObjectLinkedOpenHashMap> parseBlockMap(Properties return; } - List entries = new ArrayList<>(); + List blockEntries = new ArrayList<>(); + List tagEntries = new ArrayList<>(); // Split on whitespace groups, not just single spaces for (String part : value.split("\\s+")) { @@ -224,22 +230,29 @@ private static Int2ObjectLinkedOpenHashMap> parseBlockMap(Properties } try { - entries.add(BlockEntry.parse(part)); + Entry entry = BlockEntry.parse(part); + if (entry instanceof BlockEntry be) { + blockEntries.add(be); + } else if (entry instanceof TagEntry te) { + tagEntries.add(te); + } } catch (Exception e) { Iris.logger.warn("Unexpected error while parsing an entry from " + fileName + " for the key " + key + ":", e); } } - entriesById.put(intId, Collections.unmodifiableList(entries)); + blockEntriesById.put(intId, Collections.unmodifiableList(blockEntries)); + tagEntriesById.put(intId, Collections.unmodifiableList(tagEntries)); }); - return entriesById; + blockTagMap.putAll(tagEntriesById); + + return blockEntriesById; } /** * Parses a render layer map. *

- * This feature is used by Chocapic v9 and Wisdom Shaders. Otherwise, it is a rarely-used feature. */ private static Map parseRenderTypeMap(Properties properties, String keyPrefix, String fileName) { Map overrides = new HashMap<>(); @@ -264,6 +277,10 @@ private static Map parseRenderTypeMap(Properties } for (String part : value.split("\\s+")) { + if (part.startsWith("%")) { + Iris.logger.fatal("Cannot use a tag in the render type map: " + key + " = " + value); + continue; + } // Note: NamespacedId performs no validation on the content. That will need to be done by whatever is // converting these things to ResourceLocations. overrides.put(new NamespacedId(part), renderType); @@ -296,10 +313,14 @@ private static Map parseDimensionMap(Properties properties return overrides; } - public Int2ObjectLinkedOpenHashMap> getBlockProperties() { + public Int2ObjectLinkedOpenHashMap> getBlockProperties() { return blockPropertiesMap; } + public Int2ObjectLinkedOpenHashMap> getTagEntries() { + return blockTagMap; + } + public Object2IntFunction getItemIdMap() { return itemIdMap; } @@ -327,11 +348,12 @@ public boolean equals(Object o) { return Objects.equals(itemIdMap, idMap.itemIdMap) && Objects.equals(entityIdMap, idMap.entityIdMap) && Objects.equals(blockPropertiesMap, idMap.blockPropertiesMap) + && Objects.equals(blockTagMap, idMap.blockTagMap) && Objects.equals(blockRenderTypeMap, idMap.blockRenderTypeMap); } @Override public int hashCode() { - return Objects.hash(itemIdMap, entityIdMap, blockPropertiesMap, blockRenderTypeMap); + return Objects.hash(itemIdMap, entityIdMap, blockPropertiesMap, blockTagMap, blockRenderTypeMap); } } diff --git a/src/main/java/net/irisshaders/iris/shaderpack/IrisDefines.java b/src/main/java/net/irisshaders/iris/shaderpack/IrisDefines.java index 83fc306ee3..9eaa3beaef 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/IrisDefines.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/IrisDefines.java @@ -32,6 +32,10 @@ public static ImmutableList createIrisReplacements() { define(s, "CAT_" + categories[i].name().toUpperCase(Locale.ROOT), String.valueOf(i)); } + define(s, "PPT_NONE", "0"); + define(s, "PPT_RAIN", "1"); + define(s, "PPT_SNOW", "2"); + return ImmutableList.copyOf(s); } } diff --git a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java index 5c9e5b7ec2..9fc7061e05 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java @@ -24,16 +24,18 @@ import java.util.Map; public class BlockMaterialMapping { - public static Object2IntMap createBlockStateIdMap(Int2ObjectLinkedOpenHashMap> blockPropertiesMap) { + public static Object2IntMap createBlockStateIdMap(Int2ObjectLinkedOpenHashMap> blockPropertiesMap, Int2ObjectLinkedOpenHashMap> tagPropertiesMap) { Object2IntMap blockStateIds = new Object2IntLinkedOpenHashMap<>(); blockPropertiesMap.forEach((intId, entries) -> { - for (Entry entry : entries) { - if (entry instanceof BlockEntry blockEntry) { - addBlockStates(blockEntry, blockStateIds, intId); - } else if (entry instanceof TagEntry tagEntry) { - addTag(tagEntry, blockStateIds, intId); - } + for (BlockEntry entry : entries) { + addBlockStates(entry, blockStateIds, intId); + } + }); + + tagPropertiesMap.forEach((intId, entries) -> { + for (TagEntry entry : entries) { + addTag(entry, blockStateIds, intId); } }); diff --git a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/LegacyIdMap.java b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/LegacyIdMap.java index 9f0c54af01..b91b7116fb 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/LegacyIdMap.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/LegacyIdMap.java @@ -18,7 +18,7 @@ public class LegacyIdMap { private static final ImmutableList WOOD_TYPES = ImmutableList.of("oak", "birch", "jungle", "spruce", "acacia", "dark_oak"); - public static void addLegacyValues(Int2ObjectLinkedOpenHashMap> blockIdMap) { + public static void addLegacyValues(Int2ObjectLinkedOpenHashMap> blockIdMap) { add(blockIdMap, 1, block("stone"), block("granite"), block("diorite"), block("andesite")); add(blockIdMap, 2, block("grass_block")); add(blockIdMap, 4, block("cobblestone")); @@ -81,8 +81,8 @@ private static BlockEntry block(String name) { return new BlockEntry(new NamespacedId("minecraft", name), Collections.emptyMap()); } - private static void addMany(Int2ObjectLinkedOpenHashMap> blockIdMap, int id, List prefixes, Function toId) { - List entries = new ArrayList<>(); + private static void addMany(Int2ObjectLinkedOpenHashMap> blockIdMap, int id, List prefixes, Function toId) { + List entries = new ArrayList<>(); for (String prefix : prefixes) { entries.add(toId.apply(prefix)); @@ -91,7 +91,7 @@ private static void addMany(Int2ObjectLinkedOpenHashMap> blockIdMap, blockIdMap.put(id, entries); } - private static void add(Int2ObjectMap> blockIdMap, int id, BlockEntry... entries) { + private static void add(Int2ObjectMap> blockIdMap, int id, BlockEntry... entries) { blockIdMap.put(id, Arrays.asList(entries)); } } diff --git a/src/main/java/net/irisshaders/iris/shaderpack/programs/ProgramSet.java b/src/main/java/net/irisshaders/iris/shaderpack/programs/ProgramSet.java index 47760a49e7..3b705822a8 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/programs/ProgramSet.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/programs/ProgramSet.java @@ -6,7 +6,6 @@ import net.irisshaders.iris.shaderpack.ShaderPack; import net.irisshaders.iris.shaderpack.include.AbsolutePackPath; import net.irisshaders.iris.shaderpack.loading.ProgramArrayId; -import net.irisshaders.iris.shaderpack.loading.ProgramGroup; import net.irisshaders.iris.shaderpack.loading.ProgramId; import net.irisshaders.iris.shaderpack.parsing.ComputeDirectiveParser; import net.irisshaders.iris.shaderpack.parsing.ConstDirectiveParser; @@ -22,7 +21,6 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; -import java.util.stream.Collectors; public class ProgramSet implements ProgramSetInterface { private final PackDirectives packDirectives; @@ -53,7 +51,7 @@ public ProgramSet(AbsolutePackPath directory, Function // // - https://github.com/IrisShaders/Iris/issues/483 // - https://github.com/IrisShaders/Iris/issues/987 - boolean readTesselation = pack.hasFeature(FeatureFlags.TESSELATION_SHADERS); + boolean readTesselation = pack.hasFeature(FeatureFlags.TESSELLATION_SHADERS); this.shadowCompute = readComputeArray(directory, sourceProvider, "shadow", shaderProperties); this.setup = readProgramArray(directory, sourceProvider, "setup", shaderProperties); @@ -193,9 +191,9 @@ private void locateDirectives() { List programs = new ArrayList<>(); List computes = new ArrayList<>(); - for (ProgramSource[] sources : compositePrograms.values()) { - programs.addAll(Arrays.asList(sources)); - } + programs.addAll(Arrays.asList(getComposite(ProgramArrayId.ShadowComposite))); + programs.addAll(Arrays.asList(getComposite(ProgramArrayId.Begin))); + programs.addAll(Arrays.asList(getComposite(ProgramArrayId.Prepare))); for (ComputeSource[][] sources : computePrograms.values()) { for (ComputeSource[] source : sources) { @@ -211,6 +209,9 @@ private void locateDirectives() { } } + programs.addAll(Arrays.asList(getComposite(ProgramArrayId.Deferred))); + programs.addAll(Arrays.asList(getComposite(ProgramArrayId.Composite))); + Collections.addAll(computes, finalCompute); Collections.addAll(computes, shadowCompute);