Skip to content

Releases: avpbynf/Vitrail-Shaders

v0.8.1-beta

v0.8.1-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Aug 20:13

Changed

  • The link under an empty pack folder opens the CurseForge shader search. It used to open
    the shader page on Modrinth, where this mod is not published.

Fixed

  • The game no longer crashes when resources reload with a pack loaded. Moving
    Anisotropic Filtering or Texture Filtering under Video Settings, switching resource packs
    and pressing F3 + T all reload every resource, and any of them took a world with a
    shaderpack on straight to the crash screen, on "Pipeline is not valid".
    The sky is drawn first in the frame and was the piece that fell over, but nothing the pack
    draws was safe. The reload now costs what it always should have, a few frames while the
    programs compile again.

  • A pack swapped while the engine was still warming up could kill the worker that compiles
    the leftover programs ahead of their first draw. Those programs then paid for themselves
    at the first frame that needed them, which is a stutter where there had been none.

  • Mellow draws again. Since 0.7.5-beta the pack loaded, laid out its settings and then
    drew nothing at all, the game's own picture staying on screen. One of its fullscreen
    passes was refused at compile, and a pack one of whose passes does not compile draws
    nothing at all. What that pass builds its outline from is a number its own settings fix
    before anything is compiled, and the engine was treating it as one that could still
    change. Any pack that writes a constant that way was open to the same.

  • E-LITE compiles whole. Twenty of its programs were refused, because one value the
    engine supplies reached the shader a second time where the pack had already named it
    itself. A line that names several values at once is now read to its end, so nothing is
    supplied over a name the pack wrote.

  • A pack could come up with something wrong smeared across the picture, and stay that way
    until it was loaded again.
    Not a flicker and not a glitch that passes: a patch of colour
    or noise that is simply there, on a machine where it happens and never on the one next to
    it. What was behind it: the images a pack draws into are wiped once when they are built, at
    every pack load and again whenever the window changes size, and that wipe was ticked off
    the list the moment it was scheduled instead of when it happened. One frame that drew none
    of the pack lost it, and the seconds a pack spends compiling are exactly those frames. The
    images a pack carries from one frame to the next are never scheduled again after that, so
    they kept whatever the graphics driver had left lying in them.

v0.8.0-beta

v0.8.0-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Aug 09:46

Added

  • An FSR Render Scale slider under Video Settings, on the mod's page beside Max Shadow
    Distance. The world renders at the chosen fraction of the window, 25 to 100 percent, and the
    finished image is brought back to full size with AMD FidelityFX Super Resolution 1.0 before
    the interface is drawn, so menus, chat and the F3 screen stay sharp whatever the scale.
    Moving the slider takes effect immediately, the setting outlives whichever pack is chosen,
    and at 100 percent, or with shaders off, nothing changes at all.

  • A pack's coloured lighting runs. The storage images, storage buffers and shadow compute
    pass behind it are served, and IRIS_FEATURE_CUSTOM_IMAGES is announced, so the voxel
    lighting of Complementary's top profiles, Euphoria Patches' Colored Lighting among them,
    draws instead of switching itself off behind a red overlay: lamps and torches colour the
    world around them. A pack that requires custom images loads instead of being refused. And
    that light holds still as you move: the glow of ores and lava used to flicker at every block
    crossed, worst going up, a ring of dark on each jump and a shimmer in upward flight against
    nothing at all on the way down, with a placed torch never showing it only because the
    ordinary block light covers it over.

  • A crash during startup no longer takes the graphics backend with it. The game resets the
    preferred graphics API and the fullscreen mode after any startup that did not finish, whatever
    crashed, and nothing of this mod draws off Vulkan, so one crash used to cost a restart to set
    it back by hand. A selector under Video Settings picks what to come back to, Vulkan unless
    told otherwise.

  • A switch that puts the game's own wait back after every render pass. A pack's passes end on
    a wait naming what the next one reads and writes, rather than on the game's wait for the whole
    of memory. That is what makes the frame cheaper, and it is also the kind of thing a driver can
    honour by accident: a wrong image on one machine and a right one on another is exactly what a
    missing wait looks like. An empty file vitrail/full-pass-barrier in the instance, or
    -Dvitrail.fullPassBarrier=true, puts the wide wait back on both roads where one was traded
    away, the close of a pack's pass and the filling of a mip chain. Slower, and it cannot be the
    cause of anything, so an image that comes right with it has named the problem.

  • The log names the first full frame's GPU stops. One line per pack load, always on: how many
    render passes opened, how many textures were cleared and copied, then the labels, most frequent
    first. That is the number a Mac trace of queue submits is counting.

  • The F3 screen says what the shadow map cost. Two lines beside the version and the pack:
    how many world sections were drawn into the map out of how many are loaded, at what render
    distance, and what the walk for the light measured against. They are Iris's lines for the same
    thing, in the same shape, so a screenshot under one reads against a screenshot under the
    other, and nothing has to be switched on for them to appear.

Changed

  • Chloride is no longer required, on either loader. One thing was behind that requirement:
    NeoForge opens a loading window before the game exists, that window carries an OpenGL context,
    and the game takes it over instead of making one, so the Vulkan surface was asked for on a
    window built for OpenGL. Vitrail now refuses that window itself when the backend is Vulkan,
    takes it off FML's hands at the end of mod loading, and closes it once the game has drawn its
    first frame. Fabric opens no such window and never needed the help. Chloride remains worth
    installing, its settings are still read and reported, and running it alongside changes nothing.

  • The odd corners of a pack's properties read the way Iris reads them. An alphaTest., a
    texture.noise or a dimension.properties line written under a setting's #if now comes and
    goes with the setting, a world declared twice keeps the last declaration instead of the first,
    a page laid out twice keeps its last line instead of both, and a pack writing
    shadow.enabled=false gets what it asked for: nothing is ever drawn from the light. No known
    pack is changed by any of this today.

  • The settings screen reads a pack's layout the way Iris does. The * token now pours out
    every setting no other page names, where the pack put it; a pack without a screen= line gets
    one page holding everything instead of an empty one; and a name Iris refuses to configure, a
    constant off its closed list, a toggle nothing tests or a value without a list of choices,
    shows the same blank it shows there instead of becoming a slider or a toggle Iris never had.

  • Opening a pack's settings no longer applies it. Looking at another pack's pages used to
    load it first, on its own default profile, so opening a heavy pack to turn it down paid the
    heavy profile in full. The pages now open on the pack that was picked while the loaded one
    goes on drawing; Apply is the only thing that costs, and a profile chosen before applying is
    the one that lands.

  • The shadow walk no longer rotates Sodium's command ring a second time in the same frame.
    The lists still reset so the light does not append onto the camera's; the ring waits for the
    next camera walk. Same shadows.

  • A pack's frame opens fewer GPU stops. Clears ride as the first pass's load, leftover
    sampled-before-write clears share one empty pass per size, mip chains blit instead of drawing
    each level, consecutive geometry that writes the same images stays in one pass, ping-pong
    targets swap names instead of copying texels back, and our own passes end on a wait naming what
    the next one samples and what it writes, rather than on the game's wait for the whole of memory.
    Same picture. Written for the extra submits a Mac report was counting; whether the frame rate
    moves is still that machine's to measure.

  • The frame that rebuilds the pack's programs pays far fewer clears. A dimension change, a
    world join or a pack switch re-prepares every geometry program the scene draws, and each one
    rebuilt its own copy of the same one-texel constants, one standalone clear per texture: about
    ninety full GPU stops on that single frame, felt as the hitch at a portal. The constants are
    now built once and shared, and the same frame measures nine.

  • Pass uniforms reuse scratch matrices instead of allocating a model-view-projection and a
    normal matrix on every fill, Sodium region draws skip leftover sampled clears once nothing is
    still owed one, and the shadow sweep reuses its plane scratch. Same picture, same numbers.

  • Improved transparency is turned off while a pack draws, the same refusal Iris makes. That
    option opens a second colour target for translucent items, and every leftover feature that
    writes it is an Immediate draw this engine would otherwise keep as its own GPU stop.

  • Leftover Immediate draws and Distant Horizons' GenericObjectRenderer stay in the geometry
    pass already open
    , the way Iris leaves the default framebuffer bound. A leftover pass is
    never adopted: its viewport and scissor would be whoever opened it.

  • Geometry programs compile during the same warm-up as the chain, before the pack is drawn:
    families translate on a worker while composites compile, and the world waits until the
    composites and the terrain are in the device cache. From there the leftover families compile
    in the background, described under Fixed, and the pulsing mark in the corner carries the
    state from the held world to the last word of the closing show.

  • The wait for a pack skips the world, not the HUD. Several programs compile a frame instead
    of one, so the wait is not a two-frame-per-second vanilla picture of the same work.

Fixed

  • The freezes on first encounters are gone. A pack's programs for the entities, the sky, the
    clouds, the weather, the particles and the far terrain used to compile on the frame that first
    drew each of them: around half a second frozen per program on a cold driver cache, over a
    hundred programs on a big pack, spread across the first minutes of play and paid again behind
    every portal. They are now compiled in the background while you play, several families at
    once, and a frame only waits for a program it reached before the background did. While that
    work runs, the Vitrail mark pulses in the top-left corner of the screen with "Compiling
    shaders..." and the running count beside it, the way the autosave floppy used to blink; when
    the work ends, "Shaders compiled!" stands beside the mark for a moment and the corner fades
    back to the game. An empty file
    vitrail/keep-first-draw-compiles in the instance puts the old path back for a comparison.

  • A pack's shadow compute is no longer built when the pack switched it off. A pack turns
    whole programs on and off from its own settings, and the compute pass behind coloured lighting
    was read and handed to the compiler whichever way that setting stood. Switched off, the pack
    also takes away the colour tables and the image formats that pass reads, so what reached the
    compiler was not a shader at all and it was refused. The refusal came out as a warning, and
    there was nothing on screen to say a pass had been meant to run. BSL with its multicoloured
    blocklight off, Bliss, and both Complementary outside their coloured lighting profiles were all
    in that state.

  • A pack's storage images keep the words it wrote around them. Translation rebuilt those
    declarations from the type onwards and dropped writeonly, readonly, restrict and
    coherent on the way, whichever side of uniform the pack put them. On Vulkan the first of
    those is what makes an image with no declared format legal at all, and it is the one t...

Read more

v0.7.5-beta

v0.7.5-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Aug 03:06

Thanks to @DanielWQY for opening the Mac report, and to @Proton0 for running the test jars until Complementary actually compiled. I don't have a Mac here, that fix doesn't ship without them.

Added

  • A GPU profile of the frame, per render pass, in the log. Start the game with -Dvitrail.passTimings=5 among the JVM arguments and every five seconds the log gets a table of where the card's time went, one row per pass label, the game's passes and Sodium's beside the pack's, sorted by cost. Off unless asked for. What a slow pack costs is now a question the log answers instead of a frame counter.

Fixed

  • A pack that declares many textures and samples few of them can compile on Apple Silicon. Metal only has sixteen sampler slots, numbered by the order the shader first names each texture rather than by how many it actually reads, so a used texture sitting behind unused declarations used to land on slot 17 and the pipeline was refused. The names a program samples are now declared first. A program that samples more than sixteen textures still cannot run there.

  • A pack that marks a computed matrix as const loads instead of falling back to vanilla. Vulkan will not take transpose of a literal, or a uniform, as a constant initialiser, and one such pass used to fail the compile and take the whole pack with it. The keyword comes off and the value stays. Seen on Lux v1.2, a BSL derivative.

  • Sodium 0.9.2 no longer crashes when a pack extends the chunk mesh. Its new arena allocator was sized for Sodium's own twenty bytes and refused the wider mesh a pack needs. The allocator now takes the same format the rest of the renderer already asked for. 0.9.1 is unchanged.

v0.7.4-beta

v0.7.4-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 06:13

Changed

  • On a backend other than Vulkan, nothing of the pack is drawn any more. The pack is still
    read and still shown in its settings screen, so it can be picked and configured ahead of the
    restart, but the game keeps its own image: the passes used to run there and draw a picture that
    was credible and wrong. A chat line the first time a world is shown says so and names the setting
    to change, Graphics API to "Prefer Vulkan (Experimental)" under Video Settings, beside the error
    the log already carried.

Fixed

  • Body Camera's film grain moves again. The 0.7.3 hash rewrite took the frame time out of
    the grain, which writes it into the second argument of the idiom, and left a pattern stuck to the
    screen. The rewrite now only fires on a constant second argument; BSL's waving is untouched.

  • No more dark oval under a mob when the pack draws its own shadows. The game's flat entity
    shadow was still drawn, lit as a translucent entity, under every mob the pack was already
    shading with its shadow map. It now goes away for as long as the pack has a map, which is what
    Iris does, and stays under a pack without one. The defect only showed with Entity Shadows on in
    the video settings.

v0.7.3-beta

v0.7.3-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 03:49

Fixed

  • Grass and leaves no longer skip while they sway under BSL. Packs that hash their waving
    with a huge sine were jumping on this backend and smooth on the reference. That hash is now
    taken from the vertex bits instead. Complementary was already smooth; it never wrote that
    idiom.

v0.7.2-beta

v0.7.2-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 00:31

Fixed

  • The hand and the entities no longer stretch into giant triangles after a pack turns on or
    off.
    The 0.7.1 entry below called what its crash fix left behind cosmetic and brief, and it
    was neither: the game's own entity pipelines keep the previous vertex layout until a resource
    reload, so anything they drew over the rebuilt mesh, the hand with its switch off, every mob
    and hand for the seconds a chain takes to compile, smeared across the screen and stayed that
    way for the rest of the session. The engine now takes those pipelines out of the device's cache
    the moment the layout moves and compiles them again on the spot; what left the cache is freed
    at the next reload, the one safe moment the crash fix established, so the crash stays gone.

v0.7.1-beta

v0.7.1-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Aug 21:16

Fixed

  • Removing, picking or reloading a shader pack in a running world no longer crashes the game.
    The 0.7.0 entry below said the crash was reduced and not gone, and this closes what remained,
    which was two more faults of the same family. A reload freed the pack's images a moment before it
    stopped answering for them, so a pass of that very frame could still be handed them; and loading
    a pack that draws the entities or the hand emptied the graphics device's whole pipeline cache at
    an instant where work already recorded still named what was destroyed. Nothing empties that cache
    any more: the game does it itself on every resource reload, which is the one moment it is safe.
    What that leaves is cosmetic and brief: after turning a pack on or off in a world, an entity or
    the hand drawn by the game's own shader can look wrong for the second or two a pack takes to
    finish compiling, and a resource reload clears it. Tried at length on both loaders, turning packs
    off and on and switching between four of them, where one to four such gestures used to end the
    session.

v0.7.0-beta

v0.7.0-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Aug 20:19

Changed

  • Distant Horizons no longer draws its own ambient occlusion and fog while a pack is drawn.
    Between them they are three full screen passes over an image nothing downstream reads, so their
    work was thrown away one pass later, and two of the three ran over the whole screen rather than
    leaving it early. Both are on unless the DH menu says otherwise, so an install that changed
    nothing was paying for them on every frame. They go back to whatever that menu says the moment a
    pack is unloaded.

  • Three things taken on every frame are now taken when something reads them. The search for a
    lightning bolt walked every entity the world would draw, on every frame, to find the one kind of
    entity that is almost never there; it runs once a tick now, which is the rate the reference
    publishes that value at. The count of what the camera saw was taken on every frame for a line
    printed once per pack. And the pack's number for an item was spelt out again at every submission,
    where the number for a kind of entity had been remembered since it was written.

Fixed

  • Turning the shaders off and back on, or picking another pack, takes the game down far less
    often.
    Two rings the far terrain writes its section corners into were closed the moment a pack
    was unloaded, while a pass already recorded still held slices of them, and the graphics device was
    lost a few seconds later with nothing in the log to say why. They belong to the engine now rather
    than to the pack, so a load has nothing to close. It is not the whole of that crash: a second
    fault of the same family survives it, and where the pack could not be put back once before, it now
    takes somewhere between one and four goes. Issue 111 follows what is left, and until it is closed
    a pack changed in game remains a thing that can end the session.

  • The same pack now translates to the same text on every start. Four tables the translator
    walks to write a shader were handed back in an order the runtime picks afresh each time the game
    starts: the varyings a stage is owed, the vertex inputs a mesh has not got, and the volume
    helpers a pack's three dimensional textures need. Two launches on the same pack could therefore
    produce shaders that differ only in the order of their declarations, which is the same shader to
    a reader and a different one to the game, so it compiled pipelines it already had. One warning
    line about mesh elements a program computes from and does not get also listed its names in a
    different order each run.

  • One character no editor should have written no longer costs the player every pack.
    vitrail/options.txt was read as strict UTF-8, so a single byte from another encoding stopped
    ANY pack from loading, under a message that named neither the file nor the encoding. A byte order
    mark, which several editors add on their own, threw nothing and quietly ate the first setting of
    the file. Both now cost one character of one value at worst, and vitrail/pack.txt is read that
    way too. That file is also written through a temporary and moved into place, so a crash while it
    is being written can no longer leave half a line behind, which read as no pack chosen at all.

  • The shadow distance now bounds every chunk it is meant to, and not only the ones weighed one by
    one.
    A group of chunks that merely reached into the distance was handed to the walk whole, so
    everything standing under that group was drawn into the shadow map however far past the distance
    it stood. Lowering the distance, from the pack or from the video settings, therefore saved less
    than it should have, on the second walk of the world, which is the most expensive thing a frame
    does here.

v0.6.0-beta

v0.6.0-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Aug 13:12

Added

  • Distant Horizons' far terrain now casts into the pack's shadow map. A pack that ships a
    dh_shadow program has it drawn, from the light, over the same distant land its dh_terrain
    draws for the camera, so a far hill lays a shadow on the ground instead of only shading itself
    out of its own depth. Packs that write dhShadow.enabled=false are taken at their word, which is
    most of them; the one pack tried here that ships the program keeps it behind a setting of its own
    and it has to be switched on. It also follows the two words that govern the near world in the map,
    so a pack that keeps the world out of its own shadow map keeps the distant land out with it. What the map holds is the distant land the camera can see, which is
    narrower than under Iris: that mod gets a second list of it, built for the light, and there is no
    second list to be had here.

Changed

  • Two things taken on every frame are no longer taken for a pack that cannot read them. The
    copy the shadow map is read from as shadowtex1 is sixty-four mebibytes a frame at a shadow map
    of 4096, and the depth kept from before the hand is a full screen image and a draw on every frame
    the hand is drawn. Each is now skipped where no file of the pack writes the name that reads it,
    which the log says out loud when it happens. Of the eight packs tried here, one skips the shadow
    copy and five skip the depth.

v0.5.0-beta

v0.5.0-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Aug 09:11

Added

  • The debug screen names the engine, the pack and its profile, where Iris has always put those
    three lines. A screenshot taken with F3 open is how the question "what drew this, with what, set
    how" arrives, and until now a Vitrail frame and an Iris frame of the same pack read as the same
    picture. A pack that is not being drawn says which of the three reasons it is rather than reading
    as none at all: shaders switched off, a pack named that is not in the folder, or a pack the
    engine refused, the last of which sends you to the log rather than to the settings screen.

Changed

  • One download for both loaders. The release now carries a single jar,
    vitrail-<version>+mc<minecraft>, that runs on NeoForge and on Fabric alike; each loader reads
    its own metadata out of it and ignores the rest. It is the same engine the two per-loader jars
    carried, in one file, and the per-loader downloads stop being published. Nothing changes in
    game, and nothing changes about what has to sit next to it: Sodium, Chloride, and on Fabric the
    Fabric API. Upgrading means replacing: delete the old vitrail-neoforge-* or vitrail-fabric-*
    jar when this one goes in, because the two carry the same mod and a loader that finds it twice
    refuses to start.

Fixed

  • Complementary no longer falls back to its oldest code paths. The engine told packs it was
    Iris but never which one, and a pack that asks compares against zero: every "on an old Iris, do
    it the old way" branch in Complementary Reimagined and Unbound was live. The engine now
    announces the Iris release it behaves like, so those branches pick the modern side: rain and
    thunder fade over the pack's own timer instead of a hardcoded three seconds, the sun and moon
    stop leaning on a workaround for a renderer bug this engine never had, and reflections drop a
    workaround for a texture bug fixed before the release this engine mirrors.

  • On Fabric, the game no longer throws away every selected resource pack at boot when a slow
    mod set is installed.
    Reading the shader pack used to hold up the very first frame, and when
    the boot's resource reload finished inside that pause the game stitched its atlases before it
    had a frame's uniforms to do it with: "Missing uniform Globals", and every resource pack was
    deselected. Seen with Distant Horizons installed, whose extra programs made the pack read long
    enough to lose the race. The pack is now read once the boot reload is over, which is where
    NeoForge always effectively had it.

  • Bliss no longer stands its swamp fog over any shoreline. Biomes were numbered by walking the
    level's registry, which hands them out alphabetically, while a pack compares against the numbers
    Iris hands out, which are the game's own declaration order. Six is swamp there and cold ocean
    here, so the green followed you along every coast. The numbering is now taken where Iris takes
    it, and a biome the game's own list never declares answers nought, as it does under Iris.

  • Distant Horizons terrain stops washing out flat under packs that read the light raw. The far
    terrain family was handed raw light levels scaled by sixteen; Iris hands level i as
    (i + 0.5) / 16 and answers the fixed function light matrices with the identity, so a pack reading
    that light through the matrix or raw gets the same number either way. BSL and Complementary
    multiply the matrix in and were never affected. Bliss reads the pair raw, and from sky level one
    upward its light map saturated and its far terrain went flat.

  • Under Bliss, the game's sky no longer paints over the far terrain. The engine fills the
    game's own frame back in wherever the world's depth stands in front of what a pack claimed, and
    the world's depth holds nothing where an LOD stands, the game never rasterising the far terrain
    itself: those pixels read as unanswered and were covered over the colour the Distant Horizons
    programs had just written. Only Bliss showed it, its sky pass being the one the translation
    cannot hand a coverage mask to, every other pack's sky claiming those pixels itself. The far
    terrain's own depth is read now.

  • The line printed when the game came up on OpenGL no longer says the pack draws nothing. The
    passes do run on that backend, and what they draw is a picture both credible and wrong: the
    programs are translated against Vulkan's depth and clip conventions, so a sky cut in two or a
    misdrawn hand there is the backend and not the pack. The line owns that now, which is the point
    of it, a report filed against the pack being the one thing it exists to prevent.