add enable gen shader
This commit is contained in:
@@ -44,14 +44,14 @@ for shader, ty in normal_shaders:
|
|||||||
sys.exit(result.returncode)
|
sys.exit(result.returncode)
|
||||||
|
|
||||||
replacement_shaders = [
|
replacement_shaders = [
|
||||||
("trace.frag", "frag", (True, False, False)),
|
("trace.frag", "frag"),
|
||||||
("normals.frag", "frag", (True, False, False)),
|
("normals.frag", "frag"),
|
||||||
("fuzz.comp", "comp", (True, True, True)),
|
("fuzz.comp", "comp"),
|
||||||
|
("enable_gen.comp", "comp"),
|
||||||
]
|
]
|
||||||
|
|
||||||
for shader, ty, usage in replacement_shaders:
|
for shader, ty in replacement_shaders:
|
||||||
print(f"{SHADERS_IN}/{shader}.glsl")
|
print(f"{SHADERS_IN}/{shader}.glsl")
|
||||||
(uses_point, uses_interval, uses_gradient) = usage
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[
|
[
|
||||||
"glslangValidator",
|
"glslangValidator",
|
||||||
|
|||||||
@@ -577,7 +577,9 @@ impl App {
|
|||||||
let block_enable_allocator = Arc::new(Mutex::new(SubbufferAllocator::new(
|
let block_enable_allocator = Arc::new(Mutex::new(SubbufferAllocator::new(
|
||||||
memory_allocator.clone(),
|
memory_allocator.clone(),
|
||||||
SubbufferAllocatorCreateInfo {
|
SubbufferAllocatorCreateInfo {
|
||||||
buffer_usage: BufferUsage::UNIFORM_BUFFER | BufferUsage::TRANSFER_DST,
|
buffer_usage: BufferUsage::UNIFORM_BUFFER
|
||||||
|
| BufferUsage::STORAGE_BUFFER
|
||||||
|
| BufferUsage::TRANSFER_DST,
|
||||||
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE,
|
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#ifndef compute_prepass_include
|
||||||
|
#define compute_prepass_include
|
||||||
|
|
||||||
|
#extension GL_GOOGLE_include_directive:require
|
||||||
|
#include "include.glsl"
|
||||||
|
|
||||||
|
layout(set = 1, binding = 0) restrict buffer Object {
|
||||||
|
uvec4 enable[(SPEC_MAXIMUM_SUBDIVISION * SPEC_MAXIMUM_SUBDIVISION * SPEC_MAXIMUM_SUBDIVISION) / (4 * 32)];
|
||||||
|
vec3 dimensions;
|
||||||
|
vec3 lowest_corner;
|
||||||
|
uint material;
|
||||||
|
uint subdivision_log2;
|
||||||
|
float farplane;
|
||||||
|
vec3 colour;
|
||||||
|
float metallic;
|
||||||
|
float roughness;
|
||||||
|
} object_uniforms;
|
||||||
|
|
||||||
|
float scene(vec4 p) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 interval_scene(vec4 pl, vec4 ph) {
|
||||||
|
return vec2(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 gradient_scene(vec4 p) {
|
||||||
|
return vec4(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
#version 460
|
||||||
|
#extension GL_GOOGLE_include_directive:require
|
||||||
|
#include "compute_prepass_include.glsl"
|
||||||
|
|
||||||
|
layout(local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
if (SPEC_BRUTE_FORCE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uvec3 total_invocations = gl_NumWorkGroups * gl_WorkGroupSize;
|
||||||
|
vec3 internal_pos = vec3(gl_GlobalInvocationID) / vec3(total_invocations);
|
||||||
|
|
||||||
|
vec3 box_dimensions = object_uniforms.dimensions / vec3(total_invocations);
|
||||||
|
vec3 low_corner = object_uniforms.lowest_corner + (box_dimensions * internal_pos);
|
||||||
|
vec3 high_corner = object_uniforms.lowest_corner + (box_dimensions * (internal_pos + 1));
|
||||||
|
|
||||||
|
vec2 interval = interval_scene(
|
||||||
|
vec4(low_corner, camera_uniforms.campos_and_time.w),
|
||||||
|
vec4(high_corner, camera_uniforms.campos_and_time.w)
|
||||||
|
);
|
||||||
|
|
||||||
|
bool enable = (interval.x < 0) && (interval.y > 0);
|
||||||
|
|
||||||
|
uint base_index = (gl_GlobalInvocationID.z * total_invocations.x * total_invocations.y) +
|
||||||
|
(gl_GlobalInvocationID.y * total_invocations.x) + gl_GlobalInvocationID.x;
|
||||||
|
|
||||||
|
switch ((base_index >> 5) & 3) {
|
||||||
|
default:
|
||||||
|
case 0:
|
||||||
|
if (enable) {
|
||||||
|
atomicOr(object_uniforms.enable[base_index >> 7].x, (1 << (base_index & 31)));
|
||||||
|
} else {
|
||||||
|
atomicAnd(object_uniforms.enable[base_index >> 7].x, (~(1 << (base_index & 31))));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (enable) {
|
||||||
|
atomicOr(object_uniforms.enable[base_index >> 7].y, (1 << (base_index & 31)));
|
||||||
|
} else {
|
||||||
|
atomicAnd(object_uniforms.enable[base_index >> 7].y, (~(1 << (base_index & 31))));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (enable) {
|
||||||
|
atomicOr(object_uniforms.enable[base_index >> 7].z, (1 << (base_index & 31)));
|
||||||
|
} else {
|
||||||
|
atomicAnd(object_uniforms.enable[base_index >> 7].z, (~(1 << (base_index & 31))));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (enable) {
|
||||||
|
atomicOr(object_uniforms.enable[base_index >> 7].w, (1 << (base_index & 31)));
|
||||||
|
} else {
|
||||||
|
atomicAnd(object_uniforms.enable[base_index >> 7].w, (~(1 << (base_index & 31))));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user