From b5836181ae4c975686e3611bea7ded4bf09e71dc Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Sun, 12 Nov 2017 14:05:02 +0000 Subject: [PATCH] ocean updates --- WickedEngine/ShaderInterop_Ocean.h | 2 ++ WickedEngine/WickedEngine_SHADERS.vcxproj | 4 ---- .../WickedEngine_SHADERS.vcxproj.filters | 6 ------ WickedEngine/oceanQuadVS.hlsl | 11 ---------- WickedEngine/oceanSimulatorCS.hlsl | 16 ++------------ .../oceanUpdateDisplacementMapCS.hlsl | 4 ++-- .../oceanUpdateGradientFoldingCS.hlsl | 5 +++-- WickedEngine/oceanWaveGenHF.hlsli | 21 ------------------- WickedEngine/wiOcean.cpp | 11 ++++------ 9 files changed, 13 insertions(+), 67 deletions(-) delete mode 100644 WickedEngine/oceanQuadVS.hlsl delete mode 100644 WickedEngine/oceanWaveGenHF.hlsli diff --git a/WickedEngine/ShaderInterop_Ocean.h b/WickedEngine/ShaderInterop_Ocean.h index db8f09a09..079ba974d 100644 --- a/WickedEngine/ShaderInterop_Ocean.h +++ b/WickedEngine/ShaderInterop_Ocean.h @@ -2,6 +2,8 @@ #define _SHADERINTEROP_OCEAN_H_ #include "ShaderInterop.h" +#define OCEAN_COMPUTE_TILESIZE 16 + // Simulation constants: CBUFFER(Ocean_Simulation_ImmutableCB, CBSLOT_OTHER_OCEAN_SIMULATION_IMMUTABLE) diff --git a/WickedEngine/WickedEngine_SHADERS.vcxproj b/WickedEngine/WickedEngine_SHADERS.vcxproj index 1e26b10ad..fb22c02cf 100644 --- a/WickedEngine/WickedEngine_SHADERS.vcxproj +++ b/WickedEngine/WickedEngine_SHADERS.vcxproj @@ -33,7 +33,6 @@ - @@ -452,9 +451,6 @@ Vertex - - Vertex - Compute 5.0 diff --git a/WickedEngine/WickedEngine_SHADERS.vcxproj.filters b/WickedEngine/WickedEngine_SHADERS.vcxproj.filters index 1ba51d6d4..a19b82645 100644 --- a/WickedEngine/WickedEngine_SHADERS.vcxproj.filters +++ b/WickedEngine/WickedEngine_SHADERS.vcxproj.filters @@ -115,9 +115,6 @@ HF - - HF - HF @@ -663,9 +660,6 @@ CS - - VS - VS diff --git a/WickedEngine/oceanQuadVS.hlsl b/WickedEngine/oceanQuadVS.hlsl deleted file mode 100644 index f71494cf4..000000000 --- a/WickedEngine/oceanQuadVS.hlsl +++ /dev/null @@ -1,11 +0,0 @@ -#include "oceanWaveGenHF.hlsli" -#include "fullScreenTriangleHF.hlsli" - -VS_QUAD_OUTPUT main(uint vI : SV_VertexID) -{ - VS_QUAD_OUTPUT Out; - - FullScreenTriangle(vI, Out.Position, Out.TexCoord); - - return Out; -} diff --git a/WickedEngine/oceanSimulatorCS.hlsl b/WickedEngine/oceanSimulatorCS.hlsl index e91be6f10..c42e4c508 100644 --- a/WickedEngine/oceanSimulatorCS.hlsl +++ b/WickedEngine/oceanSimulatorCS.hlsl @@ -1,25 +1,13 @@ -#include "oceanWaveGenHF.hlsli" +#include "ShaderInterop_Ocean.h" #define PI 3.1415926536f -#define BLOCK_SIZE_X 16 -#define BLOCK_SIZE_Y 16 STRUCTUREDBUFFER(g_InputH0, float2, TEXSLOT_ONDEMAND0); STRUCTUREDBUFFER(g_InputOmega, float, TEXSLOT_ONDEMAND1); RWSTRUCTUREDBUFFER(g_OutputHt, float2, 0); - -//---------------------------------------- Compute Shaders ----------------------------------------- - -// Pre-FFT data preparation: - -// Notice: In CS5.0, we can output up to 8 RWBuffers but in CS4.x only one output buffer is allowed, -// that way we have to allocate one big buffer and manage the offsets manually. The restriction is -// not caused by NVIDIA GPUs and does not present on NVIDIA GPUs when using other computing APIs like -// CUDA and OpenCL. - // H(0) -> H(t) -[numthreads(BLOCK_SIZE_X, BLOCK_SIZE_Y, 1)] +[numthreads(OCEAN_COMPUTE_TILESIZE, OCEAN_COMPUTE_TILESIZE, 1)] void main(uint3 DTid : SV_DispatchThreadID) { int in_index = DTid.y * g_InWidth + DTid.x; diff --git a/WickedEngine/oceanUpdateDisplacementMapCS.hlsl b/WickedEngine/oceanUpdateDisplacementMapCS.hlsl index e15ef7506..ff5605720 100644 --- a/WickedEngine/oceanUpdateDisplacementMapCS.hlsl +++ b/WickedEngine/oceanUpdateDisplacementMapCS.hlsl @@ -1,9 +1,9 @@ -#include "oceanWaveGenHF.hlsli" +#include "ShaderInterop_Ocean.h" STRUCTUREDBUFFER(g_InputDxyz, float2, TEXSLOT_ONDEMAND0); RWTEXTURE2D(output, float4, 0); -[numthreads(32, 32, 1)] +[numthreads(OCEAN_COMPUTE_TILESIZE, OCEAN_COMPUTE_TILESIZE, 1)] void main(uint3 DTid : SV_DispatchThreadID) { uint addr = g_OutWidth * DTid.y + DTid.x; diff --git a/WickedEngine/oceanUpdateGradientFoldingCS.hlsl b/WickedEngine/oceanUpdateGradientFoldingCS.hlsl index 27bea224b..c0d9b8edf 100644 --- a/WickedEngine/oceanUpdateGradientFoldingCS.hlsl +++ b/WickedEngine/oceanUpdateGradientFoldingCS.hlsl @@ -1,9 +1,10 @@ -#include "oceanWaveGenHF.hlsli" +#include "globals.hlsli" +#include "ShaderInterop_Ocean.h" #define xDisplacementMap texture_0 RWTEXTURE2D(output, float4, 0); -[numthreads(32, 32, 1)] +[numthreads(OCEAN_COMPUTE_TILESIZE, OCEAN_COMPUTE_TILESIZE, 1)] void main( uint3 DTid : SV_DispatchThreadID ) { // Sample neighbour texels diff --git a/WickedEngine/oceanWaveGenHF.hlsli b/WickedEngine/oceanWaveGenHF.hlsli deleted file mode 100644 index f6f6825f0..000000000 --- a/WickedEngine/oceanWaveGenHF.hlsli +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _OCEAN_SIMULATOR_HF_ -#define _OCEAN_SIMULATOR_HF_ -#include "globals.hlsli" -#include "ShaderInterop_Ocean.h" - -//---------------------------------------- Vertex Shaders ------------------------------------------ -struct VS_QUAD_OUTPUT -{ - float4 Position : SV_POSITION; // vertex position - float2 TexCoord : TEXCOORD0; // vertex texture coords -}; - -//----------------------------------------- Pixel Shaders ------------------------------------------ - -//// Textures and sampling states -//#define g_samplerDisplacementMap texture_0 -// -//SAMPLERSTATE(LinearSampler, SSLOT_ONDEMAND0); - - -#endif // _OCEAN_SIMULATOR_HF_ diff --git a/WickedEngine/wiOcean.cpp b/WickedEngine/wiOcean.cpp index b532554cb..1214c7ab8 100644 --- a/WickedEngine/wiOcean.cpp +++ b/WickedEngine/wiOcean.cpp @@ -21,9 +21,6 @@ VertexLayout* wiOcean::g_pMeshLayout = nullptr; #define HALF_SQRT_2 0.7071068f #define GRAV_ACCEL 981.0f // The acceleration of gravity, cm/s^2 -#define BLOCK_SIZE_X 16 -#define BLOCK_SIZE_Y 16 - // Generating gaussian random number with mean 0 and standard deviation 1. float Gauss() { @@ -334,8 +331,8 @@ void wiOcean::UpdateDisplacementMap(float time, GRAPHICSTHREAD threadID) device->BindConstantBufferCS(m_pPerFrameCB, CB_GETBINDSLOT(Ocean_Simulation_PerFrameCB), threadID); // Run the CS - UINT group_count_x = (m_param.dmap_dim + BLOCK_SIZE_X - 1) / BLOCK_SIZE_X; - UINT group_count_y = (m_param.dmap_dim + BLOCK_SIZE_Y - 1) / BLOCK_SIZE_Y; + UINT group_count_x = (m_param.dmap_dim + OCEAN_COMPUTE_TILESIZE - 1) / OCEAN_COMPUTE_TILESIZE; + UINT group_count_y = (m_param.dmap_dim + OCEAN_COMPUTE_TILESIZE - 1) / OCEAN_COMPUTE_TILESIZE; device->Dispatch(group_count_x, group_count_y, 1, threadID); device->UnBindUnorderedAccessResources(0, 1, threadID); @@ -357,7 +354,7 @@ void wiOcean::UpdateDisplacementMap(float time, GRAPHICSTHREAD threadID) device->BindUnorderedAccessResourcesCS(cs_uavs, 0, 1, threadID); GPUResource* cs_srvs[1] = { m_pBuffer_Float_Dxyz }; device->BindResourcesCS(cs_srvs, TEXSLOT_ONDEMAND0, 1, threadID); - device->Dispatch(m_param.dmap_dim / 32, m_param.dmap_dim / 32, 1, threadID); + device->Dispatch(m_param.dmap_dim / OCEAN_COMPUTE_TILESIZE, m_param.dmap_dim / OCEAN_COMPUTE_TILESIZE, 1, threadID); // Update gradient map: @@ -366,7 +363,7 @@ void wiOcean::UpdateDisplacementMap(float time, GRAPHICSTHREAD threadID) device->BindUnorderedAccessResourcesCS(cs_uavs, 0, 1, threadID); cs_srvs[0] = m_pDisplacementMap; device->BindResourcesCS(cs_srvs, TEXSLOT_ONDEMAND0, 1, threadID); - device->Dispatch(m_param.dmap_dim / 32, m_param.dmap_dim / 32, 1, threadID); + device->Dispatch(m_param.dmap_dim / OCEAN_COMPUTE_TILESIZE, m_param.dmap_dim / OCEAN_COMPUTE_TILESIZE, 1, threadID); // Unbind device->UnBindUnorderedAccessResources(0, 1, threadID);