| … | 198 unchanged lines hidden | ||
| 199 | 199 | - stencil clips | |
| 200 | 200 | - sampled depth/color targets | |
| 201 | 201 | ||
| 202 | + | Capabilities describe **implemented gpu support**, not raw device support. A backend must only report a flag or limit when the public `gpu` API, IR lowering, and backend implementation can execute that behavior end-to-end. Raw driver limits may be higher; those remain internal until the `gpu` executor can use them safely. | |
| 203 | + | ||
| 204 | + | Current conservative limits: | |
| 205 | + | ||
| 206 | + | - `max_color_targets` reports the implemented color attachment count. It remains `1` until MRT lowering, render pass/framebuffer arrays, per-attachment blend state, and all backends support multiple color outputs. | |
| 207 | + | - `max_push_constant_size` reports the implemented push-constant byte limit for the selected backend. Pipeline and compute-shader creation must reject sizes above this limit. | |
| 208 | + | - `Multiple_Render_Targets`, `Indirect_Draws`, and `Stencil_Clips` remain false until those IR paths are fully implemented across all backends. | |
| 209 | + | ||
| 202 | 210 | Public API must not expose Vulkan/D3D-specific terms except through backend-only layers. | |
| 203 | 211 | ||
| 204 | 212 | OpenGL is a backend target, not a separate public API. It requires OpenGL 4.5 core, uses the OpenGL GLSL 450 Luma target, keeps one thread-affine current context for backend calls, flattens `(group, binding)` resource coordinates into documented GL binding points, and reserves one UBO binding for push-constant emulation. | |
| … | 21 unchanged lines hidden | ||