<feed xmlns='http://www.w3.org/2005/Atom'>
<title>eglantine-cirakg/src/video_core/vulkan_common/vulkan_device.cpp, branch nx2</title>
<subtitle>Mirror of github.com/cira0100/Eglantine-public nx2, a fork of Djihads80/Eglantine.</subtitle>
<id>https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2</id>
<link rel='self' href='https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/'/>
<updated>2026-11-03T18:23:47+00:00</updated>
<entry>
<title>video_core: accept an empty Streamline device-extension list</title>
<updated>2026-11-03T18:23:47+00:00</updated>
<author>
<name>Duck912</name>
<email>350528965+Duck912@users.noreply.github.com</email>
</author>
<published>2026-11-03T18:18:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=1889602c7a0dc17850692594eae2e77e16ac13fc'/>
<id>urn:sha1:1889602c7a0dc17850692594eae2e77e16ac13fc</id>
<content type='text'>
Streamline may report that DLSS needs no extra device extensions. The check required a non-empty
list, so that result counted as "extensions unavailable": Streamline was stopped and FSR 3.1 used.
Only require that every listed extension is supported.

Found by CodeRabbit review.

Assisted-by: Claude Opus 5.5 (implementation)
Signed-off-by: Duck912 &lt;350528965+Duck912@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>video_core: NVIDIA DLSS through NVIDIA Streamline in place of a game's DLSS</title>
<updated>2026-11-03T17:33:16+00:00</updated>
<author>
<name>Duck912</name>
<email>350528965+Duck912@users.noreply.github.com</email>
</author>
<published>2026-11-03T17:13:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=63e87a22c60394bc4f427ee5f8d6ddbce7b0ac7f'/>
<id>urn:sha1:63e87a22c60394bc4f427ee5f8d6ddbce7b0ac7f</id>
<content type='text'>
Adds a Graphics setting, "Use NVIDIA DLSS in place of a game's DLSS" (nvidia_dlss, off by
default). When it is on, in Windows builds configured with EGLANTINE_STREAMLINE_SDK, the
evaluation Eglantine already replaces with FSR 3.1 goes to NVIDIA DLSS on GeForce RTX cards, with
the same inputs (colour, depth, motion vectors, jitter). When DLSS can't run, FSR 3.1 runs as
before.

Only Streamline's MIT-licensed headers are compiled in; nothing of NVIDIA's is linked or shipped.
At run time Eglantine looks for sl.interposer.dll in the user folder's "streamline" folder (or
EDEN_STREAMLINE_DIR, or "streamline" next to the executable), checks its Streamline signature and
starts Streamline with manual hooking. Streamline's plugins come from that folder or the NVIDIA
app's downloads. DLSS itself is nvngx_dlss.dll in the same folder, else the newest DLSS 310 or
later that the NVIDIA app has downloaded, checked for NVIDIA's Authenticode signature and copied
as streamline/nvidia-app/nvngx_dlss.dll. Like other tools that call DLSS outside a game, it uses
its own fixed project id with the custom engine type.

- Preset K for all modes (EDEN_NX2_DLSS_PRESET overrides it): the default Performance model (M)
  and L draw thin dark horizontal lines in some frames at 2x resolution scale; K doesn't.
- HDR input with auto exposure; the mode follows the render/output ratio.
- Buffer device address stays enabled when DLSS needs it, for DLSS only.
- The upscaler waits for the device instead of submitting when it is destroyed: by then the
  game's channels are released, and a submit read the state tracker's stale flags (a crash when
  stopping a game).

With the setting off, or in builds without the SDK path (the setting is hidden there), nothing
changes.

Testing: Windows 11, RTX 5080, Fire Emblem: Fortune's Weave docked at 1x (720p -&gt; 1440p) and 2x
(1440p -&gt; 2880p), CLI runs and GUI play, stopping and restarting games with DLSS on. Not tested on
other GPUs or games.

Assisted-by: Claude Opus 5.5 (implementation, debugging)
Signed-off-by: Duck912 &lt;350528965+Duck912@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>texture_cache: keep the allocator's block slack out of the usable VRAM</title>
<updated>2026-11-01T23:11:26+00:00</updated>
<author>
<name>kraibse</name>
<email>33869366+kraibse@users.noreply.github.com</email>
</author>
<published>2026-11-01T14:38:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=51d798ff0373a40098aa77ef13d54307f39e44ac'/>
<id>urn:sha1:51d798ff0373a40098aa77ef13d54307f39e44ac</id>
<content type='text'>
The collector's usage leaves out the unused part of VMA's blocks, but
the driver counts it and a heap at its budget cannot give it to a new
image. On an RX 7800 XT that slack was 1.06 GiB, the whole 1 GiB margin:
the heap sat at its budget for a minute while the collector saw room,
then images stopped fitting and the process died. Reserve the slack
(capped at 1.5 GiB) on top of the margin: at once when it grows, slowly
when it shrinks, so eviction leaving partly used blocks doesn't chase
the threshold down.

Assisted-by: Claude Sonnet 5.5 (diagnosis and code)
(cherry picked from commit 73fd5a489ea28226fa16a55f5008e622d631b54c)
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/fix/vk-memory-blocks' into test/linux-all-prs</title>
<updated>2026-11-01T18:26:29+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T18:26:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=b9c1d423e8e0b9318b5af96af4734ffd2cb8b43e'/>
<id>urn:sha1:b9c1d423e8e0b9318b5af96af4734ffd2cb8b43e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/feat/nx2-mesh-shaders' into test/linux-all-prs</title>
<updated>2026-11-01T18:25:40+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T18:25:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=235e2f5f5548e20620c247b76586cbb559f4158d'/>
<id>urn:sha1:235e2f5f5548e20620c247b76586cbb559f4158d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vulkan: 16 MiB memory blocks</title>
<updated>2026-11-01T17:23:14+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T07:42:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=a08eb2ead837b8de5dbd4c666474ee62ea45bd68'/>
<id>urn:sha1:a08eb2ead837b8de5dbd4c666474ee62ea45bd68</id>
<content type='text'>
With 32 MiB blocks title 1 still had ~0.5 GB of holes between images: a
block drains only once all of its images are gone, and fewer per block
drain sooner. Allocations over 8 MiB get memory of their own.

(cherry picked from commit d3a4db818512221e6b0555e886e192c346c16ae7)
</content>
</entry>
<entry>
<title>vulkan: keep sparse pages and device-local buffers out of the image blocks</title>
<updated>2026-11-01T17:23:13+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T07:41:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=1f0e3b88c4f82e61a6296eea9ee371eaf45676d4'/>
<id>urn:sha1:1f0e3b88c4f82e61a6296eea9ee371eaf45676d4</id>
<content type='text'>
About half of the holes in the default blocks sat next to buffers (~1,100,
churned by the buffer cache's collector) or sparse pages (~2,400 64 KiB-4
MiB allocations), which the texture cache's collector can't move. Each gets
a VMA pool of its own per memory type (32 MiB blocks); allocations over half
a block, or ones the pool fails, take the default blocks.

(cherry picked from commit 6c5ad324bd79ec50601ae14a63ca745da612f61f)
</content>
</entry>
<entry>
<title>vulkan: 32 MiB memory blocks and best-fit placement for images</title>
<updated>2026-11-01T17:22:42+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T06:03:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=50fb1556cb005aa4dfaed57b4f8c07f2bb56e23c'/>
<id>urn:sha1:50fb1556cb005aa4dfaed57b4f8c07f2bb56e23c</id>
<content type='text'>
Textures created and deleted by the thousand still left about 1.7 GB of
the 64 MiB blocks empty after ten minutes of title 1. Smaller blocks go
back to the driver sooner, VMA gives allocations over 16 MiB their own
memory, and the min-memory strategy fills holes before taking a block.

(cherry picked from commit 6235081422f2bd2d726ccb45354c46d7c3ed2a0e)
</content>
</entry>
<entry>
<title>video_core: draw Switch 2 task/mesh pipelines with VK_EXT_mesh_shader</title>
<updated>2026-11-01T16:29:30+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-10-30T09:02:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=02504aeb37cb3ee07dc421acc0570ad5ba25d53f'/>
<id>urn:sha1:02504aeb37cb3ee07dc421acc0570ad5ba25d53f</id>
<content type='text'>
While SET_MESH_CONTROL is on, a native draw binds a task program in the
vertex slot, its mesh program in the tessellation slot and a header-only
pass-through geometry program naming the per-primitive outputs. Translate
the first two as task and mesh programs with the mesh registers
(SET_MESH_SHADER_A/B, SET_MESH_INIT_SHADER) and that header, key their
pipelines by them, and build pipelines with task/mesh stages and no
vertex input, input assembly or tessellation state. The draw's vertex
count is the number of task workgroups: record vkCmdDrawMeshTasksEXT.
Enable VK_EXT_mesh_shader (task and mesh only) when the host has it; draws
are skipped without it, as they were before.
</content>
</entry>
<entry>
<title>vulkan_device: tell AMD GCN4 apart before float16 is turned off</title>
<updated>2026-11-01T15:49:12+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T07:08:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=fce9c5fd25c66558eb8ed4e9e5ca9129589a5e7d'/>
<id>urn:sha1:fce9c5fd25c66558eb8ed4e9e5ca9129589a5e7d</id>
<content type='text'>
AMD GCN4 and older are recognised by their lack of float16. Since float16
is turned off for every non-Mesa AMD driver (2026+ versions break it),
the sampler min/max check that runs after that saw every AMD GPU as GCN4
and removed VK_EXT_sampler_filter_minmax: a Radeon 780M (RDNA3) logged
"AMD GCN4 and earlier have broken VK_EXT_sampler_filter_minmax", and
samplers with a min/max reduction fell back to plain filtering there.
Read it once, before float16 is turned off.
</content>
</entry>
</feed>
