aboutsummaryrefslogtreecommitdiff
path: root/demo/Shaders/customLightingCS.hlsl
diff options
context:
space:
mode:
Diffstat (limited to 'demo/Shaders/customLightingCS.hlsl')
-rw-r--r--demo/Shaders/customLightingCS.hlsl87
1 files changed, 87 insertions, 0 deletions
diff --git a/demo/Shaders/customLightingCS.hlsl b/demo/Shaders/customLightingCS.hlsl
new file mode 100644
index 0000000..d9f95ee
--- /dev/null
+++ b/demo/Shaders/customLightingCS.hlsl
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2014-2017, NVIDIA CORPORATION. All rights reserved.
+*
+* NVIDIA CORPORATION and its licensors retain all intellectual property
+* and proprietary rights in and to this software, related documentation
+* and any modifications thereto. Any use, reproduction, disclosure or
+* distribution of this software and related documentation without an express
+* license agreement from NVIDIA CORPORATION is strictly prohibited.
+*/
+
+#define THREAD_DIM_X 8
+#define THREAD_DIM_Y 8
+#define THREAD_DIM_Z 8
+
+/// Begin Samplers supplied by ComputeContext
+SamplerState borderSampler : register(s0);
+SamplerState borderPointSampler : register(s1);
+SamplerState wrapSampler : register(s2);
+SamplerState wrapPointSampler : register(s3);
+SamplerState clampSampler : register(s4);
+SamplerState clampPointSampler : register(s5);
+/// End Samplers supplied by ComputeContext
+
+typedef uint4 NvFlowUint4;
+typedef float4 NvFlowFloat4;
+
+#include "../DemoApp/flowShaderParams.h"
+
+struct Light
+{
+ float4 location;
+ float4 intensity;
+ float4 bias;
+ float4 falloff;
+};
+
+cbuffer params : register(b0)
+{
+ NvFlowShaderLinearParams exportParams;
+ NvFlowShaderLinearParams importParams;
+
+ Light light[3];
+};
+
+Buffer<uint> exportBlockList : register(t0);
+Texture3D<uint> exportBlockTable : register(t1);
+Texture3D<float4> exportData : register(t2);
+
+Buffer<uint> importBlockList : register(t3);
+Texture3D<uint> importBlockTable : register(t4);
+RWTexture3D<float4> importDataRW : register(u0);
+
+NV_FLOW_DISPATCH_ID_TO_VIRTUAL(importBlockList, importParams);
+
+NV_FLOW_VIRTUAL_TO_REAL_LINEAR(VirtualToRealExport, exportBlockTable, exportParams);
+NV_FLOW_VIRTUAL_TO_REAL(VirtualToRealImport, importBlockTable, importParams);
+
+float4 applyLight(uniform Light light, float3 vidxNorm)
+{
+ float3 offset = vidxNorm.xyz - light.location.xyz;
+ float dist2 = dot(offset.xyz, offset.xyz);
+ return light.intensity * light.bias / (light.bias + light.falloff * dist2);
+}
+
+[numthreads(THREAD_DIM_X, THREAD_DIM_Y, THREAD_DIM_Z)]
+void customLightingCS(uint3 tidx : SV_DispatchThreadID)
+{
+ int3 vidx = DispatchIDToVirtual(tidx);
+ float3 vidxf = float3(vidx)+0.5f.xxx;
+
+ float3 vidxNorm = 2.f * vidxf * exportParams.vdimInv.xyz - 1.f;
+
+ float3 ridxExport = VirtualToRealExport(vidxf);
+ float4 value = exportData.SampleLevel(borderSampler,exportParams.dimInv.xyz * ridxExport,0);
+ float temp = value.x;
+
+ float4 color = float4(0.1f * temp, 0.1f * temp, 0.1f * temp, 0.25f);
+
+ color += applyLight(light[0], vidxNorm);
+ color += applyLight(light[1], vidxNorm);
+ color += applyLight(light[2], vidxNorm);
+
+ color.w *= 0.25f * max(temp - 0.25f, 0.f);
+
+ int3 ridxImport = VirtualToRealImport(vidx);
+ importDataRW[ridxImport] = color;
+} \ No newline at end of file