ocean updates
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
<None Include="objectHF.hlsli" />
|
||||
<None Include="objectInputLayoutHF.hlsli" />
|
||||
<None Include="oceanSurfaceHF.hlsli" />
|
||||
<None Include="oceanWaveGenHF.hlsli" />
|
||||
<None Include="packHF.hlsli" />
|
||||
<None Include="postProcessHF.hlsli" />
|
||||
<None Include="quad.hlsli" />
|
||||
@@ -452,9 +451,6 @@
|
||||
<FxCompile Include="objectVS_voxelizer.hlsl">
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType>
|
||||
</FxCompile>
|
||||
<FxCompile Include="oceanQuadVS.hlsl">
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType>
|
||||
</FxCompile>
|
||||
<FxCompile Include="oceanSimulatorCS.hlsl">
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compute</ShaderType>
|
||||
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">5.0</ShaderModel>
|
||||
|
||||
@@ -115,9 +115,6 @@
|
||||
<None Include="hairparticleHF.hlsli">
|
||||
<Filter>HF</Filter>
|
||||
</None>
|
||||
<None Include="oceanWaveGenHF.hlsli">
|
||||
<Filter>HF</Filter>
|
||||
</None>
|
||||
<None Include="oceanSurfaceHF.hlsli">
|
||||
<Filter>HF</Filter>
|
||||
</None>
|
||||
@@ -663,9 +660,6 @@
|
||||
<FxCompile Include="oceanSimulatorCS.hlsl">
|
||||
<Filter>CS</Filter>
|
||||
</FxCompile>
|
||||
<FxCompile Include="oceanQuadVS.hlsl">
|
||||
<Filter>VS</Filter>
|
||||
</FxCompile>
|
||||
<FxCompile Include="oceanSurfaceVS.hlsl">
|
||||
<Filter>VS</Filter>
|
||||
</FxCompile>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user