Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions 31_HLSLPathTracer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ include("${CMAKE_CURRENT_SOURCE_DIR}/pt.cmake")
include("${CMAKE_CURRENT_SOURCE_DIR}/pt.variant_ids.cmake")

if(NBL_BUILD_IMGUI)
# EX31 keeps triangle polygon-method variants as separate precompiled entrypoints.
# EX31 keeps triangle polygon-method variants as separate precompiled persistent entrypoints.
# This keeps polygon-method choice compile-time and avoids runtime shader switching on this axis.
# On AMD Ryzen 5 5600G with Radeon Graphics (6C/12T),
# a Visual Studio Debug x64 full rebuild of the SPIR-V project completed in about 19.789 s.
Expand Down Expand Up @@ -60,15 +60,12 @@ if(NBL_BUILD_IMGUI)
)

# Keep the payload flat and explicit here. Once Nabla PR #988 lands, these per-rule compile axes should move to first-class packaged-variant support there.
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.sphere.proxy.hlsl" KEY "pt.compute.sphere" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_SPHERE}" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_COMBINED}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.sphere.rwmc.proxy.hlsl" KEY "pt.compute.sphere.rwmc" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_SPHERE}" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_COMBINED}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.triangle.linear.proxy.hlsl" KEY "pt.compute.triangle.linear" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_LINEAR}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.sphere.proxy.hlsl" KEY "pt.compute.sphere" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_SPHERE}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.sphere.rwmc.proxy.hlsl" KEY "pt.compute.sphere.rwmc" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_SPHERE}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.triangle.persistent.proxy.hlsl" KEY "pt.compute.triangle.persistent" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_PERSISTENT}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.triangle.rwmc.linear.proxy.hlsl" KEY "pt.compute.triangle.rwmc.linear" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_LINEAR}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.triangle.rwmc.persistent.proxy.hlsl" KEY "pt.compute.triangle.rwmc.persistent" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_PERSISTENT}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.rectangle.rwmc.linear.proxy.hlsl" KEY "pt.compute.rectangle.rwmc.linear" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_RECTANGLE}" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_LINEAR}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.rectangle.rwmc.persistent.proxy.hlsl" KEY "pt.compute.rectangle.rwmc.persistent" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_RECTANGLE}" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_PERSISTENT}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.rectangle.proxy.hlsl" KEY "pt.compute.rectangle" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_RECTANGLE}" "-DPT_VARIANT_ENTRYPOINT_KIND=${PT_ENTRYPOINT_COMBINED}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.rectangle.rwmc.persistent.proxy.hlsl" KEY "pt.compute.rectangle.rwmc.persistent" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=1" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_RECTANGLE}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.compute.rectangle.proxy.hlsl" KEY "pt.compute.rectangle" COMPILE_OPTIONS "-DPT_VARIANT_USE_RWMC=0" "-DPT_VARIANT_SCENE_KIND=${PT_SCENE_RECTANGLE}")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/resolve.comp.hlsl" KEY "pt.compute.resolve")
PT_APPEND_SPIRV_RULE(VAR JSON INPUT "app_resources/hlsl/spirv/pt.misc.proxy.hlsl" KEY "pt.misc")
PT_FINALIZE_JSON_PAYLOAD(INOUT JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ void tracePixel(int32_t2 coords)
}

scene_type scene;
scene.updateLight(renderPushConstants.lightMatrix());
scene.updateLight(renderPushConstants.generalPurposeLightMatrix);

typename variant_types::raygen_type rayGen;
rayGen.pixOffsetParam = pixOffsetParam;
Expand Down
18 changes: 2 additions & 16 deletions 31_HLSLPathTracer/app_resources/hlsl/render_common.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,14 @@ NBL_CONSTEXPR uint32_t MaxSamplesLog2 = MAX_SAMPLES_LOG2;

struct RenderPushConstants
{
float32_t3x4 lightMatrix()
{
float32_t4x3 retval;
retval[0] = lightX;
retval[1] = lightY;
retval[2] = cross(lightX,lightY)*lightZscale;
retval[3] = lightPos;
return hlsl::transpose(retval);
}

uint64_t pSampleSequence;
float32_t4x4 invMVP;
float32_t3 lightX;
float32_t3 lightY;
float32_t lightZscale;
float32_t3 lightPos;
float32_t3x4 generalPurposeLightMatrix;
uint64_t pSampleSequence;
// TODO: compact a bit and refactor
uint32_t sampleCount : MAX_SAMPLES_LOG2;
uint32_t depth : MAX_DEPTH_LOG2;
uint32_t sequenceSampleCountLog2 : 5;
uint32_t unused : 13;
uint32_t unused1;
};
#undef MAX_SAMPLES_LOG2
#undef MAX_DEPTH_LOG2
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,27 +1,13 @@
#pragma once

#if !defined(PT_VARIANT_USE_RWMC) || !defined(PT_VARIANT_SCENE_KIND) || !defined(PT_VARIANT_ENTRYPOINT_KIND)
#if !defined(PT_VARIANT_USE_RWMC) || !defined(PT_VARIANT_SCENE_KIND)
#error Missing path tracer variant compile options
#endif

#define PT_VARIANT_SCENE_SPHERE 0
#define PT_VARIANT_SCENE_RECTANGLE 2
#define PT_VARIANT_ENTRYPOINT_COMBINED 0
#define PT_VARIANT_ENTRYPOINT_LINEAR 1
#define PT_VARIANT_ENTRYPOINT_PERSISTENT 2

#if PT_VARIANT_ENTRYPOINT_KIND == PT_VARIANT_ENTRYPOINT_COMBINED
#define PATH_TRACER_ENABLE_LINEAR 1
#define PATH_TRACER_ENABLE_PERSISTENT 1
#elif PT_VARIANT_ENTRYPOINT_KIND == PT_VARIANT_ENTRYPOINT_LINEAR
#define PATH_TRACER_ENABLE_LINEAR 1
#define PATH_TRACER_ENABLE_PERSISTENT 0
#elif PT_VARIANT_ENTRYPOINT_KIND == PT_VARIANT_ENTRYPOINT_PERSISTENT
#define PATH_TRACER_ENABLE_LINEAR 0
#define PATH_TRACER_ENABLE_PERSISTENT 1
#else
#error Unsupported PT_VARIANT_ENTRYPOINT_KIND
#endif

#if PT_VARIANT_USE_RWMC
#define PATH_TRACER_VARIANT_USE_RWMC true
Expand Down Expand Up @@ -52,13 +38,10 @@
#include "nbl/this_example/render_variant_config.hlsl"
#include "compute_render_scene_impl.hlsl"

#if PT_VARIANT_ENTRYPOINT_KIND == PT_VARIANT_ENTRYPOINT_COMBINED
#include "compute.render.linear.entrypoints.hlsl"
#define PATH_TRACER_ENTRYPOINT_POLYGON_METHOD PPM_SOLID_ANGLE
#include "compute.render.persistent.entrypoints.hlsl"
#elif PT_VARIANT_ENTRYPOINT_KIND == PT_VARIANT_ENTRYPOINT_LINEAR
#include "compute.render.linear.entrypoints.hlsl"
#else
#if PT_VARIANT_SCENE_KIND == PT_VARIANT_SCENE_RECTANGLE
#define PATH_TRACER_ENTRYPOINT_NAME mainPersistentArea
#define PATH_TRACER_ENTRYPOINT_POLYGON_METHOD PPM_AREA
#include "compute.render.persistent.entrypoints.hlsl"
#endif

Expand Down
19 changes: 14 additions & 5 deletions 31_HLSLPathTracer/include/nbl/this_example/render_variant_info.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ struct SRenderVariantInfo
const char* entryPoint;
};

static constexpr const char* getDefaultRenderEntryPointName(const bool persistentWorkGroups)
static constexpr const char* getDefaultRenderEntryPointName(const bool)
{
return persistentWorkGroups ? "mainPersistent" : "main";
return "mainPersistent";
}

static constexpr SRenderVariantInfo getRenderVariantInfo(const E_LIGHT_GEOMETRY geometry, const bool persistentWorkGroups, const E_POLYGON_METHOD requestedMethod)
Expand All @@ -28,15 +28,24 @@ static constexpr SRenderVariantInfo getRenderVariantInfo(const E_LIGHT_GEOMETRY
switch (requestedMethod)
{
case EPM_AREA:
return { EPM_AREA, EPM_AREA, persistentWorkGroups ? "mainPersistentArea" : "mainArea" };
return { EPM_AREA, EPM_AREA, "mainPersistentArea" };
case EPM_SOLID_ANGLE:
return { EPM_SOLID_ANGLE, EPM_SOLID_ANGLE, persistentWorkGroups ? "mainPersistentSolidAngle" : "mainSolidAngle" };
return { EPM_SOLID_ANGLE, EPM_SOLID_ANGLE, "mainPersistentSolidAngle" };
case EPM_PROJECTED_SOLID_ANGLE:
default:
return { EPM_PROJECTED_SOLID_ANGLE, EPM_PROJECTED_SOLID_ANGLE, defaultEntryPoint };
}
case ELG_RECTANGLE:
return { EPM_SOLID_ANGLE, EPM_SOLID_ANGLE, defaultEntryPoint };
switch (requestedMethod)
{
case EPM_AREA:
return { EPM_AREA, EPM_AREA, "mainPersistentArea" };
case EPM_SOLID_ANGLE:
return { EPM_SOLID_ANGLE, EPM_SOLID_ANGLE, defaultEntryPoint };
case EPM_PROJECTED_SOLID_ANGLE:
default:
return { EPM_SOLID_ANGLE, EPM_SOLID_ANGLE, defaultEntryPoint };
}
default:
return { EPM_PROJECTED_SOLID_ANGLE, EPM_PROJECTED_SOLID_ANGLE, defaultEntryPoint };
}
Expand Down
Loading