8 Commits
Author SHA1 Message Date
LibretroAdmin b057341332 Pipeline cache data written by the driver where the cache keeps it
A disk cache makes room for an entry at the end of what it will write
(LinearDiskCache::AppendBegin), and the backend writes its pipeline data
straight there: GL's program binary from glGetProgramBinary, D3D12's
blob copied once out of the driver's. The Vulkan pipeline cache is built
in place too, vkGetPipelineCacheData writing into the store written to
disk. No vector in between, no copy of it.
2026-11-09 00:15:13 +01:00
LibretroAdmin eac19c3216 VideoCommon: textures, framebuffers and vertex formats as plain pointers 2026-11-08 03:21:36 +01:00
LibretroAdmin 6f709e6686 VideoCommon: shaders and pipelines as plain pointers 2026-11-08 03:19:11 +01:00
LibretroAdmin 77ba38f542 VideoCommon: shaders keep rslc's result block for their code
SPIR-V and DXBC stay in the block rslc returns instead of being copied
into vectors, and the disk cache is lent the code to write. Code read
back from the cache is copied once into a block of its own.
2026-11-07 21:11:31 +01:00
LibretroAdmin d2468a7caa OGL: textures lend a persistently mapped pixel unpack stream
Where GL has buffer storage, sync objects and texture storage, a 32 MiB
unpack buffer mapped for good in client memory is what loads of
uncompressed 2D and array textures are decoded into; glTexSubImage
uploads them from it.
2026-11-07 18:17:30 +01:00
LibretroAdmin 361bcaf7a1 Video: textures and XFBs decode straight into the backend's upload memory
AbstractTexture::LendLoad lends the upload stream's memory for a level,
and CommitLoad uploads it: Vulkan for any rows, Direct3D 12 for rows at
its pitch alignment. The texture cache decodes textures and XFBs into
it; it decodes into its own buffer and Loads that where the backend
lends none, or when the arbitrary mipmap detection reads the levels
back. The detector keeps its levels in a fixed array.
2026-11-07 17:53:42 +01:00
LibretroAdmin 9e1ec1f660 Video: AbstractGfx without virtual methods
AbstractGfx calls into the Gfx of the backend in use, by
g_video_backend_kind; each backend's Gfx is final, so these are direct
calls, and what a backend does not do itself falls to the defaults,
which a backend may also call as the Base* functions. The Gfx is deleted
as its own class. The unused fullscreen calls are gone, and BackendObjects
follows the tree's formatting.
2026-11-07 17:16:18 +01:00
LibretroAdmin 106efcaf56 Video: GPU objects without virtual methods
Shaders, pipelines, textures, staging textures and framebuffers call
into the classes of the backend in use, which each backend's Gfx sets
as g_video_backend_kind; those classes are final, so the calls are
direct. A std::default_delete specialization deletes them as their own
class. The Null and Software renderers use the base shader and pipeline
types.
2026-11-07 17:05:56 +01:00