CNA-GAP-065: The renderer capability profile has no feature for pre-compiled SPIR-V payloads, so SDL_GPU and VULKAN report every source-dialect feature Unsupported
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
BuildRendererCapabilityProfileEXT maps a renderer's declared dialect onto six source-dialect features (desktop GLSL, GLSL ES, Vulkan GLSL, HLSL, MSL, WGSL). SDL_GPU and VULKAN declare SpirV, which CNA documents as already-compiled bytecode rather than source text, so all six read Unsupported by design and the profile has no entry that says a SPIR-V payload is accepted.
- Identifier
CNA-GAP-065- Category
- Functional gap
- Subsystem
- Graphics & renderers
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- CNA::RendererCapabilityProfile ShaderDialect* features (GraphicsDevice::GetRendererCapabilityProfileEXT)
Expected behaviour
The RendererFeature ShaderDialect* entries are documented as 'Source-based effects consume ...', and ShaderDialectEXT::SpirV as 'Already-compiled SPIR-V bytecode, not Vulkan GLSL source text'. The profile exists so that a caller can choose a payload without trying it; for a bytecode-consuming renderer the machine-readable profile cannot say which payload it takes.
Actual behaviour at TARGET
BuildRendererCapabilityProfileEXT in GraphicsDevice.cpp sets ShaderDialectGlslDesktop/GlslEs/GlslVulkan/Hlsl/Msl/Wgsl to supported only when ExecutesShaderEffectSourceEXT() is true and the declared dialect equals that enumerator. SDL_GPU and VULKAN declare ShaderDialectEXT::SpirV, for which no feature exists, so all six read Unsupported. This is deliberate and pinned: vulkan_capability_snapshot_test.cpp asserts that dialect SpirV, source execution false and six Unsupported source dialects agree, and SdlGpuRenderer.hpp says GLSL is deliberately not claimed even in a libshaderc build, because that route compiles Vulkan-rule GLSL where the engine layer's GLSL ES is not a legal input. SDL_GPU answers ExecutesShaderEffectSourceEXT() true while VULKAN answers false, so the SDL_GPU profile shows source execution supported with no source dialect. A caller must ask GraphicsDevice::SupportsShaderLanguageEXT(SpirV, stage) instead.
Source locations
modules/graphics/src/Xna/GraphicsDevice.cpp— GraphicsDevice::BuildRendererCapabilityProfileEXT dialect mappingmodules/renderers/sdl-gpu/include/CNA/Internal/Renderers/SdlGpu/SdlGpuRenderer.hpp— GetShaderDialectEXT (SpirV) and ExecutesShaderEffectSourceEXTmodules/renderers/sdl-gpu/src/SdlGpuRenderer.cpp— SdlGpuEffectRenderer::CompileProgram (SPIR-V or libshaderc GLSL)modules/renderers/vulkan/examples/vulkan_capability_snapshot_test.cpp— snapshot pins all six dialect features unsupported
Evidence
Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry.
Independent re-verification: Checked by reading the named sources at 009d40f5; nothing was built or executed. No SDL_GPU profile snapshot exists.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
vulkan_capability_snapshot_test.cpp pins the six Unsupported answers for VULKAN; no SDL_GPU profile snapshot exists.
Regression test
Either add a SPIR-V dialect feature (and report GlslVulkan where libshaderc is built in), with SDL_GPU and VULKAN profile snapshots asserting it.
Blast radius
Engine code that selects shader source from the capability profile; it finds no usable dialect on SDL_GPU and VULKAN.
Workaround
Query SupportsShaderLanguageEXT instead of the profile's dialect features.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Known issues
- Functional gap index