// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. #include "ClearReplacementShaders.h" #include "ShaderParameterUtils.h" #include "RendererInterface.h" template< typename T > void FClearTexture2DReplacementCS::SetParameters( FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, const T(&Values)[4] ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, Values); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, TextureRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearTextureRW.GetBaseIndex(), TextureRW); } template< typename T > void FClearTexture2DReplacementCS::FinalizeParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW) { RHICmdList.TransitionResource(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, TextureRW); } template< typename T > void FClearTexture2DArrayReplacementCS::SetParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, const T(&Values)[4]) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, Values); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, TextureRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearTextureArrayRW.GetBaseIndex(), TextureRW); } template< typename T > void FClearTexture2DArrayReplacementCS::FinalizeParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW) { RHICmdList.TransitionResource(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, TextureRW); } template< typename T > void FClearVolumeReplacementCS::SetParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, const T(&Values)[4]) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, Values); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, TextureRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearVolumeRW.GetBaseIndex(), TextureRW); } template< typename T > void FClearVolumeReplacementCS::FinalizeParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW) { RHICmdList.TransitionResource(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, TextureRW); } void FClearTexture2DReplacementScissorCS::SetParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, FLinearColor InClearColor, const FVector4& InTargetBounds) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, InClearColor); SetShaderValue(RHICmdList, ComputeShaderRHI, TargetBounds, InTargetBounds); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, TextureRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearTextureRW.GetBaseIndex(), TextureRW); } void FClearTexture2DReplacementScissorCS::FinalizeParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW) { RHICmdList.TransitionResource(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, TextureRW); } void FClearBufferReplacementCS::SetParameters( FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef BufferRW, uint32 Dword ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearDword, Dword); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, BufferRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearBufferRW.GetBaseIndex(), BufferRW); } void FClearBufferReplacementCS::FinalizeParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef BufferRW) { RHICmdList.TransitionResource(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, BufferRW); } template class FClearTexture2DReplacementCS; template class FClearTexture2DReplacementCS; template class FClearTexture2DArrayReplacementCS; template class FClearTexture2DArrayReplacementCS; template class FClearVolumeReplacementCS; template class FClearVolumeReplacementCS; IMPLEMENT_SHADER_TYPE(, FClearReplacementVS, TEXT("ClearReplacementShaders"), TEXT("ClearVS"), SF_Vertex); IMPLEMENT_SHADER_TYPE(, FClearReplacementPS, TEXT("ClearReplacementShaders"), TEXT("ClearPS"), SF_Pixel); IMPLEMENT_SHADER_TYPE(template<>, FClearTexture2DReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearTexture2DCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(template<>, FClearTexture2DReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearTexture2DCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(template<>, FClearTexture2DArrayReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearTexture2DArrayCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(template<>, FClearTexture2DArrayReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearTexture2DArrayCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(template<>, FClearVolumeReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearVolumeCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(template<>, FClearVolumeReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearVolumeCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(, FClearTexture2DReplacementScissorCS, TEXT("ClearReplacementShaders"), TEXT("ClearTexture2DScissorCS"), SF_Compute); IMPLEMENT_SHADER_TYPE(, FClearBufferReplacementCS, TEXT("ClearReplacementShaders"), TEXT("ClearBufferCS"), SF_Compute);