The canonical input is the original XNA 4.0 tree under
/rv/tmp/samples/SAMPLE-152-XNA-4-Racing-Game-Kit-master/xna4-original/.
RacingGameContent/RacingGameContent.contentproj is the real XNA 4 project; the
similarly named ContentWindows.contentproj is a stale XNA 3 project with a missing
processor reference. The modern /rv/tmp/RacingGame checkout is a behavior oracle
only. None of its GLB, .material, .efb, generated bank, code or raw assets may
enter the port. See
RACING-CONTENT-SOURCE-POLICY.md.
The Win7 disk was repaired from the protected snapshot and XNA Game Studio 4 built
the unchanged canonical content project. Its 358 outputs are hash-locked and all
57 .X model products, all ten Effect XNBs, all textures and the supplied XACT
banks now run through CNA's public XNA-shaped APIs. The four-model structural/GPU
proof is 64/64 and the feature-complete Linux OPENGL33 gate is closed in
racing_milestone9.md.
No known CNA or sharp-runtime blocker remains for the Linux reference port. The
Milestone 9 log audit did expose and repair one general host-integration gap:
sharp-runtime c419f477 permits a hosting framework to scope isolated storage,
and CNA 822d3b960 binds that root to StorageDevice::SetAppNameEXT. Racing uses
the normal IsolatedStorage API and no longer writes Log.txt relative to its
launch directory.
The remaining work is platform qualification, not replacement content:
- Windows
OPENGL33build/package and complete-race validation; - Android
OPENGLESlifecycle, touch/tilt, audio, storage and physical-device validation; - Web
WEBGL2delivery, audio unlock, persistent storage and browser validation.
Windows qualification is temporarily blocked by the live host state after the
2026-09-03 reboot, not by CNA or the game port. The matching VirtualBox modules
are loaded, but /dev/vboxdrv was not recreated and starting vboxdrv.service
through the unprivileged session timed out. The exact owner action is
sudo /usr/lib/virtualbox/vboxdrv.sh start; no module rebuild is indicated.
The VM and its prior authentic XNA build evidence remain intact. Android work may
continue independently while this external gate is pending.
Asset redistribution remains independently blocked because the canonical snapshot
contains no license grant. See
racing_release_gate.md.
Everything below this heading through its old priority list records the superseded
2026-09-02 modern-repository audit. It may explain earlier CNA work, but it is not an
active Racing route or task list. In particular, its GLB, sidecar, FNA .efb and
modern-bank recommendations must not be executed.
This file intentionally lists framework gaps, not the work of porting a game. It uses:
- modern primary source
/rv/tmp/RacingGameatd8092633e4e43e014ff168d8e913a9373538b851; ../cnanextat51d61ef42d1105d97387feeba11eae91a2f3e2e9;- the frozen Milestone 0/1 evidence in
racing_baseline.mdandracing_milestone1.md.
Recheck every row when the pinned CNA revision changes. “Validation gap” means not proven; it is not yet a defect.
| Previous finding | New status |
|---|---|
CNA needs a route for 57 legacy .x models |
Superseded. The primary source has 57 checked-in GLBs and no .x; direct .x support is not a Racing requirement |
| A custom Racing model/material package is needed | Superseded. GLB + 57 .material sidecars + raw assets are the cleaner contract |
| Hierarchy/tangent/material metadata must be reconstructed | Substantially reduced. Data is present; CNA must preserve/expose it |
| Authentic generated XACT banks are missing | Superseded as acquisition risk. Real runtime-used version-46 banks are present; CNA validation remains |
| No runnable reference exists | Superseded. The user confirmed the modern FNA build runs on Linux |
Rgba64 may not matter if rendering changes |
Resolved as a capability contract. Live OPENGL33 reports it unsupported and construction refuses it consistently; Racing needs an explicit Color fallback |
| Custom Effect support is important | Resolved for the reference route. Live CNA loads all ten exact FNA .efb files and applies every reflected pass after FX-128; pixel/state fidelity remains an integration gate |
| DDS cube issue | Still relevant. The normalization cube is still uncompressed RGB24 |
CNA has a mature GLB/CNB/Model route, and 56 of the 57 supplied GLBs pass its live
converter. It is not yet proven that the current public result preserves every
Racing requirement: unskinned scene nodes/instances, original names and parent
matrices, ordered parts, material identity, DigitalRise-equivalent bounds, and the
authored _TANGENT/_BINORMAL attributes. The remaining Cube.glb is malformed:
its unused VEC3 TEXCOORD_0 accessor exceeds its buffer view.
This is a bounded proof with possible general model-module fixes, not a reason to port DigitalRiseModel or weaken generic accessor validation. Required proof assets: car, windmill, one alpha model, and a deterministically normalized sky cube.
SkyCubeMap.DDS is DXT1 and fits the current route. NormalizeCubeMap.DDS is an
uncompressed 24-bit RGB cube and remains outside CNA's known loose-cube format path.
Add a generic RGB24 cube decode/upload test and support, or an explicitly approved
framework-level conversion to RGBA8. This is a small CNA content/texture gap.
Racing can implement narrow direct readers today, so this is not strictly missing. After CNA modularization, a general raw-asset boundary would be useful:
- canonical, case-sensitive-safe asset IDs;
- provider/stream abstraction for desktop files, Android packaged assets, and Web preload/cache/stream sources;
- typed cache keys including decode options;
- explicit RAII/unload/device-restoration behavior.
Do not copy AssetManagementBase's managed-object dictionary verbatim and do not
build a parallel XNAssets clone. The Racing .material schema and track/combi/font
parsers remain game-side.
The modern repository supplies real version-46 .xgs, .xsb, and .xwb files and
uses them at runtime. Milestone 0 loaded all three, resolved all 27 cue names,
submitted representative playback through SDL dummy audio, and round-tripped a
long-lived cue variable. Remaining work against these exact inputs is:
- every wave encoding present;
- cue/category/global and per-cue variables;
- RPC/variation/filter behavior used by motor/gear/brakes;
- fire-and-forget and long-lived cue lifetime;
- pause/resume/volume/device teardown.
Repeat first on Linux desktop, then independently on Android and Web. CNA's XACT demo is currently excluded on Android/Emscripten, and browser audio requires a user gesture; neither fact alone proves the library cannot work there. Do not file a framework defect until a focused supplied-bank test fails.
Milestone 1 proved one render-target bind/clear/unbind/readback cycle, all six Color cube faces, exact 44-byte tangent-layout upload/readback and GPU consumption, resize/fullscreen, capture and three presents. It does not yet prove the complete shadow → scene → glow/blur/menu → UI chain, authored cube formats/mips, pass-state transitions or resource restoration across that chain. Build those incrementally.
The newer OPENGL33 profile has extensive real Linux/Mesa coverage, not Windows
driver coverage. OPENGLES is the Android route and WEBGL2 builds through
Emscripten, but neither has a complete Racing-class target proof. These are platform
acceptance gaps, not automatically framework bugs.
CNA already has TouchPanel, gamepad support, Android Back mapping, and an Android
Accelerometer implementation with landscape-axis handling. Racing must test
simultaneous steer/pedal touches, safe-area transforms, controller switching, sensor
calibration/orientation, background/resume, and missing-sensor fallback. Any failure
must be isolated before deciding whether it belongs to CNA or the game overlay.
CNA has an Emscripten main loop and browser input path. Racing still needs durable settings/replay/highscore storage and XACT/audio behavior after a browser user gesture, tab suspend/resume, and reload. A game-specific synchronization mistake or packaging choice is not a CNA gap; a missing reusable storage/audio primitive may be.
- translating roughly 23.6k physical lines of C# to C++;
- typed parsing/validation of Racing
.materialJSON; - binding Racing effect/technique/parameter names;
- track, combi, height, bitmap-font and replay/settings parsers;
- car/windmill behavior and alpha filename convention;
- desktop logical-control mapping;
- Android touch artwork/layout, left-handed/accessibility options and tilt filter;
- Android Gradle/APK packaging and landscape app policy;
- Web content grouping/download/progress/cache UX;
- platform quality presets, downscaled/compressed derivative assets and performance tuning;
- asset licensing/provenance decisions;
- pinning/reproducing the FNA oracle's sibling dependencies.
- partial XNB support, including model/texture/cube readers;
- GLB container/accessor/index parsing;
- ordinary TGA/PNG
Texture2Dloading; - DXT1 cube data route;
- vertex/index buffers, 32-bit indices and custom layouts on the GL path;
- render targets, blend/depth/rasterizer/sampler states and readback in principle;
- exact FNA compiled Effects with named parameter/technique/pass collections on OPENGL33 (all ten Racing files and every reflected pass);
- truthful OPENGL33
Rgba64capability refusal; Gamelifecycle, resize/fullscreen, device events, readback and repeated present;RenderTarget2D, six-face ColorTextureCube, and the exact Racing 44-byte tangent vertex layout on the GPU;- keyboard, mouse, gamepad and multi-touch input;
- Android Back → Escape mapping;
- Android Accelerometer support (hardware validation still required);
- substantial XACT version-46 parser/playback behavior;
- Emscripten non-blocking Game loop and SDL input bridge.
Old Bgfx/Vulkan/SDL-renderer-specific custom-effect limitations remain true or need
their own audits, but they do not block the selected first route. The primary
sequence is Linux OPENGL33, Windows OPENGL33, Android OPENGLES, then Web
WEBGL2. Adding D3D11, Vulkan, Bgfx, WebGPU, SDL_RENDERER, or fixed-function
backends is separate scope.
- Complete the bounded four-model GLB/material proof.
- Fix/test generic RGB24 loose DDS cube loading.
- Prove representative compiled-Effect pixels/state in the content scene.
- Prove the integrated static scene, then the complete render-target chain.
- Finish supplied-bank XACT behavior and audible-output qualification.
- After Linux completion, qualify Windows, Android and Web in that order.
- Qualify the frozen feature-complete port on Windows
OPENGL33. - Qualify Android
OPENGLES, including a complete touch-only race on physical hardware. - Qualify Web
WEBGL2, including production-reasonable content loading, audio unlock, persistent storage and a complete browser race. - Keep redistribution blocked until a canonical license grant is supplied and reviewed.