Squash of Droid-Deck/DroidDeck#517 (ASEbrahim/DroidDeck mali-bridge @ 6b823341): the Vulkan
bridge (tools/vkbridge) that runs the guest's Vulkan on the phone's own driver, with BC1-BC7,
clip/cull distance, vertex-divisor and depth-clip emulation and dma-heap memory sharing for Mali.
All of the bridge is ASEbrahim's work; squashed only to carry it on this test branch.
Combined with #570 on this branch, a device draws through exactly one path:
- Adreno: Turnip, unchanged (checked first; the bridge setting is ignored there).
- PowerVR / Xclipse with the system HAL and a render node: the system-Vulkan path (#570).
- Anything else with the Setup toggle on (Mali): the bridge.
* feat(): gog & epic achievements UI
* feat(): AI-generated translations - Please get review for these
* build_local: run on macOS hosts with Docker Desktop
Two steps of tools/build_local.sh failed on a Mac:
- The uruntime staging runs on the host, where macOS's BSD install has
no -D, so `install -Dm644` stopped with "No such file or directory".
The folders are now made first and the files copied with install -m644.
- Inside the cross-compile container, Docker Desktop's VirtioFS share
now and then refuses the chmod that install -m makes (EPERM, on a
different file each run, e.g. "setting permissions for
.../droiddeck-esync: Operation not permitted"). The overlay and
desktop scripts are copied with a plain write instead. Nothing is
lost: the APK keeps no file modes, and the app sets them when it
stages the runtime.
* feat(): adjust the store
* feat(): store-achievements adjustment for UI
* feat(): translation fixes and separate hidden achievements
* Show all achievements directly on store game details
---------
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
A game that closes as soon as it starts can be tripped by Proton's Steam
setup (steam.exe, the Steam registry entries, the Steam client bridge).
The Games page of the session drawer gets a per-game Start without Steam
switch, stored as DROIDDECK_NO_STEAM=1 in the game's environment and listed
in its profile summary.
droiddeck-game-env acts on it for a game launch only: a Proton with umu's
launch (GE-Proton, Proton-CachyOS, DroidDeck-Proton) gets UMU_ID, so it
runs umu.exe in place of steam.exe and still sets up the prefix; a Steam
game keeps its protonfixes under its own id, an added game gets 0. Any
other Proton runs the game straight in the prefix (runinprefix).
* docs: draft 0.4.0 release notes
* docs: add Thor store and launcher media for 0.4.0
* docs: show Steam switching to KDE on Thor
* docs: show Castle Crashers touch layouts and controller choices
* docs: add Amazon game install view
* docs: add trimmed user recording of store downloads
* docs: smoother touch controller recording, GOG sign-in and per-game profile screenshots
* docs: clean desktop round-trip recording replaces the KDE gif and file explorer still
* docs: add multi-controller and Steam Controller media, rebuild desktop gif without glitch frames
* docs: add foldable touch gamepad screenshots from its PR
* docs: add the Discord badge to the 0.4.0 notes and tidy contributor lines
* docs: fold fixes to new 0.4.0 features into their entries, add Follow screen shots, point the changelog at the 0.4.0 tag
* docs: add the Add a game dialog to the non-Steam games entry
* docs: add a TL;DR for Mr. Sujano to the 0.4.0 notes
The chain copy that clears the emulated textureCompressionBC only knew a
handful of structure sizes, so a valid chain such as
VkPhysicalDeviceTimelineSemaphoreFeatures -> VkPhysicalDeviceFeatures2 was
passed on unchanged and the compat layer refused the bit. Size every
structure that may extend VkDeviceCreateInfo from a table generated from the
Vulkan registry (gen_device_chain.py, Vulkan-Headers 1.3.275, the headers
the build compiles with), and copy onto the heap instead of a fixed buffer.
Only a structure newer than those headers still passes the chain unchanged.
Add a regression test that runs the layer between a simulated loader and a
mock driver: the timeline-semaphore chain, pEnabledFeatures, an unknown
structure, the caller's structures left untouched, per-device YCbCr sampler
tracking with handle reuse, and the KHR calibrated-timestamp forwarding. CI
installs libvulkan-dev for it.
- Clear textureCompressionBC in a copy of the device-create chain (every
structure up to the VkPhysicalDeviceFeatures2 that enables it) instead of
writing the caller's structure; a chain led by a structure of unknown size
is passed on unchanged.
- Track YCbCr samplers per device in a growable list, drop them on
vkDestroySampler and device teardown, and fail sampler creation rather
than leave one untracked when the list cannot grow.
- Fail descriptor set layout creation with VK_ERROR_OUT_OF_HOST_MEMORY when
a replacement sampler array cannot be allocated, instead of passing the
original YCbCr samplers to the driver.
* feat: a store game's page floods out of its card onto its own hero art, and draws back from it
* fix: installs interrupted by the app closing show in Downloads with Resume and Clear
* feat: finished and interrupted downloads share the running card's art look, and the queue sits under what is running
* fix: the download queue outlives the app: queued, running and paused downloads come back after a restart
Detect Samsung's Vulkan HAL (vulkan.samsung.so) and its sgpu render node
alongside PowerVR, and run Xclipse through the same libhybris bridge:
- VK_LAYER_DROIDDECK_xclipse (tools/linuxfs/xclipse-layer), built with the
glibc preloads and enabled only on Xclipse: sets bionic's environ for the
driver's shader compiler, avoids immutable YCbCr samplers in compute
layouts, forwards the KHR calibrated-timestamp entry points to the EXT
ones, and reports textureCompressionBC and BC4/BC5 filtering over the
compat layer's BC emulation.
- Upstream DXVK 2.6.2, pinned as a tar.gz component and selected on Xclipse:
the driver has 128 bytes of push constants, DXVK 3 needs 256.
- android_wlegl accepts a zero stride and passes it through unchanged:
Samsung's gralloc records none for GPU-only buffers.
Tested on a Galaxy A56 (Xclipse 540, driver 24.0.560): Steam Big Picture
and PICO PARK (D3D9).
* feat: components list newest first, Steam's sheet opens on its Steam tab with offline mode, and Setup's overview drops the account group
* fix: chip selections stretch across on every move, drawn over the chips instead of behind them
* feat: with a pad the focus ring fills what it holds and is the only fill; chip rows mark their pick with a bar
* fix: the focus ring chases focus on a continuous spring per edge instead of restarting on every move
* fix: a chip selection hopping past a chip fades across instead of crawling over as a drop
* fix: the store chips' fill only shows where a pad's focus is, not on the shown store
* feat: the shown store's chip carries a bar on its foot, every chip pulses when picked, and the queue's settings live only in the cog
* fix: step-outs grow and fold in one move with no tail, keep the ring out while moving, and hand focus back to their control
Copy only the standalone build recipe, source pin, BC-format prerequisite
and presentation-sync patch/check from wallentx/DroidDeck at d0f7264ea8.
Source: https://github.com/Droid-Deck/DroidDeck/pull/570
Preserve that proposal attribution; no Android app, compositor, managed
pack, private data or fork development history is imported.