Shader pack status¶
What each real Iris or OptiFine shader pack does in Goanna's screen space
chain (deferred*, composite*, final), pack by pack. How the checks are
run is in Shader pack testing; why the chain alone
cannot show any of these packs as its author intended is in the
survey of popular shader packs.
What was run, 2026-10-11¶
Only the offline compile check. Every result below comes from
tools/test/shaderpack_compile.py at commit 3f158ab4 on the branch that
added it: Goanna's own loader read each pack (shaders.properties
conditionals, options, program toggles, custom uniforms), the translator
produced the Vulkan GLSL the effect would hand Godot 4.5.1, and
glslangValidator (conda-forge build, target vulkan1.1) compiled each
stage. Godot itself compiled nothing, no pipeline was created, and nothing
was drawn.
No pack had been run live on that date. A render service job for each pack against a local Mineclonia server was queued twice. The first waited two hours for the GPU lock, which another session's client held, and timed out. The second, on lavapipe, had just started when the machine rebooted. That survey produced no frame, GPU compile or pipeline result for any pack, and the "Live" column says not run. The proof pack's last live pass is the one in Shader pack testing.
Since then, from 2026-10-11 to 2026-10-13, four chains have run on the GPU with their geometry programs: Eclipse (3 of 3 passes compiled), Mellow (9 of 9), MakeUp (5 of 5) and Photon (15 of 20 at first, the five with struct varyings failing as below; 20 of 20 since 2026-10-13). The "Live" column is still the offline day's; what those frames showed is under "The geometry programs".
Pack versions are the releases named in the survey's table, downloaded from Modrinth (Chocapic13 from CurseForge). None is in the repository.
The table¶
"Passes" counts the chain after program.*.enabled has been evaluated
against the pack's default options; "Off" lists the programs that switched
off. "Reads zero" lists uniforms a pass declares that neither the standard
block, a custom uniform nor the effect supplies.
| Pack | Passes compiling offline | Off by program.*.enabled |
Refused | Reads zero | Live |
|---|---|---|---|---|---|
| Proof pack (ours) | 2 of 2 | none | no | none | not run this time |
| Base-Shader 3.0 | 0 of 0: no screen space programs | none | no | none | not run |
| Eclipse 1.0 | 3 of 3 | none | no | none | not run |
| BSL 10.1.8 | 9 of 9 | composite2, composite3 | no | cloudHeight, endFlashIntensity, endFlashPosition |
not run |
| Complementary Reimagined r5.9.3 | 9 of 9 | none | no | cameraPositionInt and Fract (and previous), cloudHeight, heavyFog, isElytraFlying, is_invisible, velocity |
not run |
| Complementary Unbound r5.9.3 | 9 of 9 | none | no | as Reimagined | not run |
| Sildur's Vibrant 2.02 Extreme | 6 of 6 | none | no | isNether |
not run |
| Sildur's Enhanced Default 1.20 Fancy | 3 of 3 | none | no | none | not run |
| MakeUp Ultra Fast 9.5g | 5 of 5 | none | no | none | not run |
| Super Duper Vanilla 1.3.8 | 11 of 11 | none | no | none | not run |
| Mellow 3.4.1a | 9 of 9 | deferred, composite9 to 13 | no | the dh* and vx* matrices, endFlash* |
not run |
| Miniature 2.19 | 1 of 1 | none | no | none | not run |
| Chocapic13 V9.1 Extreme beta 5 | 15 of 15 | composite7 | no | none | not run |
| Insanity 1.650 | 6 of 6 | deferred, composite1 to 3, composite6 | no | none | not run |
| Solas 3.7b | 9 of 9 | none | no | dhRenderDistance, vxRenderDistance |
not run |
| Bliss 2.1.2 | 16 of 16 | deferred2, composite5 | no | the dh* matrices, farPlane, Moon_Weather_properties |
not run |
| Nostalgia 5.1 | 19 of 19 | deferred3 to 9, composite | no | skyCaptureResolution |
not run |
| Kappa 5.3 | 28 of 28 | composite1 | no | none | not run |
| AstraLex 93.0 | 12 of 12 | composite3, 8, 9, 10, 14 | no | none | not run |
| Photon v1.3b | 20 of 20 (15 before 2026-10-13) | composite2, 3, 15, 17 | no | clouds_offset |
not run |
| Noble 1.9.9 | 32 of 33 | none | yes: SSBO, COMPUTE_SHADERS |
gbufferPreviousModelViewInverse |
not run |
| Rethinking Voxels r0.1-beta9 | 6 of 8 | composite2 | yes: CUSTOM_IMAGES, SSBO, COMPUTE_SHADERS |
several | not run |
| Shrimple v0.12 | 21 of 28 | deferred14, composite10, 16, 41, 42 | yes: COMPUTE_SHADERS, CUSTOM_IMAGES |
several | not run |
Notes on the rows that are not clean:
- Photon: five passes declare varyings of struct type
(
flat out CloudsParameters clouds_params;), which the translator moved to its prelude, ahead of the struct definition. Since 2026-10-13 such a varying stays where the pack wrote it, and with a sampler alias fault fixed too all 20 compile offline (glslang 16.6.0, commitcf723467) and on the GPU. - Noble, Rethinking Voxels, Shrimple are refused at load, as Iris refuses them on a loader without those features, so their compile failures (SSBO blocks, custom images) do not matter yet.
- Solas turns its voxel path on by default without testing for the
Iris feature macros, so it reads
floodfillSampler, a custom image Goanna binds to black. TurningVX_SUPPORToff withGOANNA_SHADERPACK_OPTIONSshould give its ordinary path; untried. - Eclipse reads
specular, which only its gbuffers programs would write, and gets black.
What the offline check found and fixed¶
Before these fixes, on the same packs, BSL compiled 7 of 9 passes, Complementary 0 of 9, Super Duper Vanilla 1 of 11, Chocapic13 5 of 15, Bliss 7 of 16, Nostalgia 13 of 19, Kappa 21 of 28, Miniature 0 of 1 and Eclipse 2 of 3. The causes, each fixed where it arose:
- Declarations from a pack's
#ifdef FSHbranch were lifted into the vertex stage and collided with its own. The loader now resolves each program's conditionals per stage, ignoring directives inside/* */comments (Nostalgia and Kappa switch blocks off that way). - Names GLSL 4.50 or Vulkan reserve (
sample,sampler, and the 4.30 storage words), and pack functions named like newer builtins (roundin a GLSL 1.20 pack,fmain a 3.30 one). - A pack global named like a standard uniform (
fogDensity), or a vertex global named like a uniform only the fragment stage declares (Chocapic13'ssunVec). gl_Fog,shadow2Dreturning avec4,texelFetch2D.- Unlocated fragment outputs all sent to location 0, varyings a pack had
located itself,
mat4x3varyings counted as one location, and a secondRENDERTARGETSlosing to the first.
What needs the gbuffers rungs¶
Every pack above except Base-Shader feeds its chain from targets its
gbuffers_* programs write: normals, material IDs, the lightmap, a water
mask. Without those programs the chain runs over Godot's lit colour and
empty targets, so even a pack that compiles cleanly here is not expected to
look right; four (MakeUp, Chocapic13, Sildur's Vibrant, Super Duper
Vanilla) do not even keep their main colour in colortex0. A real shadow
map is the same: 17 of these packs read shadowtex in the chain, and the
map has to come from the pack's own translated shadow program, which a
compositor effect cannot run. Rungs 5 to 7 now draw the geometry
programs, their second outputs and the near terrain's shadow map (below),
but each has been looked at with few packs, so judge a pack here first by
whether it loads, compiles and runs.
Until commit 0fce1c1b (2026-10-13) the chain also gave every pack a wrong
projection: Godot's own, with its depth already in Vulkan's reversed
[0, 1], so near and far read -0.05 and every position rebuilt from
depth was wrong. Any chain result in the table above that depends on depth
(fog, ambient occlusion, reflections) was taken with that fault.
The geometry programs¶
What GoannaIrisGbuffers does with each pack's gbuffers_terrain,
gbuffers_terrain_cutout, gbuffers_water and the foliage surface (the
cut-out program on leaves and plants), with Godot 4.5.1. "Front end" is
tests/iris_gbuffers.gd with GOANNA_IRIS_PACK, on 2026-10-12 at commit
e6c842a1: all four translate and Godot's shader front end accepts them,
headless, with no GPU. "Second outputs" lists the colortex targets the
programs write besides colortex0 (terrain; water where it differs),
each of which the chain reads and so gets a camera of its own (see
docs/design/iris-compat.md, "Second outputs"). "GPU" is a frame through
tools/goanna-render on the RTX 3090 (Luanti 5.17.0, Mineclonia release
38561); the run details and what each frame showed are in
docs/design/iris-compat.md, "What was observed".
| Pack | Terrain program | Front end | Second outputs | GPU |
|---|---|---|---|---|
| Base-Shader 3.0 | gbuffers_terrain |
all four | none | drawn, near and far, in its flat vanilla look |
| Eclipse 1.0 | gbuffers_textured_lit |
all four | 1, 4, 6 (water: 1, 3, 4) | drawn by day, near and far; water blue, rippled and reflecting; land under its thick fog |
| Mellow 3.4.1a | gbuffers_terrain |
all four | none | drawn by day, near and far, under its own sky; the haze was the chain's projection |
| Photon v1.3b | gbuffers_terrain |
all four | 1, its only output (water: 3, 13) | 20 of 20 chain passes; land lit in its own palette under its haze, water near black, ice not shown (was magenta, 5 of 20 failing) |
| BSL 10.1.8 | gbuffers_terrain |
all four | none (water: 1) | not run |
| Complementary Reimagined r5.9.3 | gbuffers_terrain |
all four | 4, 6 (water: 3) | not run |
| MakeUp Ultra Fast 9.5g | gbuffers_terrain |
all four | 1, its only output | drawn, 5 of 5 chain passes; dark, fogging to black, water black: its geometry programs read colortex Goanna cannot give them (was black, too many varyings) |
On 2026-10-13 the front end passed again for all seven packs above at
e3848de3, and for Photon, Eclipse and Base-Shader at c0ecc01d, with
the varyings packed (docs/design/iris-compat.md, "The
gbuffers translator, as built"); the most any translated program now
declares is 15, MakeUp's water. Its terrain had 21, which Godot counts
as 33 with its own on a real backend, over the limit of 32.
Miniature and Sildur's Enhanced Default passed the front end on 2026-10-11, before a reboot and before the later translator changes, and were not run again.
The shadow map¶
A pack's own shadow map (rung 7, docs/design/iris-compat.md, "The shadow
map, as built") exists since 2026-10-12: its shadow program draws the near
terrain into a map at its shadowMapResolution, which the gbuffers programs
and the chain then read. Of the packs above only Eclipse has been run with
it. Before that, every shadow lookup said lit.
| Pack | Shadow program | Front end | GPU |
|---|---|---|---|
| Eclipse 1.0 | shadow, 1024, distorted |
all three surfaces | the map is drawn, distortion and all; with SOFT_SHADOWS=false its teal shadows fall the right way from the stage's blocks and, on r1tod1, from the spruces and terraces; with its default soft shadows barely visible |
| Base-Shader 3.0 | none | none to translate | the pass is not made |
Run on the RTX 3090 with Luanti 5.17.0, Mineclonia release 38561 and Godot
4.5.1, with Eclipse's SSAO off; the frames are described in
docs/design/iris-compat.md, "What was observed".
Eclipse's soft shadows are faint by its own arithmetic, not ours: its
filter takes 5 by 5 samples (SHADOW_SAMPLES 2 either side) and divides by
(6 * SHADOW_SAMPLES + 1) squared, 169, so a point fully in shadow scores
0.15, and two later lighting terms that add inShadow brighten most of
that back. With its default options the shadowed and unshadowed frames of
the stage differ in fewer than 400 pixels at 1280 by 720.
Recovery checks, 13 October 2026¶
Recovered the additional camera and cloud inputs and the unfinished geometry texture reads from the input worktree. Native tests pass. The headless Godot 4.5.1 geometry checks and offline glslang chain checks pass for Eclipse, Mellow, MakeUp, BSL, Complementary Reimagined and Photon (3, 9, 5, 9, 9 and 20 chain passes respectively).
On the RTX 3090, Godot 4.5.1, a local Luanti 5.17.0 server and Mineclonia
release 38561, the recovered code initially produced a black MakeUp
frame and texture errors. The copies now use formats Texture2DRD can
bind. Initialising preserved targets and retaining their last written
ping pong side also corrected the history handling. With those changes,
MakeUp drew the lake, shoreline and reflected scenery on a copy of
r1tod1, at (0, 110, 0), pitch -45, yaw 210, FOV 70, 640 by 360. The
client log contained no shader errors. The background beyond the terrain
remained black; this is not full sky-program support. The render service's
quiet check timed out, so this is a visual observation, not a performance
measurement. Eclipse also drew the lake with blue water and reflections,
with its existing thick pale fog over the land and no shader errors.
The separate history proof produced (255, 0, 0) in every pixel on the
same server and renderer, confirming accumulation across frames. An
expanded GPU teardown fixture passed four create, resize and free cycles.
The live captures used the dirty recovery worktree based on 64e63506;
the capture library hash was 5bd38b2b22c68ae4. Software runs crashed in
Godot before a frame and provide no validation of these changes.
Geometry reads are still approximate: scene-copy detection is heuristic, other targets arrive a frame late, geometry custom textures are missing, and samplers passed through helper functions do not receive the direct call's coordinate conversion. Photon was compiled but not rendered again. See the design notes.
Native effect isolation, 13 October 2026¶
At the western coastal village, MakeUp Ultra Fast 9.5g drew a black sky
and pale water with Goanna's procedural grass disabled. Disabling native
clouds, cloud shadows, atmosphere, SSAO, SSR, bloom, shafts, SSIL and SDFGI
also left those faults visible. A separate capture removed the Godot sky
resource entirely and retained the black background. These runs used the
render service, an RTX 3090, Godot 4.5.1, Luanti 5.17.0 and Mineclonia
release 38561 on a copy of goanna_coastal_reference_20261013. Turning off
native effects alone does not provide the pack's missing sky programs.
Goanna now suppresses its extra procedural grass surfaces while a pack provides a terrain geometry program. That material does not write the pack's auxiliary targets. The requested grass setting is retained and restored when the pack is removed, including its antialiasing ownership. The headless Godot 4.5.1 regression checks existing near and far meshes, preference changes while suppressed and restoration after pack removal.
The automatic suppression also ran at the village on that server and renderer. The saved High preference remained enabled, suppression was active and grass antialiasing was inactive. The frame omitted Goanna's extra grass, but retained MakeUp's black sky, pale water and broken distant terrain. This validates isolation of that material, not complete MakeUp compatibility.
Coastal checkpoint follow-up, 13 October 2026¶
Three corrections address faults visible in the western village checkpoint:
- Geometry texture reads retain the pack's actual prepare/deferred output, including alpha. The former scene-copy heuristic replaced Complementary's cloud depth with native scene colour, affecting its water discard test.
- Fragment
prepareprograms run before deferred in the screen chain. Existing geometry pixels are restored over prepared backgrounds using depth. MakeUp's sky target is now populated. - Clear glass uses the pack's cut-out material path. Native lit glass colour must not be interpreted as Photon's packed material data.
On a local Luanti 5.17.0 server, Mineclonia release 38561, Godot 4.5.1 and RTX 3090, the corrected Complementary shore capture has a visible bay surface, and Photon's shore capture no longer has the red window artefacts. MakeUp's two western angles have a blue sky and blue water instead of the black background and pale water. Its water remains noisy and its terrain dark. Complementary still has water patches and overlapping cloud layers. These are visual observations, not full pack compatibility or performance claims. Geometry inputs still arrive one frame late; execution remains after Godot's translucent geometry.
Captures use the same copied coastal world, time 0.42, High profile,
1920 by 1080 resolution and requested ranges as the checkpoint. The
combined capture library is 717026c41d44f7a8, built from a dirty tree
based on 1971d4ae. Native tests, including prepare-pass ordering, pass.