mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-06 20:02:16 +00:00
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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user