You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
- The benefit isn't worth having to deal with multiple fallouts from this. #rb none #jira UE-127489 #ushell-cherrypick of 17776551 by Arciel.Rekman [CL 17779200 by Arciel Rekman in ue5-main branch]
120 lines
9.5 KiB
C++
120 lines
9.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
#include "ClearReplacementShaders.h"
|
|
#include "ShaderParameterUtils.h"
|
|
#include "RendererInterface.h"
|
|
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementVS , SF_Vertex);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementVS_Bounds , SF_Vertex);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementVS_Depth , SF_Vertex);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementPS , SF_Pixel);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementPS_128 , SF_Pixel);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementPS_Zero , SF_Pixel);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Uint_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Float_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Uint_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Float_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Uint_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Float_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture3D_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2D_Float4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Uint_Zero , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Uint_Zero , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Uint_Zero , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Uint , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Uint , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Uint , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Uint , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture3D_Float4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2D_Float4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Float4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture3D_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2D_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Uint4 , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture3D_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2D_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Uint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Buffer_Sint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_LargeBuffer_Sint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_StructuredBuffer_Sint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture3D_Sint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2D_Sint4_Bounds , SF_Compute);
|
|
IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(template<>, RENDERCORE_API, FClearReplacementCS_Texture2DArray_Sint4_Bounds , SF_Compute);
|
|
|
|
void CreateClearReplacementShaders()
|
|
{
|
|
#if !WITH_EDITOR // in editor, this function overall has a lesser sence due to the ability to switch the preview modes on the fly and recompile the shaders, which both can execute the code on GT while RT is already created.
|
|
// if RHI supports MT shader creation, then we don't care to init here
|
|
ensureMsgf(!GRHISupportsMultithreadedShaderCreation, TEXT("InitClearReplacementShaders() is called while GRHISupportsMultithreadedShaderCreation is true. This is an unnecessary call."));
|
|
ensureMsgf(IsInRenderingThread() || GRHISupportsMultithreadedShaderCreation, TEXT("InitClearReplacementShaders() is expected to be called from the render thread if GRHISupportsMultithreadedShaderCreation is false."));
|
|
|
|
#define UE_CREATE_SHADER(TShaderType) \
|
|
{ \
|
|
TShaderMapRef<TShaderType> ComputeShader(GetGlobalShaderMap(GMaxRHIFeatureLevel)); \
|
|
FRHIComputeShader* ShaderRHI = ComputeShader.GetComputeShader(); \
|
|
}
|
|
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Uint_Bounds);
|
|
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Float_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Float4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Uint_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Float_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Float4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Uint_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Float_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Float4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture3D_Float4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2D_Float4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Float4_Bounds);
|
|
|
|
// Compute shaders for clearing each resource type. No bounds checks enabled.
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Uint_Zero);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Uint_Zero);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Uint_Zero);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Uint);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Uint);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Uint);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Uint);
|
|
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture3D_Float4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2D_Float4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Float4);
|
|
|
|
// Used by ClearUAV_T in ClearQuad.cpp
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture3D_Uint4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2D_Uint4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Uint4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Uint4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Uint4);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Uint4);
|
|
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Uint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Uint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Uint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture3D_Uint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2D_Uint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Uint4_Bounds);
|
|
|
|
UE_CREATE_SHADER(FClearReplacementCS_Buffer_Sint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_LargeBuffer_Sint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_StructuredBuffer_Sint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture3D_Sint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2D_Sint4_Bounds);
|
|
UE_CREATE_SHADER(FClearReplacementCS_Texture2DArray_Sint4_Bounds);
|
|
|
|
#undef UE_CREATE_SHADER
|
|
#endif
|
|
}
|