Remove compute/ray_query strategy
This was added largely to test if it would help Arc 770 to function. It didn't help, and I've confirmed A770 has functional ray tracing pipelines in Quake 2 RTXmain
parent
9c52878454
commit
338c946375
@ -1,6 +1,4 @@
|
||||
mod ray_query_pipeline;
|
||||
mod ray_tracing_pipeline;
|
||||
mod slots;
|
||||
|
||||
pub use ray_query_pipeline::RayQueryPipeline;
|
||||
pub use ray_tracing_pipeline::RayTracingPipeline;
|
||||
|
@ -1,125 +0,0 @@
|
||||
use super::slots::create_and_bind_slots;
|
||||
use crate::{path_tracer::Pipeline, scenes::Scene};
|
||||
use ash::vk;
|
||||
use core::slice;
|
||||
use kea_gpu::{
|
||||
commands::CommandBufferRecorder,
|
||||
compute::ComputePipeline,
|
||||
presentation::PresentationFeature,
|
||||
shaders::ShaderModule,
|
||||
slots::{SlotBindings, SlotLayout},
|
||||
storage::images::{ImageLayout, ImageView},
|
||||
Kea,
|
||||
};
|
||||
use kea_renderer_shaders::{path_tracer::entrypoints::PushConstants, SlotId};
|
||||
|
||||
pub struct RayQueryPipeline {
|
||||
pipeline: ComputePipeline<SlotId>,
|
||||
slot_bindings: SlotBindings<SlotId>,
|
||||
size: (u32, u32),
|
||||
}
|
||||
|
||||
impl RayQueryPipeline {
|
||||
pub fn new(kea: &Kea, scene: &Scene) -> Self {
|
||||
let modules = ShaderModule::new_multimodule(kea.device(), "./kea_renderer_shaders");
|
||||
|
||||
let pipeline = ComputePipeline::<SlotId>::new(
|
||||
kea.device().clone(),
|
||||
SlotLayout::new(kea_renderer_shaders::SLOTS.to_vec()),
|
||||
modules["path_tracer::entrypoints::generate_rays_compute"]
|
||||
.entry_point("path_tracer::entrypoints::generate_rays_compute"),
|
||||
);
|
||||
|
||||
let size = kea.feature::<PresentationFeature>().presenter().size();
|
||||
let slot_bindings = create_and_bind_slots(
|
||||
kea,
|
||||
scene,
|
||||
pipeline.slot_layout(),
|
||||
pipeline.layout().descriptor_set_layout(),
|
||||
);
|
||||
|
||||
Self {
|
||||
pipeline,
|
||||
slot_bindings,
|
||||
size,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Pipeline for RayQueryPipeline {
|
||||
fn bind(&self, cmd: &CommandBufferRecorder, iteration: u64) {
|
||||
cmd.bind_pipeline(vk::PipelineBindPoint::COMPUTE, &self.pipeline.pipeline());
|
||||
cmd.bind_descriptor_sets(
|
||||
vk::PipelineBindPoint::COMPUTE,
|
||||
&self.pipeline.layout(),
|
||||
slice::from_ref(&self.slot_bindings.descriptor_set()),
|
||||
);
|
||||
let constants = PushConstants { iteration };
|
||||
|
||||
let (_, constants, _) = unsafe { slice::from_ref(&constants).align_to::<u8>() };
|
||||
cmd.push_constants(
|
||||
self.pipeline.layout(),
|
||||
vk::ShaderStageFlags::COMPUTE,
|
||||
constants,
|
||||
);
|
||||
}
|
||||
|
||||
fn trace_rays(&self, cmd: &CommandBufferRecorder) {
|
||||
cmd.dispatch((self.size.0 * self.size.1 / 32, 1, 1));
|
||||
}
|
||||
|
||||
fn copy_to_swapchain(&self, cmd: &CommandBufferRecorder, swapchain_image: &ImageView) {
|
||||
cmd.transition_image_layout(
|
||||
self.slot_bindings.bound_image(SlotId::OutputImage).image(),
|
||||
ImageLayout::TransferSource,
|
||||
vk::AccessFlags2::SHADER_STORAGE_WRITE,
|
||||
vk::AccessFlags2::TRANSFER_READ,
|
||||
vk::PipelineStageFlags2::COMPUTE_SHADER,
|
||||
vk::PipelineStageFlags2::COPY,
|
||||
);
|
||||
|
||||
let copy_region = vk::ImageCopy::builder()
|
||||
.src_subresource(vk::ImageSubresourceLayers {
|
||||
aspect_mask: vk::ImageAspectFlags::COLOR,
|
||||
base_array_layer: 0,
|
||||
mip_level: 0,
|
||||
layer_count: 1,
|
||||
})
|
||||
.dst_subresource(vk::ImageSubresourceLayers {
|
||||
aspect_mask: vk::ImageAspectFlags::COLOR,
|
||||
base_array_layer: 0,
|
||||
mip_level: 0,
|
||||
layer_count: 1,
|
||||
})
|
||||
.extent(vk::Extent3D {
|
||||
width: self.size.0,
|
||||
height: self.size.1,
|
||||
depth: 1,
|
||||
})
|
||||
.build();
|
||||
|
||||
cmd.copy_image(
|
||||
&self.slot_bindings.bound_image(SlotId::OutputImage).image(),
|
||||
&swapchain_image.image(),
|
||||
©_region,
|
||||
);
|
||||
|
||||
cmd.transition_image_layout(
|
||||
self.slot_bindings.bound_image(SlotId::OutputImage).image(),
|
||||
ImageLayout::General,
|
||||
vk::AccessFlags2::TRANSFER_READ,
|
||||
vk::AccessFlags2::SHADER_STORAGE_WRITE,
|
||||
vk::PipelineStageFlags2::COPY,
|
||||
vk::PipelineStageFlags2::COMPUTE_SHADER,
|
||||
);
|
||||
|
||||
cmd.transition_image_layout(
|
||||
self.slot_bindings.bound_image(SlotId::LightImage).image(),
|
||||
ImageLayout::General,
|
||||
vk::AccessFlags2::SHADER_STORAGE_WRITE | vk::AccessFlags2::SHADER_STORAGE_READ,
|
||||
vk::AccessFlags2::SHADER_STORAGE_WRITE | vk::AccessFlags2::SHADER_STORAGE_READ,
|
||||
vk::PipelineStageFlags2::COMPUTE_SHADER,
|
||||
vk::PipelineStageFlags2::COMPUTE_SHADER,
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue