Skip to content

Commit 28ea485

Browse files
TJnotJTTJ
authored andcommitted
GS/HW: Allow baking shaders into executable.
temp
1 parent f322dfb commit 28ea485

File tree

9 files changed

+303
-29
lines changed

9 files changed

+303
-29
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.cpp

cmake/ShaderToCpp.cmake

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
function(shader_to_cpp SHADER_FILES_OUT SHADER_FILES_CPP_OUT)
2+
set(SHADER_FILES "")
3+
set(SHADER_FILES_CPP "")
4+
file(GLOB_RECURSE DIR_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../bin/resources/shaders/*")
5+
foreach(path IN LISTS DIR_FILES)
6+
if(NOT ("${path}" MATCHES ".*\.glsl$" OR "${path}" MATCHES ".*\.fx$"))
7+
continue()
8+
endif()
9+
if (NOT WIN32 AND "${path}" MATCHES "/dx11/") # Don't include unneccessary stuff
10+
continue()
11+
endif()
12+
get_filename_component(DIR ${path} DIRECTORY)
13+
get_filename_component(API ${DIR} NAME)
14+
get_filename_component(BASE ${path} NAME_WE)
15+
set(cpp_path "${CMAKE_CURRENT_SOURCE_DIR}/../bin/resources/shaders_cpp/${API}_${BASE}.cpp")
16+
add_custom_command(
17+
OUTPUT ${cpp_path}
18+
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/../tools/shader_to_cpp.py ${path} ${cpp_path} "${API}_${BASE}"
19+
DEPENDS ${path} ${CMAKE_CURRENT_SOURCE_DIR}/../tools/shader_to_cpp.py
20+
COMMENT "Shader to CPP: ${path} -> ${cpp_path}"
21+
VERBATIM
22+
)
23+
list(APPEND SHADER_FILES ${path})
24+
list(APPEND SHADER_FILES_CPP ${cpp_path})
25+
endforeach()
26+
set(${SHADER_FILES_OUT} ${SHADER_FILES} PARENT_SCOPE)
27+
set(${SHADER_FILES_CPP_OUT} ${SHADER_FILES_CPP} PARENT_SCOPE)
28+
endfunction()
29+
30+
function(clean_shader_cpp)
31+
file(GLOB_RECURSE CPP_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../bin/resources/shaders_cpp/*.cpp")
32+
foreach(cpp_file IN LISTS CPP_FILES)
33+
file(REMOVE ${cpp_file})
34+
endforeach()
35+
endfunction()

common/vsprops/ShaderToCpp.props

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup Label="UserMacros">
4+
<BakeShadersInCpp>false</BakeShadersInCpp>
5+
<ShaderCppDir>$(SolutionDir)bin\resources\shaders_cpp\</ShaderCppDir>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<BuildMacro Include="BakeShadersInCpp">
9+
<Value>$(BakeShadersInCpp)</Value>
10+
</BuildMacro>
11+
<BuildMacro Include="ShaderCppDir">
12+
<Value>$(ShaderCppDir)</Value>
13+
</BuildMacro>
14+
</ItemGroup>
15+
<ItemDefinitionGroup>
16+
<ClCompile>
17+
<PreprocessorDefinitions Condition="'$(BakeShadersInCpp)'=='true'">BAKE_SHADERS_IN_CPP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
18+
</ClCompile>
19+
</ItemDefinitionGroup>
20+
<Target Name="ShaderToCpp" BeforeTargets="ClCompile" Condition="'@(ShaderToCpp)'!='' And '$(BakeShadersInCpp)'=='true'">
21+
<!--Setup metadata for following tasks-->
22+
<ItemGroup>
23+
<ShaderToCpp>
24+
<Command>
25+
"python" "$(SolutionDir)\tools\shader_to_cpp.py" "%(Identity)" "$(ShaderCppDir)%(VarName).cpp" "%(VarName)"
26+
</Command>
27+
<Outputs>$(ShaderCppDir)%(VarName).cpp</Outputs>
28+
</ShaderToCpp>
29+
</ItemGroup>
30+
<!--Helper for dealing with tlogs-->
31+
<!--https://learn.microsoft.com/en-us/visualstudio/msbuild/getoutofdateitems-task?view=vs-2022-->
32+
<GetOutOfDateItems Sources="@(ShaderToCpp)" OutputsMetadataName="Outputs" CommandMetadataName="Command" TLogDirectory="$(TLogLocation)" TLogNamePrefix="ShaderToCpp">
33+
<Output TaskParameter="OutOfDateSources" ItemName="OutOfDateShaderToCpp" />
34+
</GetOutOfDateItems>
35+
<CustomBuild Condition="'@(OutOfDateShaderToCpp)'!=''" Sources="@(OutOfDateShaderToCpp)" />
36+
<Message Text="Shader to CPP: '%(OutOfDateShaderToCpp.Identity)' -&gt; '$(ShaderCppDir)%(OutOfDateShaderToCpp.VarName).cpp'" Importance="high" Condition="'@(OutOfDateShaderToCpp)'!=''" />
37+
</Target>
38+
<Target Name="ShaderToCppClean">
39+
<Delete Files="@(ShaderToCpp->'$(ShaderCppDir)%(VarName).cpp')" />
40+
</Target>
41+
</Project>

common/vsprops/ShaderToCpp.targets

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<CleanDependsOn>ShaderToCppClean;$(CleanDependsOn)</CleanDependsOn>
5+
</PropertyGroup>
6+
</Project>

pcsx2/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ if(WIN32)
5151
)
5252
endif(WIN32)
5353

54+
option(BAKE_SHADERS_IN_CPP "Bake shaders into C++ source files" OFF)
55+
if(BAKE_SHADERS_IN_CPP)
56+
include(ShaderToCpp)
57+
shader_to_cpp(SHADER_FILES SHADER_FILES_CPP)
58+
add_custom_target(GeneratedShaders DEPENDS ${SHADER_FILES} ${SHADER_FILES_CPP})
59+
add_dependencies(PCSX2 GeneratedShaders)
60+
target_compile_definitions(PCSX2_FLAGS INTERFACE BAKE_SHADERS_IN_CPP=1)
61+
endif()
62+
5463
# Main pcsx2 source
5564
set(pcsx2Sources
5665
Achievements.cpp

pcsx2/GS/Renderers/Common/GSDevice.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,69 @@ void GSDevice::GenerateExpansionIndexBuffer(void* buffer)
312312
}
313313
}
314314

315+
#ifdef BAKE_SHADERS_IN_CPP
316+
#include "../../bin/resources/shaders_cpp/common_fxaa.cpp"
317+
#include "../../bin/resources/shaders_cpp/vulkan_convert.cpp"
318+
#include "../../bin/resources/shaders_cpp/vulkan_imgui.cpp"
319+
#include "../../bin/resources/shaders_cpp/vulkan_interlace.cpp"
320+
#include "../../bin/resources/shaders_cpp/vulkan_merge.cpp"
321+
#include "../../bin/resources/shaders_cpp/vulkan_present.cpp"
322+
#include "../../bin/resources/shaders_cpp/vulkan_shadeboost.cpp"
323+
#include "../../bin/resources/shaders_cpp/vulkan_tfx.cpp"
324+
#include "../../bin/resources/shaders_cpp/opengl_convert.cpp"
325+
#include "../../bin/resources/shaders_cpp/opengl_imgui.cpp"
326+
#include "../../bin/resources/shaders_cpp/opengl_interlace.cpp"
327+
#include "../../bin/resources/shaders_cpp/opengl_merge.cpp"
328+
#include "../../bin/resources/shaders_cpp/opengl_present.cpp"
329+
#include "../../bin/resources/shaders_cpp/opengl_shadeboost.cpp"
330+
#include "../../bin/resources/shaders_cpp/opengl_tfx_fs.cpp"
331+
#include "../../bin/resources/shaders_cpp/opengl_tfx_vgs.cpp"
332+
#ifdef _WIN32
333+
#include "../../bin/resources/shaders_cpp/dx11_convert.cpp"
334+
#include "../../bin/resources/shaders_cpp/dx11_imgui.cpp"
335+
#include "../../bin/resources/shaders_cpp/dx11_interlace.cpp"
336+
#include "../../bin/resources/shaders_cpp/dx11_merge.cpp"
337+
#include "../../bin/resources/shaders_cpp/dx11_present.cpp"
338+
#include "../../bin/resources/shaders_cpp/dx11_shadeboost.cpp"
339+
#include "../../bin/resources/shaders_cpp/dx11_tfx.cpp"
340+
#endif
341+
342+
static const std::map<std::string, const unsigned char*> baked_shaders = {
343+
{ "shaders/common/fxaa.fx" , common_fxaa},
344+
{ "shaders/vulkan/convert.glsl" , vulkan_convert},
345+
{ "shaders/vulkan/imgui.glsl" , vulkan_imgui},
346+
{ "shaders/vulkan/interlace.glsl" , vulkan_interlace},
347+
{ "shaders/vulkan/merge.glsl" , vulkan_merge },
348+
{ "shaders/vulkan/present.glsl" , vulkan_present },
349+
{ "shaders/vulkan/shadeboost.glsl" , vulkan_shadeboost },
350+
{ "shaders/vulkan/tfx.glsl" , vulkan_tfx },
351+
{ "shaders/opengl/convert.glsl" , opengl_convert },
352+
{ "shaders/opengl/imgui.glsl" , opengl_imgui },
353+
{ "shaders/opengl/interlace.glsl" , opengl_interlace },
354+
{ "shaders/opengl/merge.glsl" , opengl_merge },
355+
{ "shaders/opengl/present.glsl" , opengl_present },
356+
{ "shaders/opengl/shadeboost.glsl" , opengl_shadeboost },
357+
{ "shaders/opengl/tfx_fs.glsl" , opengl_tfx_fs },
358+
{ "shaders/opengl/tfx_vgs.glsl" , opengl_tfx_vgs },
359+
#ifdef _WIN32
360+
{ "shaders/direct3d/convert.fx" , dx11_convert },
361+
{ "shaders/direct3d/imgui.fx" , dx11_imgui },
362+
{ "shaders/direct3d/interlace.fx" , dx11_interlace },
363+
{ "shaders/direct3d/merge.fx" , dx11_merge },
364+
{ "shaders/direct3d/present.fx" , dx11_present },
365+
{ "shaders/direct3d/shadeboost.fx" , dx11_shadeboost },
366+
{ "shaders/direct3d/tfx.fx" , dx11_tfx },
367+
#endif
368+
};
369+
#endif
370+
315371
std::optional<std::string> GSDevice::ReadShaderSource(const char* filename)
316372
{
373+
#ifdef BAKE_SHADERS_IN_CPP
374+
const auto it = baked_shaders.find(filename);
375+
if (it != baked_shaders.end())
376+
return reinterpret_cast<const char*>(it->second);
377+
#endif
317378
return FileSystem::ReadFileToString(Path::Combine(EmuFolders::Resources, filename).c_str());
318379
}
319380

pcsx2/pcsx2.vcxproj

Lines changed: 83 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<Import Condition="$(Configuration.Contains(Devel))" Project="$(SolutionDir)common\vsprops\CodeGen_Devel.props" />
2525
<Import Condition="$(Configuration.Contains(Release))" Project="$(SolutionDir)common\vsprops\CodeGen_Release.props" />
2626
<Import Condition="!$(Configuration.Contains(Release))" Project="$(SolutionDir)common\vsprops\IncrementalLinking.props" />
27+
<Import Project="$(SolutionDir)common\vsprops\ShaderToCpp.props" />
2728
</ImportGroup>
2829
<PropertyGroup Label="UserMacros" />
2930
<PropertyGroup>
@@ -70,29 +71,101 @@
7071
</ClCompile>
7172
</ItemDefinitionGroup>
7273
<ItemGroup>
74+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\convert.glsl">
75+
<VarName>vulkan_convert</VarName>
76+
</ShaderToCpp>
77+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\imgui.glsl">
78+
<VarName>vulkan_imgui</VarName>
79+
</ShaderToCpp>
80+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\interlace.glsl">
81+
<VarName>vulkan_interlace</VarName>
82+
</ShaderToCpp>
83+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\merge.glsl">
84+
<VarName>vulkan_merge</VarName>
85+
</ShaderToCpp>
86+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\present.glsl">
87+
<VarName>vulkan_present</VarName>
88+
</ShaderToCpp>
89+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\shadeboost.glsl">
90+
<VarName>vulkan_shadeboost</VarName>
91+
</ShaderToCpp>
92+
<ShaderToCpp Include="..\bin\resources\shaders\vulkan\tfx.glsl">
93+
<VarName>vulkan_tfx</VarName>
94+
</ShaderToCpp>
95+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\convert.glsl">
96+
<VarName>opengl_convert</VarName>
97+
</ShaderToCpp>
98+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\imgui.glsl">
99+
<VarName>opengl_imgui</VarName>
100+
</ShaderToCpp>
101+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\interlace.glsl">
102+
<VarName>opengl_interlace</VarName>
103+
</ShaderToCpp>
104+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\merge.glsl">
105+
<VarName>opengl_merge</VarName>
106+
</ShaderToCpp>
107+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\shadeboost.glsl">
108+
<VarName>opengl_shadeboost</VarName>
109+
</ShaderToCpp>
110+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\tfx_fs.glsl">
111+
<VarName>opengl_tfx_fs</VarName>
112+
</ShaderToCpp>
113+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\tfx_vgs.glsl">
114+
<VarName>opengl_tfx_vgs</VarName>
115+
</ShaderToCpp>
116+
<ShaderToCpp Include="..\bin\resources\shaders\opengl\present.glsl">
117+
<VarName>opengl_present</VarName>
118+
</ShaderToCpp>
119+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\convert.fx">
120+
<VarName>dx11_convert</VarName>
121+
</ShaderToCpp>
122+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\interlace.fx">
123+
<VarName>dx11_interlace</VarName>
124+
</ShaderToCpp>
125+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\merge.fx">
126+
<VarName>dx11_merge</VarName>
127+
</ShaderToCpp>
128+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\shadeboost.fx">
129+
<VarName>dx11_shadeboost</VarName>
130+
</ShaderToCpp>
131+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\tfx.fx">
132+
<VarName>dx11_tfx</VarName>
133+
</ShaderToCpp>
134+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\imgui.fx">
135+
<VarName>dx11_imgui</VarName>
136+
</ShaderToCpp>
137+
<ShaderToCpp Include="..\bin\resources\shaders\dx11\present.fx">
138+
<VarName>dx11_present</VarName>
139+
</ShaderToCpp>
140+
<ShaderToCpp Include="..\bin\resources\shaders\common\fxaa.fx">
141+
<VarName>common_fxaa</VarName>
142+
</ShaderToCpp>
143+
<None Include="..\bin\resources\shaders\common\fxaa.fx" />
144+
<None Include="..\bin\resources\shaders\opengl\cas.glsl" />
145+
<None Include="..\bin\resources\shaders\opengl\convert.glsl" />
73146
<None Include="..\bin\resources\shaders\opengl\imgui.glsl" />
147+
<None Include="..\bin\resources\shaders\opengl\interlace.glsl" />
148+
<None Include="..\bin\resources\shaders\opengl\merge.glsl" />
74149
<None Include="..\bin\resources\shaders\opengl\present.glsl" />
150+
<None Include="..\bin\resources\shaders\opengl\shadeboost.glsl" />
151+
<None Include="..\bin\resources\shaders\opengl\tfx_fs.glsl" />
152+
<None Include="..\bin\resources\shaders\opengl\tfx_vgs.glsl" />
153+
<None Include="..\bin\resources\shaders\vulkan\cas.glsl" />
75154
<None Include="..\bin\resources\shaders\vulkan\convert.glsl" />
76155
<None Include="..\bin\resources\shaders\vulkan\imgui.glsl" />
77156
<None Include="..\bin\resources\shaders\vulkan\interlace.glsl" />
78157
<None Include="..\bin\resources\shaders\vulkan\merge.glsl" />
79158
<None Include="..\bin\resources\shaders\vulkan\present.glsl" />
80159
<None Include="..\bin\resources\shaders\vulkan\shadeboost.glsl" />
81160
<None Include="..\bin\resources\shaders\vulkan\tfx.glsl" />
82-
<None Include="..\bin\resources\shaders\opengl\convert.glsl" />
83-
<None Include="..\bin\resources\shaders\opengl\interlace.glsl" />
84-
<None Include="..\bin\resources\shaders\opengl\merge.glsl" />
85-
<None Include="..\bin\resources\shaders\opengl\shadeboost.glsl" />
86-
<None Include="..\bin\resources\shaders\opengl\tfx_fs.glsl" />
87-
<None Include="..\bin\resources\shaders\opengl\tfx_vgs.glsl" />
88161
<None Include="..\bin\resources\shaders\dx11\convert.fx" />
89-
<None Include="..\bin\resources\shaders\common\fxaa.fx" />
162+
<None Include="..\bin\resources\shaders\dx11\imgui.fx" />
90163
<None Include="..\bin\resources\shaders\dx11\interlace.fx" />
91164
<None Include="..\bin\resources\shaders\dx11\merge.fx" />
165+
<None Include="..\bin\resources\shaders\dx11\present.fx" />
92166
<None Include="..\bin\resources\shaders\dx11\shadeboost.fx" />
93167
<None Include="..\bin\resources\shaders\dx11\tfx.fx" />
94-
<None Include="..\bin\resources\shaders\dx11\imgui.fx" />
95-
<None Include="..\bin\resources\shaders\dx11\present.fx" />
168+
<None Include="..\bin\resources\shaders\dx11\cas.hlsl" />
96169
<None Include="GS\Renderers\Vulkan\VKEntryPoints.inl">
97170
<ExcludedFromBuild Condition="'$(Platform)'=='ARM64'">true</ExcludedFromBuild>
98171
</None>
@@ -1031,5 +1104,6 @@
10311104
</ItemGroup>
10321105
<Import Condition="$(Configuration.Contains(Debug)) Or $(Configuration.Contains(Devel))" Project="$(SolutionDir)3rdparty\winpixeventruntime\WinPixEventRuntime.props" />
10331106
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
1107+
<Import Project="$(SolutionDir)common\vsprops\ShaderToCpp.targets" />
10341108
<ImportGroup Label="ExtensionTargets" />
10351109
</Project>

0 commit comments

Comments
 (0)