--wip-- [skip ci]

This commit is contained in:
2025-06-26 20:56:20 +01:00
parent 544de3165a
commit f0d817f144
2 changed files with 80 additions and 46 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ layout(push_constant) uniform PushConstantData {
mat4 world; mat4 world;
vec3 dimensions; vec3 dimensions;
vec3 lowest_corner; vec3 lowest_corner;
uint enable[16]; uint enable[16*16*2];
} pc; } pc;
layout(set = 0, binding = 0) uniform Lights { layout(set = 0, binding = 0) uniform Lights {
+79 -45
View File
@@ -319,54 +319,88 @@ fn interval_check(csg: &CSG, push_constants: &mut PushConstantData) {
push_constants.dimensions = (highest_corner - lowest_corner).to_array().into(); push_constants.dimensions = (highest_corner - lowest_corner).to_array().into();
push_constants.lowest_corner = lowest_corner.into(); push_constants.lowest_corner = lowest_corner.into();
push_constants.enable = [0; 16]; push_constants.enable = [0; 16 * 16 * 2];
for x in 0..8 { for x in 0..16 {
for y in 0..8 { for y in 0..16 {
let interval_input_z: Interval = Interval::new_unchecked( for z in 0..2 {
interpreter::Value::from_array([ let interval_input_z: Interval = Interval::new_unchecked(
(0.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], interpreter::Value::from_array([
(1.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
(2.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + (0.0 / 16.0)) * push_constants.dimensions[2]
(3.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + push_constants.lowest_corner[2],
(4.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
(5.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + (1.0 / 16.0)) * push_constants.dimensions[2]
(6.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + push_constants.lowest_corner[2],
(7.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
]), + (2.0 / 16.0)) * push_constants.dimensions[2]
interpreter::Value::from_array([ + push_constants.lowest_corner[2],
(1.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
(2.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + (3.0 / 16.0)) * push_constants.dimensions[2]
(3.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + push_constants.lowest_corner[2],
(4.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
(5.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + (4.0 / 16.0)) * push_constants.dimensions[2]
(6.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + push_constants.lowest_corner[2],
(7.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], (((z as f32) / 2.0)
(8.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2], + (5.0 / 16.0)) * push_constants.dimensions[2]
]), + push_constants.lowest_corner[2],
); (((z as f32) / 2.0)
+ (6.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (7.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
]),
interpreter::Value::from_array([
((((z as f32) / 2.0)
+ (1.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (2.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (3.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (4.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (5.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (6.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (7.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
(((z as f32) / 2.0)
+ (8.0 / 16.0)) * push_constants.dimensions[2]
+ push_constants.lowest_corner[2],
]),
);
let mut interpreter = IntervalInterpreter::new(csg); let mut interpreter = IntervalInterpreter::new(csg);
let output = interpreter.scene( let output = interpreter.scene(
Interval::const_splat2( Interval::const_splat2(
(x as f32 / 8.0) * push_constants.dimensions[0] (x as f32 / 16.0) * push_constants.dimensions[0]
+ push_constants.lowest_corner[0], + push_constants.lowest_corner[0],
((x + 1) as f32 / 8.0) * push_constants.dimensions[0] ((x + 1) as f32 / 16.0) * push_constants.dimensions[0]
+ push_constants.lowest_corner[0], + push_constants.lowest_corner[0],
), ),
Interval::const_splat2( Interval::const_splat2(
(y as f32 / 8.0) * push_constants.dimensions[1] (y as f32 / 16.0) * push_constants.dimensions[1]
+ push_constants.lowest_corner[1], + push_constants.lowest_corner[1],
((y + 1) as f32 / 8.0) * push_constants.dimensions[1] ((y + 1) as f32 / 16.0) * push_constants.dimensions[1]
+ push_constants.lowest_corner[1], + push_constants.lowest_corner[1],
), ),
interval_input_z, interval_input_z,
); );
let output = ((output.lower().simd_le(VALUE_0) & output.upper().simd_ge(VALUE_0)) let output = ((output.lower().simd_le(VALUE_0) & output.upper().simd_ge(VALUE_0))
.to_bitmask() as u32) .to_bitmask() as u32)
<< ((y & 0b11) * 8); << ((y & 0b11) * 8);
push_constants.enable[(x << 1) | (y >> 2)] |= output; push_constants.enable[(x << 2) | (y >> 2)] |= output;
}
} }
} }
} }