Skip to content
This repository has been archived by the owner on May 28, 2024. It is now read-only.

Commit

Permalink
Plugin is now UE 4.3.0 compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
ufna committed Aug 9, 2014
1 parent 071b0c3 commit 65cb8a8
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 94 deletions.
3 changes: 2 additions & 1 deletion Source/VaOceanPlugin/Classes/VaOceanRadixFFT.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ struct FRadixPlan512
void RadixCreatePlan(FRadixPlan512* Plan, uint32 Slices);
void RadixDestroyPlan(FRadixPlan512* Plan);

void RadixCompute( FRadixPlan512* Plan,
void RadixCompute( FRHICommandListImmediate& RHICmdList,
FRadixPlan512* Plan,
FUnorderedAccessViewRHIRef pUAV_Dst,
FShaderResourceViewRHIRef pSRV_Dst,
FShaderResourceViewRHIRef pSRV_Src);
96 changes: 51 additions & 45 deletions Source/VaOceanPlugin/Classes/VaOceanShaders.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class FUpdateSpectrumCS : public FGlobalShader
}

void SetParameters(
FRHICommandList& RHICmdList,
uint32 ParamActualDim,
uint32 ParamInWidth,
uint32 ParamOutWidth,
Expand All @@ -94,52 +95,53 @@ class FUpdateSpectrumCS : public FGlobalShader
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();

SetShaderValue(ComputeShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(ComputeShaderRHI, InWidth, ParamInWidth);
SetShaderValue(ComputeShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(ComputeShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(ComputeShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(ComputeShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
SetShaderValue(RHICmdList, ComputeShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(RHICmdList, ComputeShaderRHI, InWidth, ParamInWidth);
SetShaderValue(RHICmdList, ComputeShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(RHICmdList, ComputeShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(RHICmdList, ComputeShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(RHICmdList, ComputeShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
}

void SetParameters(
FRHICommandList& RHICmdList,
const FUpdateSpectrumUniformBufferRef& UniformBuffer,
FShaderResourceViewRHIRef ParamInputH0,
FShaderResourceViewRHIRef ParamInputOmega
)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();

SetUniformBufferParameter(ComputeShaderRHI, GetUniformBufferParameter<FUpdateSpectrumUniformParameters>(), UniformBuffer);
SetUniformBufferParameter(RHICmdList, ComputeShaderRHI, GetUniformBufferParameter<FUpdateSpectrumUniformParameters>(), UniformBuffer);

RHISetShaderResourceViewParameter(ComputeShaderRHI, InputH0.GetBaseIndex(), ParamInputH0);
RHISetShaderResourceViewParameter(ComputeShaderRHI, InputOmega.GetBaseIndex(), ParamInputOmega);
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, InputH0.GetBaseIndex(), ParamInputH0);
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, InputOmega.GetBaseIndex(), ParamInputOmega);
}

void UnsetParameters()
void UnsetParameters(FRHICommandList &RHICmdList)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();
FShaderResourceViewRHIParamRef NullSRV = FShaderResourceViewRHIParamRef();

RHISetShaderResourceViewParameter(ComputeShaderRHI, InputH0.GetBaseIndex(), NullSRV);
RHISetShaderResourceViewParameter(ComputeShaderRHI, InputOmega.GetBaseIndex(), NullSRV);
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, InputH0.GetBaseIndex(), NullSRV);
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, InputOmega.GetBaseIndex(), NullSRV);
}

void SetOutput(FUnorderedAccessViewRHIParamRef ParamOutputHtRW)
void SetOutput(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef ParamOutputHtRW)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();
if (OutputHtRW.IsBound())
{
RHISetUAVParameter(ComputeShaderRHI, OutputHtRW.GetBaseIndex(), ParamOutputHtRW);
RHICmdList.SetUAVParameter(ComputeShaderRHI, OutputHtRW.GetBaseIndex(), ParamOutputHtRW);
}
}

void UnbindBuffers()
void UnbindBuffers(FRHICommandList& RHICmdList)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();
if (OutputHtRW.IsBound())
{
RHISetUAVParameter(ComputeShaderRHI, OutputHtRW.GetBaseIndex(), FUnorderedAccessViewRHIParamRef());
RHICmdList.SetUAVParameter(ComputeShaderRHI, OutputHtRW.GetBaseIndex(), FUnorderedAccessViewRHIParamRef());
}
}

Expand Down Expand Up @@ -206,27 +208,27 @@ class FRadix008A_CS : public FGlobalShader
{
}

void SetParameters(const FRadixFFTUniformBufferRef& UniformBuffer)
void SetParameters(FRHICommandList& RHICmdList, const FRadixFFTUniformBufferRef& UniformBuffer)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();

SetUniformBufferParameter(ComputeShaderRHI, GetUniformBufferParameter<FRadixFFTUniformParameters>(), UniformBuffer);
SetUniformBufferParameter(RHICmdList, ComputeShaderRHI, GetUniformBufferParameter<FRadixFFTUniformParameters>(), UniformBuffer);
}

void SetParameters(FShaderResourceViewRHIRef ParamSrcData, FUnorderedAccessViewRHIRef ParamDstData)
void SetParameters(FRHICommandList& RHICmdList, FShaderResourceViewRHIRef ParamSrcData, FUnorderedAccessViewRHIRef ParamDstData)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();

RHISetShaderResourceViewParameter(ComputeShaderRHI, SrcData.GetBaseIndex(), ParamSrcData);
RHISetUAVParameter(ComputeShaderRHI, DstData.GetBaseIndex(), ParamDstData);
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, SrcData.GetBaseIndex(), ParamSrcData);
RHICmdList.SetUAVParameter(ComputeShaderRHI, DstData.GetBaseIndex(), ParamDstData);
}

void UnsetParameters()
void UnsetParameters(FRHICommandList& RHICmdList)
{
FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader();

RHISetShaderResourceViewParameter(ComputeShaderRHI, SrcData.GetBaseIndex(), FShaderResourceViewRHIParamRef());
RHISetUAVParameter(ComputeShaderRHI, DstData.GetBaseIndex(), FUnorderedAccessViewRHIParamRef());
RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, SrcData.GetBaseIndex(), FShaderResourceViewRHIParamRef());
RHICmdList.SetUAVParameter(ComputeShaderRHI, DstData.GetBaseIndex(), FUnorderedAccessViewRHIParamRef());
}

virtual bool Serialize(FArchive& Ar)
Expand Down Expand Up @@ -285,8 +287,8 @@ class FQuadVertexDeclaration : public FRenderResource
virtual void InitRHI()
{
FVertexDeclarationElementList Elements;
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FQuadVertex, Position), VET_Float4, 0));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FQuadVertex, UV), VET_Float2, 1));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FQuadVertex, Position), VET_Float4, 0, sizeof(FQuadVertex)));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FQuadVertex, UV), VET_Float2, 1, sizeof(FQuadVertex)));
VertexDeclarationRHI = RHICreateVertexDeclaration(Elements);
}

Expand Down Expand Up @@ -371,6 +373,7 @@ class FUpdateDisplacementPS : public FGlobalShader
}

void SetParameters(
FRHICommandList& RHICmdList,
uint32 ParamActualDim,
uint32 ParamInWidth,
uint32 ParamOutWidth,
Expand All @@ -381,31 +384,32 @@ class FUpdateDisplacementPS : public FGlobalShader
{
FPixelShaderRHIParamRef PixelShaderRHI = GetPixelShader();

SetShaderValue(PixelShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(PixelShaderRHI, InWidth, ParamInWidth);
SetShaderValue(PixelShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(PixelShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(PixelShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(PixelShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
SetShaderValue(RHICmdList, PixelShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(RHICmdList, PixelShaderRHI, InWidth, ParamInWidth);
SetShaderValue(RHICmdList, PixelShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(RHICmdList, PixelShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(RHICmdList, PixelShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(RHICmdList, PixelShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
}

void SetParameters(
FRHICommandList& RHICmdList,
const FUpdateDisplacementUniformBufferRef& UniformBuffer,
FShaderResourceViewRHIRef ParamInputDxyz
)
{
FPixelShaderRHIParamRef PixelShaderRHI = GetPixelShader();

SetUniformBufferParameter(PixelShaderRHI, GetUniformBufferParameter<FUpdateDisplacementUniformParameters>(), UniformBuffer);
SetUniformBufferParameter(RHICmdList, PixelShaderRHI, GetUniformBufferParameter<FUpdateDisplacementUniformParameters>(), UniformBuffer);

RHISetShaderResourceViewParameter(PixelShaderRHI, InputDxyz.GetBaseIndex(), ParamInputDxyz);
RHICmdList.SetShaderResourceViewParameter(PixelShaderRHI, InputDxyz.GetBaseIndex(), ParamInputDxyz);
}

void UnsetParameters()
void UnsetParameters(FRHICommandList& RHICmdList)
{
FPixelShaderRHIParamRef PixelShaderRHI = GetPixelShader();

RHISetShaderResourceViewParameter(PixelShaderRHI, InputDxyz.GetBaseIndex(), FShaderResourceViewRHIParamRef());
RHICmdList.SetShaderResourceViewParameter(PixelShaderRHI, InputDxyz.GetBaseIndex(), FShaderResourceViewRHIParamRef());
}

virtual bool Serialize(FArchive& Ar)
Expand Down Expand Up @@ -479,6 +483,7 @@ class FGenGradientFoldingPS : public FGlobalShader
}

void SetParameters(
FRHICommandList& RHICmdList,
uint32 ParamActualDim,
uint32 ParamInWidth,
uint32 ParamOutWidth,
Expand All @@ -489,28 +494,29 @@ class FGenGradientFoldingPS : public FGlobalShader
{
FPixelShaderRHIParamRef PixelShaderRHI = GetPixelShader();

SetShaderValue(PixelShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(PixelShaderRHI, InWidth, ParamInWidth);
SetShaderValue(PixelShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(PixelShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(PixelShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(PixelShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
SetShaderValue(RHICmdList, PixelShaderRHI, ActualDim, ParamActualDim);
SetShaderValue(RHICmdList, PixelShaderRHI, InWidth, ParamInWidth);
SetShaderValue(RHICmdList, PixelShaderRHI, OutWidth, ParamOutWidth);
SetShaderValue(RHICmdList, PixelShaderRHI, OutHeight, ParamOutHeight);
SetShaderValue(RHICmdList, PixelShaderRHI, DtxAddressOffset, ParamDtxAddressOffset);
SetShaderValue(RHICmdList, PixelShaderRHI, DtyAddressOffset, ParamDtyAddressOffset);
}

void SetParameters(
FRHICommandList& RHICmdList,
const FUpdateDisplacementUniformBufferRef& UniformBuffer,
FTextureRHIParamRef DisplacementMapRHI
)
{
FPixelShaderRHIParamRef PixelShaderRHI = GetPixelShader();

SetUniformBufferParameter(PixelShaderRHI, GetUniformBufferParameter<FUpdateDisplacementUniformParameters>(), UniformBuffer);
SetUniformBufferParameter(RHICmdList, PixelShaderRHI, GetUniformBufferParameter<FUpdateDisplacementUniformParameters>(), UniformBuffer);

FSamplerStateRHIParamRef SamplerStateLinear = TStaticSamplerState<SF_Bilinear, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI();
SetTextureParameter(PixelShaderRHI, DisplacementMap, DisplacementMapSampler, SamplerStateLinear, DisplacementMapRHI);
SetTextureParameter(RHICmdList, PixelShaderRHI, DisplacementMap, DisplacementMapSampler, SamplerStateLinear, DisplacementMapRHI);
}

void UnsetParameters() {}
void UnsetParameters(FRHICommandList& RHICmdList) {}

virtual bool Serialize(FArchive& Ar)
{
Expand Down
1 change: 0 additions & 1 deletion Source/VaOceanPlugin/Private/VaOceanPlugin.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Copyright 2014 Vladimir Alyamkin. All Rights Reserved.

#include "VaOceanPluginPrivatePCH.h"
#include "VaOceanPlugin.generated.inl"

class FVaOceanPlugin : public IVaOceanPlugin
{
Expand Down
2 changes: 2 additions & 0 deletions Source/VaOceanPlugin/Private/VaOceanPluginPrivatePCH.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
#include "Engine.h"
#include "UniformBuffer.h"
#include "ShaderParameters.h"
#include "ShaderParameterUtils.h"
#include "GlobalShader.h"
#include "RHIStaticStates.h"

// You should place include statements to your module's private header files here. You only need to
// add includes for headers that are used in most of your module's source files though.
Expand Down
51 changes: 30 additions & 21 deletions Source/VaOceanPlugin/Private/VaOceanRadixFFT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

#include "VaOceanPluginPrivatePCH.h"

void Radix008A(FRadixPlan512* Plan,
void Radix008A(
FRHICommandListImmediate & RHICmdList,
FRadixPlan512* Plan,
uint32 ParamSet,
FUnorderedAccessViewRHIRef pUAV_Dst,
FShaderResourceViewRHIRef pSRV_Src,
Expand All @@ -22,31 +24,31 @@ void Radix008A(FRadixPlan512* Plan,
Parameters.PhaseBase = Plan->PerFrame[ParamSet].PhaseBase;

FRadixFFTUniformBufferRef UniformBuffer =
FRadixFFTUniformBufferRef::CreateUniformBufferImmediate(Parameters, UniformBuffer_SingleUse);
FRadixFFTUniformBufferRef::CreateUniformBufferImmediate(Parameters, EUniformBufferUsage::UniformBuffer_SingleFrame);

if (istride > 1)
{
TShaderMapRef<FRadix008A_CS> Radix008A_CS(GetGlobalShaderMap());
RHISetComputeShader(Radix008A_CS->GetComputeShader());
RHICmdList.SetComputeShader(Radix008A_CS->GetComputeShader());

Radix008A_CS->SetParameters(UniformBuffer);
Radix008A_CS->SetParameters(pSRV_Src, pUAV_Dst);
Radix008A_CS->SetParameters(RHICmdList, UniformBuffer);
Radix008A_CS->SetParameters(RHICmdList, pSRV_Src, pUAV_Dst);

RHIDispatchComputeShader(grid, 1, 1);
RHICmdList.DispatchComputeShader(grid, 1, 1);

Radix008A_CS->UnsetParameters();
Radix008A_CS->UnsetParameters(RHICmdList);
}
else
{
TShaderMapRef<FRadix008A_CS2> Radix008A_CS2(GetGlobalShaderMap());
RHISetComputeShader(Radix008A_CS2->GetComputeShader());
RHICmdList.SetComputeShader(Radix008A_CS2->GetComputeShader());

Radix008A_CS2->SetParameters(UniformBuffer);
Radix008A_CS2->SetParameters(pSRV_Src, pUAV_Dst);
Radix008A_CS2->SetParameters(RHICmdList, UniformBuffer);
Radix008A_CS2->SetParameters(RHICmdList, pSRV_Src, pUAV_Dst);

RHIDispatchComputeShader(grid, 1, 1);
RHICmdList.DispatchComputeShader(grid, 1, 1);

Radix008A_CS2->UnsetParameters();
Radix008A_CS2->UnsetParameters(RHICmdList);
}
}

Expand Down Expand Up @@ -96,8 +98,13 @@ void RadixCreatePlan(FRadixPlan512* Plan, uint32 Slices)

// Temp buffers
uint32 BytesPerElement = sizeof(float) * 2;
uint32 NumElements = (512 * Plan->Slices) * 512;
Plan->pBuffer_Tmp = RHICreateStructuredBuffer(BytesPerElement, BytesPerElement * NumElements, NULL, (BUF_UnorderedAccess | BUF_ShaderResource));
uint32 NumElements = (512 * Plan->Slices) * 512;

FRHIResourceCreateInfo ResourceCreateInfo;
ResourceCreateInfo.BulkData = nullptr;
ResourceCreateInfo.ResourceArray = nullptr;
Plan->pBuffer_Tmp = RHICreateStructuredBuffer(BytesPerElement, BytesPerElement * NumElements, (BUF_UnorderedAccess | BUF_ShaderResource), ResourceCreateInfo);

Plan->pUAV_Tmp = RHICreateUnorderedAccessView(Plan->pBuffer_Tmp, false, false);
Plan->pSRV_Tmp = RHICreateShaderResourceView(Plan->pBuffer_Tmp);
}
Expand All @@ -109,7 +116,9 @@ void RadixDestroyPlan(FRadixPlan512* Plan)
Plan->pSRV_Tmp.SafeRelease();
}

void RadixCompute(FRadixPlan512* Plan,
void RadixCompute(
FRHICommandListImmediate& RHICmdList,
FRadixPlan512* Plan,
FUnorderedAccessViewRHIRef pUAV_Dst,
FShaderResourceViewRHIRef pSRV_Dst,
FShaderResourceViewRHIRef pSRV_Src)
Expand All @@ -121,20 +130,20 @@ void RadixCompute(FRadixPlan512* Plan,
FShaderResourceViewRHIRef pSRV_Tmp = Plan->pSRV_Tmp;

istride /= 8;
Radix008A(Plan, 0, pUAV_Tmp, pSRV_Src, thread_count, istride);
Radix008A(RHICmdList, Plan, 0, pUAV_Tmp, pSRV_Src, thread_count, istride);

istride /= 8;
Radix008A(Plan, 1, pUAV_Dst, pSRV_Tmp, thread_count, istride);
Radix008A(RHICmdList, Plan, 1, pUAV_Dst, pSRV_Tmp, thread_count, istride);

istride /= 8;
Radix008A(Plan, 2, pUAV_Tmp, pSRV_Dst, thread_count, istride);
Radix008A(RHICmdList, Plan, 2, pUAV_Tmp, pSRV_Dst, thread_count, istride);

istride /= 8;
Radix008A(Plan, 3, pUAV_Dst, pSRV_Tmp, thread_count, istride);
Radix008A(RHICmdList, Plan, 3, pUAV_Dst, pSRV_Tmp, thread_count, istride);

istride /= 8;
Radix008A(Plan, 4, pUAV_Tmp, pSRV_Dst, thread_count, istride);
Radix008A(RHICmdList, Plan, 4, pUAV_Tmp, pSRV_Dst, thread_count, istride);

istride /= 8;
Radix008A(Plan, 5, pUAV_Dst, pSRV_Tmp, thread_count, istride);
Radix008A(RHICmdList, Plan, 5, pUAV_Dst, pSRV_Tmp, thread_count, istride);
}
Loading

0 comments on commit 65cb8a8

Please sign in to comment.