GPU tessellation: the shader's basis slots follow the CPU evaluator's highest degree

tess.wgsl sized its basis arrays for degree 7 by hand. It now holds 17 slots, degree 16 as the
CPU evaluator, and a test fails when the two drift apart again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-28 21:41:23 -04:00
committed by Irakli Kourtis
parent b91ad9de25
commit 175b4f2acd
2 changed files with 10 additions and 2 deletions
+2 -2
View File
@@ -7,8 +7,8 @@
const PLANE: u32 = 0u;
const NURBS: u32 = 1u;
const REVOLVED: u32 = 2u;
// Basis slots for the highest degree (MAX_SPLINE_DEGREE = 7).
const W: u32 = 8u;
// Basis slots for the highest degree (MAX_SPLINE_DEGREE = 16).
const W: u32 = 17u;
struct Surface {
kind: u32,
+8
View File
@@ -96,6 +96,14 @@ fn the_hlsl_for_fxc_has_no_arrays_fxc_must_unroll_loops_for() {
}
}
/// The shader's basis slots hold the highest degree the CPU evaluator takes, so every surface
/// the CPU evaluates the GPU evaluates too.
#[test]
fn the_shader_takes_every_degree_the_cpu_evaluator_does() {
let slots = format!("const W: u32 = {}u;", solidcraft_geom::bspline::MAX_SPLINE_DEGREE + 1);
assert!(SHADER.contains(&slots), "tess.wgsl must declare `{slots}`");
}
fn ok<T, E: std::fmt::Debug>(r: std::result::Result<T, E>) -> T {
match r {
Ok(v) => v,