NotBigGhostandClaude Opus 5 d5e37fcb8d Раздельные привязки популяций: снят предел dzn на размер сетки
Массив популяций занимает nx*ny*9*4 байта и показывался шейдеру одной привязкой.
dzn объявляет max_storage_buffer_binding_size = 128 МиБ, поэтому потолок выходил
3.73 млн узлов: 14 прогонов кампании из 115 падали на создании bind group, а на
них приходится 70.7% её стоимости.

Ограничена при этом ровно привязка: max_buffer_size у dzn 2047 МиБ. Поэтому тот
же буфер теперь показывается девятью привязками, по одному направлению в каждой,
и потолок поднимается до 33.5 млн узлов — самая крупная сетка кампании
(4096x4096, 16.8 млн) проходит с запасом.

Как устроено:
 * шаг между направлениями выровнен на 256 байт (dir_stride), потому что смещение
   привязки обязано быть кратно min_storage_buffer_offset_alignment;
 * обращения к популяциям в WGSL идут через fget/fset/pget/pset, а их тело
   генерируется под вариант (build_shader);
 * вариант выбирается по max_storage_buffer_binding_size адаптера — где предела
   нет, собирается прежний общий, без switch в аксессорах;
 * KBC2D_SPLIT_POPULATIONS=1 включает раздельные принудительно: иначе сверить два
   варианта на одной карте нечем.

Проверено:
 * на одном драйвере оба варианта дают одно и то же — Cd 2.39486, energy_end
   5.74813e-05; раздельный стоит 5.7% пропускной способности;
 * на сетке 2048x2048, где раздельные привязки и нужны, нативный прогон против
   контейнерного: energy_end расходится на 2.4e-07, enstrophy_end на 1.3e-07;
 * preflight в контейнере: 115 сценариев из 115, ни одного отказа (было 14);
 * 29 собственных тестов решателя зелёные.

Образ опубликован как notbigghost/kbc2d:1.2.0 (он же latest).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 19:08:12 +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%