From d1be49f474d3c01abed8093a0702ac0168d87456 Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Sat, 21 Jun 2025 20:55:53 +1000 Subject: [PATCH] massivly shrinked interstage attributes --- .../assets/voxy/shaders/lod/gl46/quads.frag | 24 ++++++----- .../assets/voxy/shaders/lod/gl46/quads2.vert | 40 +++++++++++-------- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag b/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag index afb4d58d..586485c5 100644 --- a/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag +++ b/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag @@ -13,27 +13,29 @@ layout(binding = 2) uniform sampler2D depthTex; layout(location = 0) in vec2 uv; layout(location = 1) in flat vec2 baseUV; -layout(location = 2) in flat vec4 tinting; -layout(location = 3) in flat vec4 addin; -layout(location = 4) in flat uint flags; -layout(location = 5) in flat vec4 conditionalTinting; -layout(location = 6) in flat vec2 quadSize; +layout(location = 2) in flat uvec4 interData; #ifdef DEBUG_RENDER layout(location = 7) in flat uint quadDebug; #endif layout(location = 0) out vec4 outColour; +vec4 uint2vec4RGBA(uint colour) { + return vec4((uvec4(colour)>>uvec4(24,16,8,0))&uvec4(0xFF))/255.0; +} + +//conditionalTinting.yzwx + vec4 computeColour(vec4 colour) { //Conditional tinting, TODO: FIXME: REPLACE WITH MASK OR SOMETHING, like encode data into the top bit of alpha - if ((flags&(1u<<2)) != 0 && abs(colour.r-colour.g) < 0.02f && abs(colour.g-colour.b) < 0.02f) { - colour *= conditionalTinting; + if ((interData.x&(1u<<2)) != 0 && abs(colour.r-colour.g) < 0.02f && abs(colour.g-colour.b) < 0.02f) { + colour *= uint2vec4RGBA(interData.w).yzwx; } - return (colour * tinting) + addin; + return (colour * uint2vec4RGBA(interData.y)) + uint2vec4RGBA(interData.z); } bool useMipmaps() { - return ((flags>>1)&1u)==0u; + return ((interData.x>>1)&1u)==0u; } void main() { @@ -51,7 +53,7 @@ void main() { colour = texture(blockModelAtlas, texPos, -5.0); } - if (any(notEqual(clamp(tile, vec2(0), quadSize), tile))) { + if (any(notEqual(clamp(tile, vec2(0), vec2((interData.x>>16)&0xFFu, (interData.x>>24)&0xFFu)), tile))) { discard; } @@ -62,7 +64,7 @@ void main() { //Also, small quad is really fking over the mipping level somehow - if ((flags&1u) == 1 && (texture(blockModelAtlas, texPos, -16.0).a <= 0.1f)) { + if ((interData.x&1u) == 1 && (texture(blockModelAtlas, texPos, -16.0).a <= 0.1f)) { //This is stupidly stupidly bad for divergence //TODO: FIXME, basicly what this do is sample the exact pixel (no lod) for discarding, this stops mipmapping fucking it over #ifndef DEBUG_RENDER diff --git a/src/main/resources/assets/voxy/shaders/lod/gl46/quads2.vert b/src/main/resources/assets/voxy/shaders/lod/gl46/quads2.vert index 1efe7ed2..2affd2fe 100644 --- a/src/main/resources/assets/voxy/shaders/lod/gl46/quads2.vert +++ b/src/main/resources/assets/voxy/shaders/lod/gl46/quads2.vert @@ -16,11 +16,22 @@ layout(location = 0) out vec2 uv; layout(location = 1) out flat vec2 baseUV; -layout(location = 2) out flat vec4 tinting; -layout(location = 3) out flat vec4 addin; -layout(location = 4) out flat uint flags; -layout(location = 5) out flat vec4 conditionalTinting; -layout(location = 6) out flat vec2 size; +layout(location = 2) out flat uvec4 interData; + +uint packVec4(vec4 vec) { + uvec4 vec_=uvec4(vec*255)<>ivec3(23); }*/ -vec4 uint2vec4RGBA(uint colour) { - return vec4((uvec4(colour)>>uvec4(24,16,8,0))&uvec4(0xFF))/255.0; -} - vec4 getFaceSize(uint faceData) { float EPSILON = 0.00005f; @@ -108,13 +115,11 @@ void main() { if (cornerIdx == 1) //Only if we are the provoking vertex { - size = vec2(quadSize-1); - vec2 modelUV = vec2(modelId&0xFFu, (modelId>>8)&0xFFu)*(1.0/(256.0)); baseUV = modelUV + (vec2(face>>1, face&1u) * (1.0/(vec2(3.0, 2.0)*256.0))); //Generate tinting and flag data - flags = faceHasAlphaCuttout(faceData); + uint flags = faceHasAlphaCuttout(faceData); //We need to have a conditional override based on if the model size is < a full face + quadSize > 1 flags |= uint(any(greaterThan(quadSize, ivec2(1)))) & faceHasAlphaCuttoutOverride(faceData); @@ -122,7 +127,7 @@ void main() { flags |= uint(!modelHasMipmaps(model))<<1; //Compute lighting - tinting = getLighting(extractLightId(quad)); + vec4 tinting = getLighting(extractLightId(quad)); //Apply model colour tinting uint tintColour = model.colourTint; @@ -130,13 +135,13 @@ void main() { tintColour = colourData[tintColour + extractBiomeId(quad)]; } - conditionalTinting = vec4(0); + uint conditionalTinting = 0; if (tintColour != uint(-1)) { flags |= 1u<<2; - conditionalTinting = uint2vec4RGBA(tintColour).yzwx; + conditionalTinting = tintColour; } - addin = vec4(0.0); + vec4 addin = vec4(0.0); if (!isTranslucent) { tinting.w = 0.0; //Encode the face, the lod level and @@ -159,6 +164,9 @@ void main() { tinting.xyz *= 0.5f; } } + + setSizeAndFlags(flags, quadSize); + setTinting(tinting, addin, conditionalTinting); }