NotBigGhostandClaude Opus 5 81985b169e Запуск в WSL2 через docker compose без NVIDIA-runtime
В WSL2 драйвера Vulkan для Linux у NVIDIA нет: карта отдаётся через /dev/dxg по
протоколу WDDM, нативный libGLX_nvidia про него не знает и перечисляет ноль
устройств, поэтому Container Toolkit нечего подкладывать внутрь и docker падает
с `could not select device driver "nvidia"`.

С /dev/dxg умеет говорить dzn (Dozen) — драйвер Mesa, транслирующий Vulkan в
D3D12. Он положен в образ, и NVIDIA-runtime для этого пути не нужен вовсе: нужны
проброс устройства и монтирование /usr/lib/wsl, где Microsoft держит libd3d12.so.

Правка в решателе одна: флаги инстанса wgpu теперь читаются из окружения
(InstanceFlags::from_build_config().with_env()). Без этого переменная
WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER не действует, а wgpu по умолчанию
МОЛЧА прячет адаптеры, не прошедшие тесты соответствия Vulkan, — под это правило
попадает dzn, и решатель сообщал, что GPU не найден. Поведение по умолчанию не
изменилось: без переменной такие адаптеры по-прежнему скрыты.

База образа сменена с debian:bookworm-slim на archlinux:base: в пакетах Mesa у
Debian и Ubuntu dzn не собирают (проверено по спискам файлов), в Arch он лежит
отдельным пакетом той же версии Mesa, что и на хосте WSL.

Новое:
 * docker-compose.wsl.yml — путь через /dev/dxg, с профилем проверок и с build:
   на случай, когда доступа к реестру нет;
 * bench/parity.py — сверка GPU-пути с CPU в f64 на течениях, где расхождение
   f32 и f64 не нарастает. Соответствие dzn вендором не проверено, значит
   проверяем сами, а не верим на слово.

Замерено на Intel Iris Xe (та же карта, нативный драйвер против dzn):
 * точность: cd 2.39486 против 2.39486, energy_end 5.74813e-05 против
   5.74810e-05 — совпадение до 5-6 значащих цифр;
 * скорость: плата за трансляцию падает с ростом сетки, 4.2x на 61 тыс. узлов,
   1.46x на 461 тыс., 1.30x на 1.84 млн. На 95.1% стоимости кампании сетки
   крупнее 600 тыс. узлов, поэтому ожидаемое удорожание — около трети, не в разы.

В калибровку добавлена сетка 1920x960: оценивать кампанию по 240x120 значит
занижать пропускную способность вчетверо. Образ опубликован как
notbigghost/kbc2d:1.1.0 (он же latest), проверен вытягиванием из реестра.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 17:15:53 +03:00

SimVulcan

A minimal Vulkan 1.3 / C++20 3D model editor: an orbit camera over three reference grid planes through the origin, with .obj model loading and display.

Features

  • Orbit camera — drag to rotate around the centre, wheel to zoom, and Front / Top / Side buttons to align the view to the principal planes.
  • A 3D editor space: three grid planes (XY, XZ, YZ) and coloured X/Y/Z axes meeting at the origin.
  • .obj loading with three display modes — solid (flat-shaded), wireframe, and solid + wireframe overlay.
  • ImGui interface (Viewport controls + Mesh load panel).

All Vulkan code is isolated in src/vk/; the rest of the app is Vulkan-free.

Targets

  • Windows x64 (MSVC / clang-cl)
  • Linux x64 (gcc / clang)
  • macOS arm64 (Apple Silicon, via MoltenVK)

Prerequisites

  • Vulkan SDK 1.3.290+ (https://vulkan.lunarg.com/)
  • CMake 3.26+
  • Ninja
  • C++20 compiler (MSVC 19.36+, gcc 11+, clang 14+)

Build

cmake --preset windows-msvc-release
cmake --build --preset windows-msvc-release

Run from the executable's own directory (build/<preset>/src/app/) so it finds the spirv/ and assets/ trees copied next to it.

Tests

cmake --build --preset windows-msvc-debug --target simv_tests
ctest --preset windows-msvc-debug

Layout

src/
  core/    Logger, Window, App (orchestration, Vulkan-free)
  vk/      All Vulkan: Context, Swapchain, Buffer, Image, Shader, GpuMesh,
           Renderer (frame loop + depth + ImGui), MeshRenderer, GridRenderer
  mesh/    CPU mesh: tinyobjloader + welding (no Vulkan)
  editor/  Camera, mouse input, EditorUI + MeshLoadPanel (ImGui, no Vulkan)
  app/     main.cpp
shaders/
  editor/  mesh + grid vertex/fragment shaders (GLSL → SPIR-V at build time)
tests/     Catch2 unit tests (mesh math)
S
Description
САПР с упором на вычислительную гидродинамику с KBC методом в ядре и встроенными алгоритмами автоматизации аналитического проектирования обтекаемых тел.
Readme
72 MiB
Languages
C++ 88.8%
CMake 9.2%
GLSL 1.5%
Batchfile 0.5%