Skip to content
Snippets Groups Projects
Verified Commit 470c2f42 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Some changes to make shaders compile

parent bcca2c48
Branches
No related tags found
1 merge request!114Draft: Resolve "Denoising Module"
...@@ -33,14 +33,23 @@ add_compile_definitions(${vkcv_denoising_definitions}) ...@@ -33,14 +33,23 @@ add_compile_definitions(${vkcv_denoising_definitions})
set(vkcv_denoising_shaders ${PROJECT_SOURCE_DIR}/shaders) set(vkcv_denoising_shaders ${PROJECT_SOURCE_DIR}/shaders)
include_shader(${vkcv_denoising_shaders}/reflectionDenoiser_prefilter.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
include_shader(${vkcv_denoising_shaders}/reflectionDenoiser_reproject.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
include_shader(${vkcv_denoising_shaders}/reflectionDenoiser_resolveTemporal.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
include_shader(${vkcv_denoising_shaders}/shadowDenoiser_filter.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source}) include_shader(${vkcv_denoising_shaders}/shadowDenoiser_filter.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
include_shader(${vkcv_denoising_shaders}/shadowDenoiser_prepare.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source}) include_shader(${vkcv_denoising_shaders}/shadowDenoiser_prepare.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
include_shader(${vkcv_denoising_shaders}/shadowDenoiser_tileClassification.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source}) include_shader(${vkcv_denoising_shaders}/shadowDenoiser_tileClassification.hlsl ${vkcv_denoising_include} ${vkcv_denoising_source})
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/reflectionDenoiser_prefilter.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/reflectionDenoiser_reproject.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/reflectionDenoiser_resolveTemporal.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_filter.hlsl.cxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_filter.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_prepare.hlsl.cxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_prepare.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_tileClassification.hlsl.cxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_source}/shadowDenoiser_tileClassification.hlsl.cxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/reflectionDenoiser_prefilter.hlsl.hxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/reflectionDenoiser_reproject.hlsl.hxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/reflectionDenoiser_resolveTemporal.hlsl.hxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_filter.hlsl.hxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_filter.hlsl.hxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_prepare.hlsl.hxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_prepare.hlsl.hxx)
list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_tileClassification.hlsl.hxx) list(APPEND vkcv_denoising_sources ${vkcv_denoising_include}/shadowDenoiser_tileClassification.hlsl.hxx)
......
...@@ -6,6 +6,40 @@ namespace vkcv::denoising { ...@@ -6,6 +6,40 @@ namespace vkcv::denoising {
class ReflectionDenoiser : public Denoiser { class ReflectionDenoiser : public Denoiser {
private: private:
ComputePipelineHandle m_prefilterPipeline;
ComputePipelineHandle m_reprojectPipeline;
ComputePipelineHandle m_resolveTemporalPipeline;
/**
* The descriptor set layout of the filter pipeline.
*/
DescriptorSetLayoutHandle m_prefilterDescriptorSetLayout;
/**
* The descriptor set for the filter pipeline.
*/
DescriptorSetHandle m_prefilterDescriptorSet;
/**
* The descriptor set layout of the reproject pipeline.
*/
DescriptorSetLayoutHandle m_reprojectDescriptorSetLayout;
/**
* The descriptor set for the reproject pipeline.
*/
DescriptorSetHandle m_reprojectDescriptorSet;
/**
* The descriptor set layout of the resolve temporal pipeline.
*/
DescriptorSetLayoutHandle m_resolveTemporalDescriptorSetLayout;
/**
* The descriptor set for the resolve temporal pipeline.
*/
DescriptorSetHandle m_resolveTemporalDescriptorSet;
public: public:
/** /**
* Constructor to create a reflection denoiser instance. * Constructor to create a reflection denoiser instance.
......
Subproject commit a95e739fd27f2ba17dfe83dc1cf4bd3c786cb82c Subproject commit 137a7c6fc8c5bec914cf1f0b586e1d7badb9f64c
void FFX_DNSR_Reflections_LoadNeighborhood(
int2 pixel_coordinate,
out min16float3 radiance,
out min16float variance,
out min16float3 normal,
out float depth,
int2 screen_size) {
// TODO: access image or buffer?
}
min16float FFX_DNSR_Reflections_LoadRoughness(int2 id) {
return min16float(0.0f); // TODO: access image or buffer?
}
bool FFX_DNSR_Reflections_IsGlossyReflection(min16float roughness) {
return false; // TODO: access image or buffer?
}
bool FFX_DNSR_Reflections_IsMirrorReflection(min16float roughness) {
return false; // TODO: access image or buffer?
}
min16float FFX_DNSR_Reflections_SampleAverageRadiance(float2 uv8) {
return min16float(0.0f); // TODO: access image or buffer?
}
void FFX_DNSR_Reflections_StorePrefilteredReflections(
int2 id,
min16float3 radiance,
min16float variance) {
// TODO: access image or buffer?
}
#include "ffx_denoiser_reflections_prefilter.h"
[numthreads(8, 8, 1)]
void main(int2 group_thread_id : SV_GroupThreadID,
uint group_index : SV_GroupIndex,
uint group_id : SV_GroupID) {
}
#include "ffx_denoiser_reflections_reproject.h"
[numthreads(8, 8, 1)]
void main(int2 group_thread_id : SV_GroupThreadID,
uint group_index : SV_GroupIndex,
uint group_id : SV_GroupID) {
}
#include "ffx_denoiser_reflections_resolve_temporal.h"
[numthreads(8, 8, 1)]
void main(int2 group_thread_id : SV_GroupThreadID,
uint group_index : SV_GroupIndex,
uint group_id : SV_GroupID) {
}
#include "vkcv/denoising/ReflectionDenoiser.hpp" #include "vkcv/denoising/ReflectionDenoiser.hpp"
namespace vkcv::denoising { #include <vkcv/File.hpp>
#include <vkcv/shader/HLSLCompiler.hpp>
#include "ffx_denoiser_reflections_common.h.hxx"
#include "ffx_denoiser_reflections_config.h.hxx"
#include "ffx_denoiser_reflections_prefilter.h.hxx"
#include "ffx_denoiser_reflections_reproject.h.hxx"
#include "ffx_denoiser_reflections_resolve_temporal.h.hxx"
#include "reflectionDenoiser_prefilter.hlsl.hxx"
#include "reflectionDenoiser_reproject.hlsl.hxx"
#include "reflectionDenoiser_resolveTemporal.hlsl.hxx"
namespace vkcv::denoising {
static DescriptorBindings getDescriptorBindings() {
DescriptorBindings descriptorBindings = {};
return descriptorBindings;
}
ReflectionDenoiser::ReflectionDenoiser(Core &core) :
Denoiser(core),
m_prefilterPipeline(),
m_reprojectPipeline(),
m_resolveTemporalPipeline(),
m_prefilterDescriptorSetLayout(m_core.createDescriptorSetLayout(getDescriptorBindings())),
m_prefilterDescriptorSet(m_core.createDescriptorSet(m_prefilterDescriptorSetLayout)),
m_reprojectDescriptorSetLayout(m_core.createDescriptorSetLayout(getDescriptorBindings())),
m_reprojectDescriptorSet(m_core.createDescriptorSet(m_reprojectDescriptorSetLayout)),
m_resolveTemporalDescriptorSetLayout(m_core.createDescriptorSetLayout(getDescriptorBindings())),
m_resolveTemporalDescriptorSet(m_core.createDescriptorSet(m_resolveTemporalDescriptorSetLayout))
{
vkcv::shader::HLSLCompiler compiler;
{
ShaderProgram program;
compiler.compileSourceWithHeaders(
vkcv::ShaderStage::COMPUTE,
REFLECTIONDENOISER_PREFILTER_HLSL_SHADER,
{
{ "ffx_denoiser_reflections_common.h", FFX_DENOISER_REFLECTIONS_COMMON_H_SHADER },
{ "ffx_denoiser_reflections_config.h", FFX_DENOISER_REFLECTIONS_CONFIG_H_SHADER },
{ "ffx_denoiser_reflections_prefilter.h", FFX_DENOISER_REFLECTIONS_PREFILTER_H_SHADER }
},
[&program](vkcv::ShaderStage shaderStage,
const std::filesystem::path& path) {
program.addShader(shaderStage, path);
}
);
m_prefilterPipeline = m_core.createComputePipeline({ program, {
m_prefilterDescriptorSetLayout
}});
DescriptorWrites writes;
m_core.writeDescriptorSet(m_prefilterDescriptorSet, writes);
}
{
ShaderProgram program;
compiler.compileSourceWithHeaders(
vkcv::ShaderStage::COMPUTE,
REFLECTIONDENOISER_REPROJECT_HLSL_SHADER,
{
{ "ffx_denoiser_reflections_common.h", FFX_DENOISER_REFLECTIONS_COMMON_H_SHADER },
{ "ffx_denoiser_reflections_config.h", FFX_DENOISER_REFLECTIONS_CONFIG_H_SHADER },
{ "ffx_denoiser_reflections_reproject.h", FFX_DENOISER_REFLECTIONS_REPROJECT_H_SHADER }
},
[&program](vkcv::ShaderStage shaderStage,
const std::filesystem::path& path) {
program.addShader(shaderStage, path);
}
);
m_reprojectPipeline = m_core.createComputePipeline({ program, {
m_reprojectDescriptorSetLayout
}});
DescriptorWrites writes;
m_core.writeDescriptorSet(m_reprojectDescriptorSet, writes);
}
{
ShaderProgram program;
compiler.compileSourceWithHeaders(
vkcv::ShaderStage::COMPUTE,
REFLECTIONDENOISER_RESOLVETEMPORAL_HLSL_SHADER,
{
{ "ffx_denoiser_reflections_common.h", FFX_DENOISER_REFLECTIONS_COMMON_H_SHADER },
{ "ffx_denoiser_reflections_config.h", FFX_DENOISER_REFLECTIONS_CONFIG_H_SHADER },
{ "ffx_denoiser_reflections_resolve_temporal.h", FFX_DENOISER_REFLECTIONS_RESOLVE_TEMPORAL_H_SHADER }
},
[&program](vkcv::ShaderStage shaderStage,
const std::filesystem::path& path) {
program.addShader(shaderStage, path);
}
);
m_resolveTemporalPipeline = m_core.createComputePipeline({ program, {
m_resolveTemporalDescriptorSetLayout
}});
DescriptorWrites writes;
m_core.writeDescriptorSet(m_resolveTemporalDescriptorSet, writes);
}
}
void ReflectionDenoiser::recordDenoising(const CommandStreamHandle &cmdStream, const ImageHandle &input,
const ImageHandle &output) {
}
} }
...@@ -218,7 +218,7 @@ namespace vkcv::shader { ...@@ -218,7 +218,7 @@ namespace vkcv::shader {
EShMsgVulkanRules | EShMsgVulkanRules |
EShMsgReadHlsl | EShMsgReadHlsl |
EShMsgHlslOffsets | EShMsgHlslOffsets |
EShMsgHlslEnable16BitTypes | // EShMsgHlslEnable16BitTypes |
EShMsgHlslLegalization | EShMsgHlslLegalization |
EShMsgHlslDX9Compatible EShMsgHlslDX9Compatible
); );
......
#include <vkcv/Core.hpp> #include <vkcv/Core.hpp>
#include <vkcv/camera/CameraManager.hpp> #include <vkcv/camera/CameraManager.hpp>
#include <vkcv/denoising/ReflectionDenoiser.hpp>
#include <vkcv/denoising/ShadowDenoiser.hpp> #include <vkcv/denoising/ShadowDenoiser.hpp>
#include <vkcv/gui/GUI.hpp> #include <vkcv/gui/GUI.hpp>
#include <vkcv/shader/GLSLCompiler.hpp> #include <vkcv/shader/GLSLCompiler.hpp>
...@@ -167,6 +168,7 @@ int main(int argc, const char** argv) { ...@@ -167,6 +168,7 @@ int main(int argc, const char** argv) {
core.writeDescriptorSet(descriptorSetHandles[0], writes); core.writeDescriptorSet(descriptorSetHandles[0], writes);
} }
vkcv::denoising::ReflectionDenoiser den (core);
vkcv::denoising::ShadowDenoiser denoiser (core); vkcv::denoising::ShadowDenoiser denoiser (core);
vkcv::upscaling::FSRUpscaling upscaling (core); vkcv::upscaling::FSRUpscaling upscaling (core);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment