Auto disable shaders on load failure

This commit is contained in:
mcrcortex
2025-09-14 19:42:22 +10:00
parent 465a55a77e
commit b86546a178
3 changed files with 26 additions and 3 deletions

View File

@@ -7,6 +7,7 @@ import me.cortex.voxy.client.core.util.IrisUtil;
import me.cortex.voxy.client.iris.IGetIrisVoxyPipelineData; import me.cortex.voxy.client.iris.IGetIrisVoxyPipelineData;
import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.Logger;
import net.irisshaders.iris.Iris; import net.irisshaders.iris.Iris;
import net.irisshaders.iris.api.v0.IrisApi;
import java.util.function.BooleanSupplier; import java.util.function.BooleanSupplier;
@@ -34,7 +35,13 @@ public class RenderPipelineFactory {
return null; return null;
} }
Logger.info("Creating voxy iris render pipeline"); Logger.info("Creating voxy iris render pipeline");
try {
return new IrisVoxyRenderPipeline(pipeData, nodeManager, nodeCleaner, traversal, frexSupplier); return new IrisVoxyRenderPipeline(pipeData, nodeManager, nodeCleaner, traversal, frexSupplier);
} catch (Exception e) {
Logger.error("Failed to create iris render pipeline", e);
IrisApi.getInstance().getConfig().setShadersEnabledAndApply(false);
return null;
}
} }
return null; return null;
} }

View File

@@ -8,6 +8,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.Logger;
import net.irisshaders.iris.api.v0.IrisApi;
import net.irisshaders.iris.shaderpack.ShaderPack; import net.irisshaders.iris.shaderpack.ShaderPack;
import net.irisshaders.iris.shaderpack.include.AbsolutePackPath; import net.irisshaders.iris.shaderpack.include.AbsolutePackPath;
@@ -314,12 +315,14 @@ public class IrisShaderPatch {
} catch (Exception e) { } catch (Exception e) {
patchData = null; patchData = null;
Logger.error("Failed to parse patch data gson",e); Logger.error("Failed to parse patch data gson",e);
IrisApi.getInstance().getConfig().setShadersEnabledAndApply(false);//Disable shaders
} }
if (patchData == null) { if (patchData == null) {
return null; return null;
} }
if (patchData.version != VERSION) { if (patchData.version != VERSION) {
Logger.error("Shader has voxy patch data, but patch version is incorrect. expected " + VERSION + " got "+patchData.version); Logger.error("Shader has voxy patch data, but patch version is incorrect. expected " + VERSION + " got "+patchData.version);
IrisApi.getInstance().getConfig().setShadersEnabledAndApply(false);//Disable shaders
return null; return null;
} }
return new IrisShaderPatch(patchData, ipack); return new IrisShaderPatch(patchData, ipack);

View File

@@ -15,8 +15,8 @@ public class AllocationArena {
private static final int SIZE_BITS = 64 - ADDR_BITS; private static final int SIZE_BITS = 64 - ADDR_BITS;
private static final long SIZE_MSK = (1L<<SIZE_BITS)-1; private static final long SIZE_MSK = (1L<<SIZE_BITS)-1;
private static final long ADDR_MSK = (1L<<ADDR_BITS)-1; private static final long ADDR_MSK = (1L<<ADDR_BITS)-1;
private final LongRBTreeSet FREE = new LongRBTreeSet();//Size Address private final LongRBTreeSet FREE = new LongRBTreeSet(Long::compareUnsigned);//Size Address
private final LongRBTreeSet TAKEN = new LongRBTreeSet();//Address Size private final LongRBTreeSet TAKEN = new LongRBTreeSet(Long::compareUnsigned);//Address Size
private long sizeLimit = Long.MAX_VALUE; private long sizeLimit = Long.MAX_VALUE;
private long totalSize; private long totalSize;
@@ -41,6 +41,19 @@ public class AllocationArena {
public long getSize() { public long getSize() {
return this.totalSize; return this.totalSize;
} }
public int numFreeBlocks() {
return this.FREE.size();
}
public int getLargestFreeBlockSize(int index) {
var iter = this.FREE.tailSet(-1).iterator();
for (;index>0&&iter.hasPrevious();index--){iter.previousLong();}
long slot = iter.previousLong();
return (int) (slot>>ADDR_BITS);
}
/* /*
public long allocFromLargest(int size) {//Allocates from the largest avalible block, this is useful for expanding later on public long allocFromLargest(int size) {//Allocates from the largest avalible block, this is useful for expanding later on