--wip-- [skip ci]
This commit is contained in:
+1
-1
@@ -5,7 +5,7 @@ layout(push_constant) uniform PushConstantData {
|
||||
mat4 world;
|
||||
vec3 dimensions;
|
||||
vec3 lowest_corner;
|
||||
uint enable[16];
|
||||
uint enable[16*16*2];
|
||||
} pc;
|
||||
|
||||
layout(set = 0, binding = 0) uniform Lights {
|
||||
|
||||
+58
-24
@@ -319,45 +319,78 @@ fn interval_check(csg: &CSG, push_constants: &mut PushConstantData) {
|
||||
push_constants.dimensions = (highest_corner - lowest_corner).to_array().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 y in 0..8 {
|
||||
for x in 0..16 {
|
||||
for y in 0..16 {
|
||||
for z in 0..2 {
|
||||
let interval_input_z: Interval = Interval::new_unchecked(
|
||||
interpreter::Value::from_array([
|
||||
(0.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(1.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(2.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(3.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(4.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(5.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(6.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(7.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(((z as f32) / 2.0)
|
||||
+ (0.0 / 16.0)) * push_constants.dimensions[2]
|
||||
+ push_constants.lowest_corner[2],
|
||||
(((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],
|
||||
]),
|
||||
interpreter::Value::from_array([
|
||||
(1.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(2.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(3.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(4.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(5.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(6.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(7.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
(8.0 / 8.0) * push_constants.dimensions[2] + push_constants.lowest_corner[2],
|
||||
((((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 output = interpreter.scene(
|
||||
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],
|
||||
((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],
|
||||
),
|
||||
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],
|
||||
((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],
|
||||
),
|
||||
interval_input_z,
|
||||
@@ -366,7 +399,8 @@ fn interval_check(csg: &CSG, push_constants: &mut PushConstantData) {
|
||||
let output = ((output.lower().simd_le(VALUE_0) & output.upper().simd_ge(VALUE_0))
|
||||
.to_bitmask() as u32)
|
||||
<< ((y & 0b11) * 8);
|
||||
push_constants.enable[(x << 1) | (y >> 2)] |= output;
|
||||
push_constants.enable[(x << 2) | (y >> 2)] |= output;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user