You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#lockdown nick.penwarden
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2932679 on 2016/04/04 by Martin.Mittring
remove hack/cvar that is not longer needed as we fixed the bug
#rb:Bob.Tellez
#code_review:Bob.Tellez
Change 2932681 on 2016/04/04 by Martin.Mittring
fixed cvars in consolevariables.ini can affect engine even if marked with cheat (no longer load consolevariables.ini in shipping and test), unified 3 code path, added testcase, cvars with cheat in ini file other than consolevariables.ini now trigger ensure, =on/off/true/false/.. works in all ini files,
added enure if non scalability setting are used in ScalabilityIni (get now ignored)
#rb:David.Hill
#code_review:Marcus.Wassmer, Michael.Noland
Change 2932719 on 2016/04/04 by Marcus.Wassmer
Merge 3 band SH back to DevRendering
#rb Daniel.Wright
Change 2932760 on 2016/04/04 by Zabir.Hoque
Migrating high resolution cubemaps for skylight and reflection probes.
#rb: Daniel.Wright
Change 2933121 on 2016/04/05 by Rolando.Caloca
DR - vk - Fix free blocks not getting joined
- Fix compile issue
Change 2933122 on 2016/04/05 by Rolando.Caloca
DR - Do not shorten dumped shaders path
Change 2933126 on 2016/04/05 by Rolando.Caloca
DR - vk - Index Buffers using new resource management
Change 2933127 on 2016/04/05 by Rolando.Caloca
DR - vk - Extract multibuffer off index buffer
Change 2933131 on 2016/04/05 by Rolando.Caloca
DR - vk - Transition to vb's using mutlibuffer
Change 2933136 on 2016/04/05 by Rolando.Caloca
DR - vk - Change staging buffers to use resource allocation system
- Fix free block not getting joined
- Remove define
Change 2933140 on 2016/04/05 by Rolando.Caloca
DR - vk - 'static' textures now use resource mgmt
- Release free pages back to the OS
- Remove ensure
Change 2933152 on 2016/04/05 by Rolando.Caloca
DR - vk - Fix aliasing granularity
- Fix renderpass end/copy buffer ensure
Change 2933155 on 2016/04/05 by Rolando.Caloca
DR - SCW - Fix for -directcompile to directly load file for preprocessor
Change 2933158 on 2016/04/05 by Rolando.Caloca
DR - hlslcc - Error on Metal if trying to R & W on RWTextures
- Fix indices on RW reads to be unsigned
#codereview Mark.Satterthwaite, Michael.Trepka
Change 2933169 on 2016/04/05 by Rolando.Caloca
DR - vk - Move header to public to match changes on DevMobile
Change 2933173 on 2016/04/05 by David.Hill
Deferred decal rendering with negative scale
#rb:Matrin.Mittring
#jira:UE-27389
Change 2933273 on 2016/04/05 by Rolando.Caloca
DR - vk - Fix renderdoc markers
Change 2933274 on 2016/04/05 by Rolando.Caloca
DR - Support for -AttachDebugger
Change 2933316 on 2016/04/05 by Rolando.Caloca
DR - vk - Compile fix whene enabling define
Change 2933334 on 2016/04/05 by Rolando.Caloca
DR - Compile fix
#codereview Martin.Mittring
Change 2933805 on 2016/04/05 by Brian.Karis
Temporal AA dynamic antighosting.
Fixed DOF
Change 2933811 on 2016/04/05 by Brian.Karis
Fixed area light NaNs. Improvements to area lights. Horizen handling for wrap around.
Change 2933812 on 2016/04/05 by Brian.Karis
Fixed fresnel on SSS skin.
Change 2933813 on 2016/04/05 by Brian.Karis
Tessellation fix
Change 2933816 on 2016/04/05 by Brian.Karis
Improved forward shading support
[CL 2943241 by Gil Gribb in Main branch]
168 lines
4.9 KiB
C++
168 lines
4.9 KiB
C++
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ShaderPreprocessor.h"
|
|
#include "ModuleManager.h"
|
|
#include "PreprocessorPrivate.h"
|
|
|
|
IMPLEMENT_MODULE(FDefaultModuleImpl, ShaderPreprocessor);
|
|
|
|
/**
|
|
* Append defines to an MCPP command line.
|
|
* @param OutOptions - Upon return contains MCPP command line parameters as a string appended to the current string.
|
|
* @param Definitions - Definitions to add.
|
|
*/
|
|
static void AddMcppDefines(FString& OutOptions, const TMap<FString,FString>& Definitions)
|
|
{
|
|
for (TMap<FString,FString>::TConstIterator It(Definitions); It; ++It)
|
|
{
|
|
OutOptions += FString::Printf(TEXT(" -D%s=%s"), *(It.Key()), *(It.Value()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper class used to load shader source files for MCPP.
|
|
*/
|
|
class FMcppFileLoader
|
|
{
|
|
public:
|
|
/** Initialization constructor. */
|
|
explicit FMcppFileLoader(const FShaderCompilerInput& InShaderInput)
|
|
: ShaderInput(InShaderInput)
|
|
{
|
|
FString ShaderDir = FPlatformProcess::ShaderDir();
|
|
|
|
InputShaderFile = ShaderDir / FPaths::GetCleanFilename(ShaderInput.SourceFilename);
|
|
if (FPaths::GetExtension(InputShaderFile) != TEXT("usf"))
|
|
{
|
|
InputShaderFile += TEXT(".usf");
|
|
}
|
|
|
|
FString InputShaderSource;
|
|
if (LoadShaderSourceFile(*ShaderInput.SourceFilename,InputShaderSource))
|
|
{
|
|
InputShaderSource = FString::Printf(TEXT("%s\n#line 1\n%s"), *ShaderInput.SourceFilePrefix, *InputShaderSource);
|
|
CachedFileContents.Add(GetRelativeShaderFilename(InputShaderFile),StringToArray<ANSICHAR>(*InputShaderSource, InputShaderSource.Len()));
|
|
}
|
|
}
|
|
|
|
/** Returns the input shader filename to pass to MCPP. */
|
|
const FString& GetInputShaderFilename() const
|
|
{
|
|
return InputShaderFile;
|
|
}
|
|
|
|
/** Retrieves the MCPP file loader interface. */
|
|
file_loader GetMcppInterface()
|
|
{
|
|
file_loader Loader;
|
|
Loader.get_file_contents = GetFileContents;
|
|
Loader.user_data = (void*)this;
|
|
return Loader;
|
|
}
|
|
|
|
private:
|
|
/** Holder for shader contents (string + size). */
|
|
typedef TArray<ANSICHAR> FShaderContents;
|
|
|
|
/** MCPP callback for retrieving file contents. */
|
|
static int GetFileContents(void* InUserData, const ANSICHAR* InFilename, const ANSICHAR** OutContents, size_t* OutContentSize)
|
|
{
|
|
FMcppFileLoader* This = (FMcppFileLoader*)InUserData;
|
|
FString Filename = GetRelativeShaderFilename(ANSI_TO_TCHAR(InFilename));
|
|
|
|
FShaderContents* CachedContents = This->CachedFileContents.Find(Filename);
|
|
if (!CachedContents)
|
|
{
|
|
FString FileContents;
|
|
if (This->ShaderInput.Environment.IncludeFileNameToContentsMap.Contains(Filename))
|
|
{
|
|
FileContents = FString(UTF8_TO_TCHAR(This->ShaderInput.Environment.IncludeFileNameToContentsMap.FindRef(Filename).GetData()));
|
|
}
|
|
else
|
|
{
|
|
LoadShaderSourceFile(*Filename,FileContents);
|
|
}
|
|
|
|
if (FileContents.Len() > 0)
|
|
{
|
|
CachedContents = &This->CachedFileContents.Add(Filename,StringToArray<ANSICHAR>(*FileContents, FileContents.Len()));
|
|
}
|
|
}
|
|
|
|
if (OutContents)
|
|
{
|
|
*OutContents = CachedContents ? CachedContents->GetData() : NULL;
|
|
}
|
|
if (OutContentSize)
|
|
{
|
|
*OutContentSize = CachedContents ? CachedContents->Num() : 0;
|
|
}
|
|
|
|
return !!CachedContents;
|
|
}
|
|
|
|
/** Shader input data. */
|
|
const FShaderCompilerInput& ShaderInput;
|
|
/** File contents are cached as needed. */
|
|
TMap<FString,FShaderContents> CachedFileContents;
|
|
/** The input shader filename. */
|
|
FString InputShaderFile;
|
|
};
|
|
|
|
/**
|
|
* Preprocess a shader.
|
|
* @param OutPreprocessedShader - Upon return contains the preprocessed source code.
|
|
* @param ShaderOutput - ShaderOutput to which errors can be added.
|
|
* @param ShaderInput - The shader compiler input.
|
|
* @param AdditionalDefines - Additional defines with which to preprocess the shader.
|
|
* @returns true if the shader is preprocessed without error.
|
|
*/
|
|
bool PreprocessShader(
|
|
FString& OutPreprocessedShader,
|
|
FShaderCompilerOutput& ShaderOutput,
|
|
const FShaderCompilerInput& ShaderInput,
|
|
const FShaderCompilerDefinitions& AdditionalDefines
|
|
)
|
|
{
|
|
// Skip the cache system and directly load the file path (used for debugging)
|
|
if (ShaderInput.bSkipPreprocessedCache)
|
|
{
|
|
return FFileHelper::LoadFileToString(OutPreprocessedShader, *ShaderInput.SourceFilename);
|
|
}
|
|
|
|
FString McppOptions;
|
|
FString McppOutput, McppErrors;
|
|
ANSICHAR* McppOutAnsi = NULL;
|
|
ANSICHAR* McppErrAnsi = NULL;
|
|
bool bSuccess = false;
|
|
|
|
// MCPP is not threadsafe.
|
|
static FCriticalSection McppCriticalSection;
|
|
FScopeLock McppLock(&McppCriticalSection);
|
|
|
|
FMcppFileLoader FileLoader(ShaderInput);
|
|
|
|
AddMcppDefines(McppOptions, ShaderInput.Environment.GetDefinitions());
|
|
AddMcppDefines(McppOptions, AdditionalDefines.GetDefinitionMap());
|
|
|
|
int32 Result = mcpp_run(
|
|
TCHAR_TO_ANSI(*McppOptions),
|
|
TCHAR_TO_ANSI(*FileLoader.GetInputShaderFilename()),
|
|
&McppOutAnsi,
|
|
&McppErrAnsi,
|
|
FileLoader.GetMcppInterface()
|
|
);
|
|
|
|
McppOutput = McppOutAnsi;
|
|
McppErrors = McppErrAnsi;
|
|
|
|
if (ParseMcppErrors(ShaderOutput.Errors, McppErrors, true))
|
|
{
|
|
// exchange strings
|
|
FMemory::Memswap( &OutPreprocessedShader, &McppOutput, sizeof(FString) );
|
|
bSuccess = true;
|
|
}
|
|
|
|
return bSuccess;
|
|
}
|