mirror of
				https://github.com/hedge-dev/XenosRecomp.git
				synced 2025-10-30 07:12:17 +00:00 
			
		
		
		
	Initial commit.
This commit is contained in:
		
						commit
						a3e36719e7
					
				
					 19 changed files with 2831 additions and 0 deletions
				
			
		
							
								
								
									
										399
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										399
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,399 @@ | ||||||
|  | ## Ignore Visual Studio temporary files, build results, and | ||||||
|  | ## files generated by popular Visual Studio add-ons. | ||||||
|  | ## | ||||||
|  | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore | ||||||
|  | 
 | ||||||
|  | # User-specific files | ||||||
|  | *.rsuser | ||||||
|  | *.suo | ||||||
|  | *.user | ||||||
|  | *.userosscache | ||||||
|  | *.sln.docstates | ||||||
|  | 
 | ||||||
|  | # User-specific files (MonoDevelop/Xamarin Studio) | ||||||
|  | *.userprefs | ||||||
|  | 
 | ||||||
|  | # Mono auto generated files | ||||||
|  | mono_crash.* | ||||||
|  | 
 | ||||||
|  | # Build results | ||||||
|  | [Dd]ebug/ | ||||||
|  | [Dd]ebugPublic/ | ||||||
|  | [Rr]elease/ | ||||||
|  | [Rr]eleases/ | ||||||
|  | x64/ | ||||||
|  | x86/ | ||||||
|  | [Ww][Ii][Nn]32/ | ||||||
|  | [Aa][Rr][Mm]/ | ||||||
|  | [Aa][Rr][Mm]64/ | ||||||
|  | bld/ | ||||||
|  | [Bb]in/ | ||||||
|  | [Oo]bj/ | ||||||
|  | [Ll]og/ | ||||||
|  | [Ll]ogs/ | ||||||
|  | [Oo]ut/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 2015/2017 cache/options directory | ||||||
|  | .vs/ | ||||||
|  | # Uncomment if you have tasks that create the project's static files in wwwroot | ||||||
|  | #wwwroot/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 2017 auto generated files | ||||||
|  | Generated\ Files/ | ||||||
|  | 
 | ||||||
|  | # MSTest test Results | ||||||
|  | [Tt]est[Rr]esult*/ | ||||||
|  | [Bb]uild[Ll]og.* | ||||||
|  | 
 | ||||||
|  | # NUnit | ||||||
|  | *.VisualState.xml | ||||||
|  | TestResult.xml | ||||||
|  | nunit-*.xml | ||||||
|  | 
 | ||||||
|  | # Build Results of an ATL Project | ||||||
|  | [Dd]ebugPS/ | ||||||
|  | [Rr]eleasePS/ | ||||||
|  | dlldata.c | ||||||
|  | 
 | ||||||
|  | # Benchmark Results | ||||||
|  | BenchmarkDotNet.Artifacts/ | ||||||
|  | 
 | ||||||
|  | # .NET Core | ||||||
|  | project.lock.json | ||||||
|  | project.fragment.lock.json | ||||||
|  | artifacts/ | ||||||
|  | 
 | ||||||
|  | # ASP.NET Scaffolding | ||||||
|  | ScaffoldingReadMe.txt | ||||||
|  | 
 | ||||||
|  | # StyleCop | ||||||
|  | StyleCopReport.xml | ||||||
|  | 
 | ||||||
|  | # Files built by Visual Studio | ||||||
|  | *_i.c | ||||||
|  | *_p.c | ||||||
|  | *_h.h | ||||||
|  | *.ilk | ||||||
|  | *.meta | ||||||
|  | *.obj | ||||||
|  | *.iobj | ||||||
|  | *.pch | ||||||
|  | *.pdb | ||||||
|  | *.ipdb | ||||||
|  | *.pgc | ||||||
|  | *.pgd | ||||||
|  | *.rsp | ||||||
|  | *.sbr | ||||||
|  | *.tlb | ||||||
|  | *.tli | ||||||
|  | *.tlh | ||||||
|  | *.tmp | ||||||
|  | *.tmp_proj | ||||||
|  | *_wpftmp.csproj | ||||||
|  | *.log | ||||||
|  | *.tlog | ||||||
|  | *.vspscc | ||||||
|  | *.vssscc | ||||||
|  | .builds | ||||||
|  | *.pidb | ||||||
|  | *.svclog | ||||||
|  | *.scc | ||||||
|  | 
 | ||||||
|  | # Chutzpah Test files | ||||||
|  | _Chutzpah* | ||||||
|  | 
 | ||||||
|  | # Visual C++ cache files | ||||||
|  | ipch/ | ||||||
|  | *.aps | ||||||
|  | *.ncb | ||||||
|  | *.opendb | ||||||
|  | *.opensdf | ||||||
|  | *.sdf | ||||||
|  | *.cachefile | ||||||
|  | *.VC.db | ||||||
|  | *.VC.VC.opendb | ||||||
|  | 
 | ||||||
|  | # Visual Studio profiler | ||||||
|  | *.psess | ||||||
|  | *.vsp | ||||||
|  | *.vspx | ||||||
|  | *.sap | ||||||
|  | 
 | ||||||
|  | # Visual Studio Trace Files | ||||||
|  | *.e2e | ||||||
|  | 
 | ||||||
|  | # TFS 2012 Local Workspace | ||||||
|  | $tf/ | ||||||
|  | 
 | ||||||
|  | # Guidance Automation Toolkit | ||||||
|  | *.gpState | ||||||
|  | 
 | ||||||
|  | # ReSharper is a .NET coding add-in | ||||||
|  | _ReSharper*/ | ||||||
|  | *.[Rr]e[Ss]harper | ||||||
|  | *.DotSettings.user | ||||||
|  | 
 | ||||||
|  | # TeamCity is a build add-in | ||||||
|  | _TeamCity* | ||||||
|  | 
 | ||||||
|  | # DotCover is a Code Coverage Tool | ||||||
|  | *.dotCover | ||||||
|  | 
 | ||||||
|  | # AxoCover is a Code Coverage Tool | ||||||
|  | .axoCover/* | ||||||
|  | !.axoCover/settings.json | ||||||
|  | 
 | ||||||
|  | # Coverlet is a free, cross platform Code Coverage Tool | ||||||
|  | coverage*.json | ||||||
|  | coverage*.xml | ||||||
|  | coverage*.info | ||||||
|  | 
 | ||||||
|  | # Visual Studio code coverage results | ||||||
|  | *.coverage | ||||||
|  | *.coveragexml | ||||||
|  | 
 | ||||||
|  | # NCrunch | ||||||
|  | _NCrunch_* | ||||||
|  | .*crunch*.local.xml | ||||||
|  | nCrunchTemp_* | ||||||
|  | 
 | ||||||
|  | # MightyMoose | ||||||
|  | *.mm.* | ||||||
|  | AutoTest.Net/ | ||||||
|  | 
 | ||||||
|  | # Web workbench (sass) | ||||||
|  | .sass-cache/ | ||||||
|  | 
 | ||||||
|  | # Installshield output folder | ||||||
|  | [Ee]xpress/ | ||||||
|  | 
 | ||||||
|  | # DocProject is a documentation generator add-in | ||||||
|  | DocProject/buildhelp/ | ||||||
|  | DocProject/Help/*.HxT | ||||||
|  | DocProject/Help/*.HxC | ||||||
|  | DocProject/Help/*.hhc | ||||||
|  | DocProject/Help/*.hhk | ||||||
|  | DocProject/Help/*.hhp | ||||||
|  | DocProject/Help/Html2 | ||||||
|  | DocProject/Help/html | ||||||
|  | 
 | ||||||
|  | # Click-Once directory | ||||||
|  | publish/ | ||||||
|  | 
 | ||||||
|  | # Publish Web Output | ||||||
|  | *.[Pp]ublish.xml | ||||||
|  | *.azurePubxml | ||||||
|  | # Note: Comment the next line if you want to checkin your web deploy settings, | ||||||
|  | # but database connection strings (with potential passwords) will be unencrypted | ||||||
|  | *.pubxml | ||||||
|  | *.publishproj | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Web App publish settings. Comment the next line if you want to | ||||||
|  | # checkin your Azure Web App publish settings, but sensitive information contained | ||||||
|  | # in these scripts will be unencrypted | ||||||
|  | PublishScripts/ | ||||||
|  | 
 | ||||||
|  | # NuGet Packages | ||||||
|  | *.nupkg | ||||||
|  | # NuGet Symbol Packages | ||||||
|  | *.snupkg | ||||||
|  | # The packages folder can be ignored because of Package Restore | ||||||
|  | **/[Pp]ackages/* | ||||||
|  | # except build/, which is used as an MSBuild target. | ||||||
|  | !**/[Pp]ackages/build/ | ||||||
|  | # Uncomment if necessary however generally it will be regenerated when needed | ||||||
|  | #!**/[Pp]ackages/repositories.config | ||||||
|  | # NuGet v3's project.json files produces more ignorable files | ||||||
|  | *.nuget.props | ||||||
|  | *.nuget.targets | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Build Output | ||||||
|  | csx/ | ||||||
|  | *.build.csdef | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Emulator | ||||||
|  | ecf/ | ||||||
|  | rcf/ | ||||||
|  | 
 | ||||||
|  | # Windows Store app package directories and files | ||||||
|  | AppPackages/ | ||||||
|  | BundleArtifacts/ | ||||||
|  | Package.StoreAssociation.xml | ||||||
|  | _pkginfo.txt | ||||||
|  | *.appx | ||||||
|  | *.appxbundle | ||||||
|  | *.appxupload | ||||||
|  | 
 | ||||||
|  | # Visual Studio cache files | ||||||
|  | # files ending in .cache can be ignored | ||||||
|  | *.[Cc]ache | ||||||
|  | # but keep track of directories ending in .cache | ||||||
|  | !?*.[Cc]ache/ | ||||||
|  | 
 | ||||||
|  | # Others | ||||||
|  | ClientBin/ | ||||||
|  | ~$* | ||||||
|  | *~ | ||||||
|  | *.dbmdl | ||||||
|  | *.dbproj.schemaview | ||||||
|  | *.jfm | ||||||
|  | *.pfx | ||||||
|  | *.publishsettings | ||||||
|  | orleans.codegen.cs | ||||||
|  | 
 | ||||||
|  | # Including strong name files can present a security risk | ||||||
|  | # (https://github.com/github/gitignore/pull/2483#issue-259490424) | ||||||
|  | #*.snk | ||||||
|  | 
 | ||||||
|  | # Since there are multiple workflows, uncomment next line to ignore bower_components | ||||||
|  | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | ||||||
|  | #bower_components/ | ||||||
|  | 
 | ||||||
|  | # RIA/Silverlight projects | ||||||
|  | Generated_Code/ | ||||||
|  | 
 | ||||||
|  | # Backup & report files from converting an old project file | ||||||
|  | # to a newer Visual Studio version. Backup files are not needed, | ||||||
|  | # because we have git ;-) | ||||||
|  | _UpgradeReport_Files/ | ||||||
|  | Backup*/ | ||||||
|  | UpgradeLog*.XML | ||||||
|  | UpgradeLog*.htm | ||||||
|  | ServiceFabricBackup/ | ||||||
|  | *.rptproj.bak | ||||||
|  | 
 | ||||||
|  | # SQL Server files | ||||||
|  | *.mdf | ||||||
|  | *.ldf | ||||||
|  | *.ndf | ||||||
|  | 
 | ||||||
|  | # Business Intelligence projects | ||||||
|  | *.rdl.data | ||||||
|  | *.bim.layout | ||||||
|  | *.bim_*.settings | ||||||
|  | *.rptproj.rsuser | ||||||
|  | *- [Bb]ackup.rdl | ||||||
|  | *- [Bb]ackup ([0-9]).rdl | ||||||
|  | *- [Bb]ackup ([0-9][0-9]).rdl | ||||||
|  | 
 | ||||||
|  | # Microsoft Fakes | ||||||
|  | FakesAssemblies/ | ||||||
|  | 
 | ||||||
|  | # GhostDoc plugin setting file | ||||||
|  | *.GhostDoc.xml | ||||||
|  | 
 | ||||||
|  | # Node.js Tools for Visual Studio | ||||||
|  | .ntvs_analysis.dat | ||||||
|  | node_modules/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 build log | ||||||
|  | *.plg | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 workspace options file | ||||||
|  | *.opt | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | ||||||
|  | *.vbw | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 auto-generated project file (contains which files were open etc.) | ||||||
|  | *.vbp | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 workspace and project file (working project files containing files to include in project) | ||||||
|  | *.dsw | ||||||
|  | *.dsp | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 technical files | ||||||
|  | *.ncb | ||||||
|  | *.aps | ||||||
|  | 
 | ||||||
|  | # Visual Studio LightSwitch build output | ||||||
|  | **/*.HTMLClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/ModelManifest.xml | ||||||
|  | **/*.Server/GeneratedArtifacts | ||||||
|  | **/*.Server/ModelManifest.xml | ||||||
|  | _Pvt_Extensions | ||||||
|  | 
 | ||||||
|  | # Paket dependency manager | ||||||
|  | .paket/paket.exe | ||||||
|  | paket-files/ | ||||||
|  | 
 | ||||||
|  | # FAKE - F# Make | ||||||
|  | .fake/ | ||||||
|  | 
 | ||||||
|  | # CodeRush personal settings | ||||||
|  | .cr/personal | ||||||
|  | 
 | ||||||
|  | # Python Tools for Visual Studio (PTVS) | ||||||
|  | __pycache__/ | ||||||
|  | *.pyc | ||||||
|  | 
 | ||||||
|  | # Cake - Uncomment if you are using it | ||||||
|  | # tools/** | ||||||
|  | # !tools/packages.config | ||||||
|  | 
 | ||||||
|  | # Tabs Studio | ||||||
|  | *.tss | ||||||
|  | 
 | ||||||
|  | # Telerik's JustMock configuration file | ||||||
|  | *.jmconfig | ||||||
|  | 
 | ||||||
|  | # BizTalk build output | ||||||
|  | *.btp.cs | ||||||
|  | *.btm.cs | ||||||
|  | *.odx.cs | ||||||
|  | *.xsd.cs | ||||||
|  | 
 | ||||||
|  | # OpenCover UI analysis results | ||||||
|  | OpenCover/ | ||||||
|  | 
 | ||||||
|  | # Azure Stream Analytics local run output | ||||||
|  | ASALocalRun/ | ||||||
|  | 
 | ||||||
|  | # MSBuild Binary and Structured Log | ||||||
|  | *.binlog | ||||||
|  | 
 | ||||||
|  | # NVidia Nsight GPU debugger configuration file | ||||||
|  | *.nvuser | ||||||
|  | 
 | ||||||
|  | # MFractors (Xamarin productivity tool) working folder | ||||||
|  | .mfractor/ | ||||||
|  | 
 | ||||||
|  | # Local History for Visual Studio | ||||||
|  | .localhistory/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio History (VSHistory) files | ||||||
|  | .vshistory/ | ||||||
|  | 
 | ||||||
|  | # BeatPulse healthcheck temp database | ||||||
|  | healthchecksdb | ||||||
|  | 
 | ||||||
|  | # Backup folder for Package Reference Convert tool in Visual Studio 2017 | ||||||
|  | MigrationBackup/ | ||||||
|  | 
 | ||||||
|  | # Ionide (cross platform F# VS Code tools) working folder | ||||||
|  | .ionide/ | ||||||
|  | 
 | ||||||
|  | # Fody - auto-generated XML schema | ||||||
|  | FodyWeavers.xsd | ||||||
|  | 
 | ||||||
|  | # VS Code files for those working on multiple tools | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/settings.json | ||||||
|  | !.vscode/tasks.json | ||||||
|  | !.vscode/launch.json | ||||||
|  | !.vscode/extensions.json | ||||||
|  | *.code-workspace | ||||||
|  | 
 | ||||||
|  | # Local History for Visual Studio Code | ||||||
|  | .history/ | ||||||
|  | 
 | ||||||
|  | # Windows Installer files from build outputs | ||||||
|  | *.cab | ||||||
|  | *.msi | ||||||
|  | *.msix | ||||||
|  | *.msm | ||||||
|  | *.msp | ||||||
|  | 
 | ||||||
|  | # JetBrains Rider | ||||||
|  | *.sln.iml | ||||||
							
								
								
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | [submodule "vcpkg"] | ||||||
|  | 	path = vcpkg | ||||||
|  | 	url = https://github.com/microsoft/vcpkg | ||||||
							
								
								
									
										8
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | cmake_minimum_required(VERSION 3.29) | ||||||
|  | 
 | ||||||
|  | include(vcpkg/scripts/buildsystems/vcpkg.cmake) | ||||||
|  | set(CMAKE_CXX_STANDARD 23) | ||||||
|  | 
 | ||||||
|  | project(ShaderRecomp-ALL) | ||||||
|  | 
 | ||||||
|  | add_subdirectory(ShaderRecomp) | ||||||
							
								
								
									
										28
									
								
								CMakeSettings.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								CMakeSettings.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | { | ||||||
|  |     "configurations": [ | ||||||
|  |         { | ||||||
|  |             "name": "x64-Clang-Debug", | ||||||
|  |             "generator": "Ninja", | ||||||
|  |             "configurationType": "Debug", | ||||||
|  |             "buildRoot": "${projectDir}\\out\\build\\${name}", | ||||||
|  |             "installRoot": "${projectDir}\\out\\install\\${name}", | ||||||
|  |             "cmakeCommandArgs": "", | ||||||
|  |             "buildCommandArgs": "", | ||||||
|  |             "ctestCommandArgs": "", | ||||||
|  |             "inheritEnvironments": [ "clang_cl_x64_x64" ], | ||||||
|  |             "variables": [] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "name": "x64-Clang-Release", | ||||||
|  |             "generator": "Ninja", | ||||||
|  |             "configurationType": "RelWithDebInfo", | ||||||
|  |             "buildRoot": "${projectDir}\\out\\build\\${name}", | ||||||
|  |             "installRoot": "${projectDir}\\out\\install\\${name}", | ||||||
|  |             "cmakeCommandArgs": "", | ||||||
|  |             "buildCommandArgs": "", | ||||||
|  |             "ctestCommandArgs": "", | ||||||
|  |             "inheritEnvironments": [ "clang_cl_x64_x64" ], | ||||||
|  |             "variables": [] | ||||||
|  |         } | ||||||
|  |     ] | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								ShaderRecomp/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								ShaderRecomp/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | *.hlsli.h | ||||||
							
								
								
									
										23
									
								
								ShaderRecomp/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ShaderRecomp/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | project(ShaderRecomp) | ||||||
|  | 
 | ||||||
|  | include(bin2h.cmake) | ||||||
|  | bin2h(SOURCE_FILE shader_common.hlsli HEADER_FILE shader_common.hlsli.h VARIABLE_NAME SHADER_COMMON_HLSLI) | ||||||
|  | 
 | ||||||
|  | add_executable(ShaderRecomp  | ||||||
|  |     constant_table.h | ||||||
|  |     dxc_compiler.cpp | ||||||
|  |     dxc_compiler.h | ||||||
|  |     main.cpp | ||||||
|  |     pch.h | ||||||
|  |     shader.h | ||||||
|  |     shader_code.h | ||||||
|  |     shader_common.hlsli.h | ||||||
|  |     shader_recompiler.cpp | ||||||
|  |     shader_recompiler.h) | ||||||
|  | 
 | ||||||
|  | find_package(directx-dxc CONFIG REQUIRED) | ||||||
|  | target_link_libraries(ShaderRecomp PRIVATE Microsoft::DirectXShaderCompiler) | ||||||
|  | 
 | ||||||
|  | target_precompile_headers(ShaderRecomp PRIVATE pch.h) | ||||||
|  | 
 | ||||||
|  | add_compile_definitions(ShaderRecomp _CRT_SECURE_NO_WARNINGS) | ||||||
							
								
								
									
										83
									
								
								ShaderRecomp/bin2h.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								ShaderRecomp/bin2h.cmake
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | # https://github.com/sivachandran/cmake-bin2h | ||||||
|  | include(CMakeParseArguments) | ||||||
|  | 
 | ||||||
|  | # Function to wrap a given string into multiple lines at the given column position. | ||||||
|  | # Parameters: | ||||||
|  | #   VARIABLE    - The name of the CMake variable holding the string. | ||||||
|  | #   AT_COLUMN   - The column position at which string will be wrapped. | ||||||
|  | function(WRAP_STRING) | ||||||
|  |     set(oneValueArgs VARIABLE AT_COLUMN) | ||||||
|  |     cmake_parse_arguments(WRAP_STRING "${options}" "${oneValueArgs}" "" ${ARGN}) | ||||||
|  | 
 | ||||||
|  |     string(LENGTH ${${WRAP_STRING_VARIABLE}} stringLength) | ||||||
|  |     math(EXPR offset "0") | ||||||
|  | 
 | ||||||
|  |     while(stringLength GREATER 0) | ||||||
|  | 
 | ||||||
|  |         if(stringLength GREATER ${WRAP_STRING_AT_COLUMN}) | ||||||
|  |             math(EXPR length "${WRAP_STRING_AT_COLUMN}") | ||||||
|  |         else() | ||||||
|  |             math(EXPR length "${stringLength}") | ||||||
|  |         endif() | ||||||
|  | 
 | ||||||
|  |         string(SUBSTRING ${${WRAP_STRING_VARIABLE}} ${offset} ${length} line) | ||||||
|  |         set(lines "${lines}\n${line}") | ||||||
|  | 
 | ||||||
|  |         math(EXPR stringLength "${stringLength} - ${length}") | ||||||
|  |         math(EXPR offset "${offset} + ${length}") | ||||||
|  |     endwhile() | ||||||
|  | 
 | ||||||
|  |     set(${WRAP_STRING_VARIABLE} "${lines}" PARENT_SCOPE) | ||||||
|  | endfunction() | ||||||
|  | 
 | ||||||
|  | # Function to embed contents of a file as byte array in C/C++ header file(.h). The header file | ||||||
|  | # will contain a byte array and integer variable holding the size of the array. | ||||||
|  | # Parameters | ||||||
|  | #   SOURCE_FILE     - The path of source file whose contents will be embedded in the header file. | ||||||
|  | #   VARIABLE_NAME   - The name of the variable for the byte array. The string "_SIZE" will be append | ||||||
|  | #                     to this name and will be used a variable name for size variable. | ||||||
|  | #   HEADER_FILE     - The path of header file. | ||||||
|  | #   APPEND          - If specified appends to the header file instead of overwriting it | ||||||
|  | #   NULL_TERMINATE  - If specified a null byte(zero) will be append to the byte array. This will be | ||||||
|  | #                     useful if the source file is a text file and we want to use the file contents | ||||||
|  | #                     as string. But the size variable holds size of the byte array without this | ||||||
|  | #                     null byte. | ||||||
|  | # Usage: | ||||||
|  | #   bin2h(SOURCE_FILE "Logo.png" HEADER_FILE "Logo.h" VARIABLE_NAME "LOGO_PNG") | ||||||
|  | function(BIN2H) | ||||||
|  |     set(options APPEND NULL_TERMINATE) | ||||||
|  |     set(oneValueArgs SOURCE_FILE VARIABLE_NAME HEADER_FILE) | ||||||
|  |     cmake_parse_arguments(BIN2H "${options}" "${oneValueArgs}" "" ${ARGN}) | ||||||
|  | 
 | ||||||
|  |     # reads source file contents as hex string | ||||||
|  |     file(READ ${BIN2H_SOURCE_FILE} hexString HEX) | ||||||
|  |     string(LENGTH ${hexString} hexStringLength) | ||||||
|  | 
 | ||||||
|  |     # appends null byte if asked | ||||||
|  |     if(BIN2H_NULL_TERMINATE) | ||||||
|  |         set(hexString "${hexString}00") | ||||||
|  |     endif() | ||||||
|  | 
 | ||||||
|  |     # wraps the hex string into multiple lines at column 32(i.e. 16 bytes per line) | ||||||
|  |     wrap_string(VARIABLE hexString AT_COLUMN 32) | ||||||
|  |     math(EXPR arraySize "${hexStringLength} / 2") | ||||||
|  | 
 | ||||||
|  |     # adds '0x' prefix and comma suffix before and after every byte respectively | ||||||
|  |     string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " arrayValues ${hexString}) | ||||||
|  |     # removes trailing comma | ||||||
|  |     string(REGEX REPLACE ", $" "" arrayValues ${arrayValues}) | ||||||
|  | 
 | ||||||
|  |     # converts the variable name into proper C identifier | ||||||
|  |     string(MAKE_C_IDENTIFIER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME) | ||||||
|  | 
 | ||||||
|  |     # declares byte array and the length variables | ||||||
|  |     set(arrayDefinition "const char ${BIN2H_VARIABLE_NAME}[] = { ${arrayValues} };") | ||||||
|  |     set(arraySizeDefinition "const size_t ${BIN2H_VARIABLE_NAME}_SIZE = ${arraySize};") | ||||||
|  | 
 | ||||||
|  |     set(declarations "${arrayDefinition}\n\n${arraySizeDefinition}\n\n") | ||||||
|  |     if(BIN2H_APPEND) | ||||||
|  |         file(APPEND ${BIN2H_HEADER_FILE} "${declarations}") | ||||||
|  |     else() | ||||||
|  |         file(WRITE ${BIN2H_HEADER_FILE} "${declarations}") | ||||||
|  |     endif() | ||||||
|  | endfunction() | ||||||
							
								
								
									
										88
									
								
								ShaderRecomp/constant_table.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								ShaderRecomp/constant_table.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,88 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | enum class ParameterClass : uint16_t // D3DXPARAMETER_CLASS
 | ||||||
|  | { | ||||||
|  |     Scalar, | ||||||
|  |     Vector, | ||||||
|  |     MatrixRows, | ||||||
|  |     MatrixColumns, | ||||||
|  |     Object, | ||||||
|  |     Struct | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class ParameterType : uint16_t // D3DXPARAMETER_TYPE 
 | ||||||
|  | { | ||||||
|  |     Void, | ||||||
|  |     Bool, | ||||||
|  |     Int, | ||||||
|  |     Float, | ||||||
|  |     String, | ||||||
|  |     Texture, | ||||||
|  |     Texture1D, | ||||||
|  |     Texture2D, | ||||||
|  |     Texture3D, | ||||||
|  |     TextureCube, | ||||||
|  |     Sampler, | ||||||
|  |     Sampler1D, | ||||||
|  |     Sampler2D, | ||||||
|  |     Sampler3D, | ||||||
|  |     SamplerCube, | ||||||
|  |     PixelShader, | ||||||
|  |     VertexShader, | ||||||
|  |     PixelFragment, | ||||||
|  |     VertexFragment, | ||||||
|  |     Unsupported | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct StructMemberInfo // D3DXSHADER_STRUCTMEMBERINFO
 | ||||||
|  | { | ||||||
|  |     be<uint32_t> name; | ||||||
|  |     be<uint32_t> typeInfo; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct TypeInfo // D3DXSHADER_TYPEINFO
 | ||||||
|  | { | ||||||
|  |     be<ParameterClass> parameterClass; | ||||||
|  |     be<ParameterType> parameterType; | ||||||
|  |     be<uint16_t> rows; | ||||||
|  |     be<uint16_t> columns; | ||||||
|  |     be<uint16_t> elements; | ||||||
|  |     be<uint16_t> structMembers; | ||||||
|  |     be<uint32_t> structMemberInfo; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class RegisterSet : uint16_t // D3DXREGISTER_SET
 | ||||||
|  | { | ||||||
|  |     Bool, | ||||||
|  |     Int4, | ||||||
|  |     Float4, | ||||||
|  |     Sampler | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ConstantInfo // D3DXSHADER_CONSTANTINFO
 | ||||||
|  | { | ||||||
|  |     be<uint32_t> name; | ||||||
|  |     be<RegisterSet> registerSet; | ||||||
|  |     be<uint16_t> registerIndex; | ||||||
|  |     be<uint16_t> registerCount; | ||||||
|  |     be<uint16_t> reserved; | ||||||
|  |     be<uint32_t> typeInfo; | ||||||
|  |     be<uint32_t> defaultValue; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ConstantTable // D3DXSHADER_CONSTANTTABLE
 | ||||||
|  | { | ||||||
|  |     be<uint32_t> size; | ||||||
|  |     be<uint32_t> creator; | ||||||
|  |     be<uint32_t> version; | ||||||
|  |     be<uint32_t> constants; | ||||||
|  |     be<uint32_t> constantInfo; | ||||||
|  |     be<uint32_t> flags; | ||||||
|  |     be<uint32_t> target; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ConstantTableContainer | ||||||
|  | { | ||||||
|  |     be<uint32_t> size; | ||||||
|  |     ConstantTable constantTable; | ||||||
|  | }; | ||||||
							
								
								
									
										79
									
								
								ShaderRecomp/dxc_compiler.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ShaderRecomp/dxc_compiler.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | ||||||
|  | #include "dxc_compiler.h" | ||||||
|  | 
 | ||||||
|  | DxcCompiler::DxcCompiler() | ||||||
|  | { | ||||||
|  |     HRESULT hr = DxcCreateInstance(CLSID_DxcCompiler, IID_PPV_ARGS(&dxcCompiler)); | ||||||
|  |     assert(SUCCEEDED(hr)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DxcCompiler::~DxcCompiler() | ||||||
|  | { | ||||||
|  |     dxcCompiler->Release(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | IDxcBlob* DxcCompiler::compile(const std::string& shaderSource, bool isPixelShader, bool compileSpirv) | ||||||
|  | { | ||||||
|  |     DxcBuffer source{}; | ||||||
|  |     source.Ptr = shaderSource.c_str(); | ||||||
|  |     source.Size = shaderSource.size(); | ||||||
|  | 
 | ||||||
|  |     const wchar_t* args[16]{}; | ||||||
|  |     uint32_t argCount = 0; | ||||||
|  | 
 | ||||||
|  |     args[argCount++] = isPixelShader ? L"-T ps_6_0" : L"-T vs_6_0"; | ||||||
|  |     args[argCount++] = L"-HV 2021"; | ||||||
|  |     args[argCount++] = L"-all-resources-bound"; | ||||||
|  | 
 | ||||||
|  |     if (compileSpirv) | ||||||
|  |     { | ||||||
|  |         args[argCount++] = L"-spirv"; | ||||||
|  |         args[argCount++] = L"-fvk-use-dx-layout"; | ||||||
|  | 
 | ||||||
|  |         if (!isPixelShader) | ||||||
|  |             args[argCount++] = L"-fvk-invert-y"; | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         args[argCount++] = L"-Wno-ignored-attributes"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     IDxcResult* result = nullptr; | ||||||
|  |     HRESULT hr = dxcCompiler->Compile(&source, args, argCount, nullptr, IID_PPV_ARGS(&result)); | ||||||
|  | 
 | ||||||
|  |     IDxcBlob* object = nullptr; | ||||||
|  |     if (SUCCEEDED(hr)) | ||||||
|  |     { | ||||||
|  |         assert(result != nullptr); | ||||||
|  | 
 | ||||||
|  |         HRESULT status; | ||||||
|  |         hr = result->GetStatus(&status); | ||||||
|  |         assert(SUCCEEDED(hr)); | ||||||
|  | 
 | ||||||
|  |         if (FAILED(status)) | ||||||
|  |         { | ||||||
|  |             if (result->HasOutput(DXC_OUT_ERRORS)) | ||||||
|  |             { | ||||||
|  |                 IDxcBlobUtf8* errors = nullptr; | ||||||
|  |                 hr = result->GetOutput(DXC_OUT_ERRORS, IID_PPV_ARGS(&errors), nullptr); | ||||||
|  |                 assert(SUCCEEDED(hr) && errors != nullptr); | ||||||
|  | 
 | ||||||
|  |                 fputs(errors->GetStringPointer(), stderr); | ||||||
|  | 
 | ||||||
|  |                 errors->Release(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             hr = result->GetOutput(DXC_OUT_OBJECT, IID_PPV_ARGS(&object), nullptr); | ||||||
|  |             assert(SUCCEEDED(hr) && object != nullptr); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         result->Release(); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         assert(result == nullptr); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return object; | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								ShaderRecomp/dxc_compiler.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ShaderRecomp/dxc_compiler.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | struct DxcCompiler | ||||||
|  | { | ||||||
|  |     IDxcCompiler3* dxcCompiler = nullptr; | ||||||
|  | 
 | ||||||
|  |     DxcCompiler(); | ||||||
|  |     ~DxcCompiler(); | ||||||
|  | 
 | ||||||
|  |     IDxcBlob* compile(const std::string& shaderSource, bool isPixelShader, bool compileSpirv); | ||||||
|  | }; | ||||||
							
								
								
									
										83
									
								
								ShaderRecomp/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								ShaderRecomp/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | #include "shader.h" | ||||||
|  | #include "shader_recompiler.h" | ||||||
|  | #include "dxc_compiler.h" | ||||||
|  | 
 | ||||||
|  | static std::unique_ptr<uint8_t[]> readAllBytes(const char* filePath) | ||||||
|  | { | ||||||
|  |     FILE* file = fopen(filePath, "rb"); | ||||||
|  |     fseek(file, 0, SEEK_END); | ||||||
|  |     long fileSize = ftell(file); | ||||||
|  |     fseek(file, 0, SEEK_SET); | ||||||
|  |     auto data = std::make_unique<uint8_t[]>(fileSize); | ||||||
|  |     fread(data.get(), 1, fileSize, file); | ||||||
|  |     fclose(file); | ||||||
|  |     return data; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void writeAllBytes(const char* filePath, const void* data, size_t dataSize) | ||||||
|  | { | ||||||
|  |     FILE* file = fopen(filePath, "wb"); | ||||||
|  |     fwrite(data, 1, dataSize, file); | ||||||
|  |     fclose(file); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(int argc, char** argv) | ||||||
|  | { | ||||||
|  |     if (std::filesystem::is_directory(argv[1])) | ||||||
|  |     { | ||||||
|  |         std::vector<std::string> filePaths; | ||||||
|  | 
 | ||||||
|  |         for (auto& file : std::filesystem::directory_iterator(argv[1])) | ||||||
|  |         { | ||||||
|  |             auto extension = file.path().extension(); | ||||||
|  |             if (extension == ".xpu" || extension == ".xvu") | ||||||
|  |                 filePaths.push_back(file.path().string()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         std::for_each(std::execution::par_unseq, filePaths.begin(), filePaths.end(), [&](auto& filePath) | ||||||
|  |             { | ||||||
|  |                 printf("%s\n", filePath.c_str()); | ||||||
|  | 
 | ||||||
|  |                 thread_local ShaderRecompiler recompiler; | ||||||
|  |                 recompiler = {}; | ||||||
|  |                 recompiler.recompile(readAllBytes(filePath.c_str()).get()); | ||||||
|  |                 writeAllBytes((filePath + ".hlsl").c_str(), recompiler.out.data(), recompiler.out.size()); | ||||||
|  | 
 | ||||||
|  |                 thread_local DxcCompiler dxcCompiler; | ||||||
|  | 
 | ||||||
|  |                 auto dxil = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, false); | ||||||
|  |                 auto spirv = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, true); | ||||||
|  | 
 | ||||||
|  |                 assert(dxil != nullptr && spirv != nullptr); | ||||||
|  |                 assert(*(reinterpret_cast<uint32_t*>(dxil->GetBufferPointer()) + 1) != 0 && "DXIL was not signed properly!"); | ||||||
|  | 
 | ||||||
|  |                 std::string outFilePath = argv[2]; | ||||||
|  |                 outFilePath += '/'; | ||||||
|  |                 outFilePath += filePath.substr(filePath.find_last_of("\\/") + 1); | ||||||
|  | 
 | ||||||
|  |                 FILE* file = fopen(outFilePath.c_str(), "wb"); | ||||||
|  | 
 | ||||||
|  |                 struct | ||||||
|  |                 { | ||||||
|  |                     uint32_t version; | ||||||
|  |                     uint32_t dxilSize; | ||||||
|  |                     uint32_t spirvSize; | ||||||
|  |                 } header; | ||||||
|  | 
 | ||||||
|  |                 header.version = 0; | ||||||
|  |                 header.dxilSize = uint32_t(dxil->GetBufferSize()); | ||||||
|  |                 header.spirvSize = uint32_t(spirv->GetBufferSize()); | ||||||
|  | 
 | ||||||
|  |                 fwrite(&header, sizeof(header), 1, file); | ||||||
|  |                 fwrite(dxil->GetBufferPointer(), 1, dxil->GetBufferSize(), file); | ||||||
|  |                 fwrite(spirv->GetBufferPointer(), 1, spirv->GetBufferSize(), file); | ||||||
|  | 
 | ||||||
|  |                 fclose(file); | ||||||
|  |             }); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								ShaderRecomp/pch.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								ShaderRecomp/pch.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <Windows.h> | ||||||
|  | #include <dxcapi.h> | ||||||
|  | 
 | ||||||
|  | #include <bit> | ||||||
|  | #include <cassert> | ||||||
|  | #include <cstdint> | ||||||
|  | #include <execution> | ||||||
|  | #include <filesystem> | ||||||
|  | #include <format> | ||||||
|  | #include <string> | ||||||
|  | #include <unordered_map> | ||||||
|  | 
 | ||||||
|  | template<typename T> | ||||||
|  | struct be | ||||||
|  | { | ||||||
|  |     T value; | ||||||
|  | 
 | ||||||
|  |     T get() const | ||||||
|  |     { | ||||||
|  |         if constexpr (std::is_enum_v<T>) | ||||||
|  |             return T(std::byteswap(std::underlying_type_t<T>(value))); | ||||||
|  |         else | ||||||
|  |             return std::byteswap(value); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     operator T() const | ||||||
|  |     { | ||||||
|  |         return get(); | ||||||
|  |     } | ||||||
|  | };   | ||||||
							
								
								
									
										107
									
								
								ShaderRecomp/shader.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								ShaderRecomp/shader.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,107 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "constant_table.h" | ||||||
|  | 
 | ||||||
|  | struct Float4Definition | ||||||
|  | { | ||||||
|  |     be<uint16_t> registerIndex; | ||||||
|  |     be<uint16_t> count; | ||||||
|  |     be<uint32_t> physicalOffset; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct Int4Definition | ||||||
|  | { | ||||||
|  |     be<uint16_t> registerIndex; | ||||||
|  |     be<uint16_t> count; | ||||||
|  |     be<uint32_t> values[]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct DefinitionTable | ||||||
|  | { | ||||||
|  |     be<uint32_t> field0; | ||||||
|  |     be<uint32_t> field4; | ||||||
|  |     be<uint32_t> field8; | ||||||
|  |     be<uint32_t> fieldC; | ||||||
|  |     be<uint32_t> size; | ||||||
|  |     be<uint32_t> definitions[]; // float4, int4 and bool separated by null terminators
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct Shader | ||||||
|  | { | ||||||
|  |     be<uint32_t> physicalOffset; | ||||||
|  |     be<uint32_t> size; | ||||||
|  |     be<uint32_t> field8; | ||||||
|  |     be<uint32_t> fieldC; | ||||||
|  |     be<uint32_t> field10; | ||||||
|  |     be<uint32_t> interpolatorInfo; // interpolator count: (interpolatorInfo >> 5) & 0x1F
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class DeclUsage : uint32_t | ||||||
|  | { | ||||||
|  |     Position = 0, | ||||||
|  |     BlendWeight = 1, | ||||||
|  |     BlendIndices = 2, | ||||||
|  |     Normal = 3, | ||||||
|  |     PointSize = 4, | ||||||
|  |     TexCoord = 5, | ||||||
|  |     Tangent = 6, | ||||||
|  |     Binormal = 7, | ||||||
|  |     TessFactor = 8, | ||||||
|  |     PositionT = 9, | ||||||
|  |     Color = 10, | ||||||
|  |     Fog = 11, | ||||||
|  |     Depth = 12, | ||||||
|  |     Sample = 13 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct VertexElement | ||||||
|  | { | ||||||
|  |     uint32_t address : 12; | ||||||
|  |     DeclUsage usage : 4; | ||||||
|  |     uint32_t usageIndex : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct Interpolator | ||||||
|  | { | ||||||
|  |     uint32_t usageIndex : 4; | ||||||
|  |     DeclUsage usage : 4; | ||||||
|  |     uint32_t reg : 4; | ||||||
|  |     uint32_t : 20; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct VertexShader : Shader | ||||||
|  | { | ||||||
|  |     be<uint32_t> field18; | ||||||
|  |     be<uint32_t> vertexElementCount; | ||||||
|  |     be<uint32_t> field20; | ||||||
|  |     be<uint32_t> vertexElementsAndInterpolators[]; // field18 + vertex elements + interpolators
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum PixelShaderOutputs : uint32_t | ||||||
|  | { | ||||||
|  |     PIXEL_SHADER_OUTPUT_COLOR0 = 0x1, | ||||||
|  |     PIXEL_SHADER_OUTPUT_COLOR1 = 0x2, | ||||||
|  |     PIXEL_SHADER_OUTPUT_COLOR2 = 0x4, | ||||||
|  |     PIXEL_SHADER_OUTPUT_COLOR3 = 0x8, | ||||||
|  |     PIXEL_SHADER_OUTPUT_DEPTH = 0x10 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct PixelShader : Shader | ||||||
|  | { | ||||||
|  |     be<uint32_t> field18; | ||||||
|  |     be<PixelShaderOutputs> outputs; | ||||||
|  |     be<uint32_t> interpolators[]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ShaderContainer | ||||||
|  | { | ||||||
|  |     be<uint32_t> flags; | ||||||
|  |     be<uint32_t> virtualSize; | ||||||
|  |     be<uint32_t> physicalSize; | ||||||
|  |     be<uint32_t> fieldC; | ||||||
|  |     be<uint32_t> constantTableOffset; | ||||||
|  |     be<uint32_t> definitionTableOffset; | ||||||
|  |     be<uint32_t> shaderOffset; | ||||||
|  |     be<uint32_t> field1C; | ||||||
|  |     be<uint32_t> field20; | ||||||
|  | }; | ||||||
							
								
								
									
										458
									
								
								ShaderRecomp/shader_code.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										458
									
								
								ShaderRecomp/shader_code.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,458 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | enum class ControlFlowOpcode : uint32_t | ||||||
|  | { | ||||||
|  |     Nop = 0, | ||||||
|  |     Exec = 1, | ||||||
|  |     ExecEnd = 2, | ||||||
|  |     CondExec = 3, | ||||||
|  |     CondExecEnd = 4, | ||||||
|  |     CondExecPred = 5, | ||||||
|  |     CondExecPredEnd = 6, | ||||||
|  |     LoopStart = 7, | ||||||
|  |     LoopEnd = 8, | ||||||
|  |     CondCall = 9, | ||||||
|  |     Return = 10, | ||||||
|  |     CondJmp = 11, | ||||||
|  |     Alloc = 12, | ||||||
|  |     CondExecPredClean = 13, | ||||||
|  |     CondExecPredCleanEnd = 14, | ||||||
|  |     MarkVsFetchDone = 15, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowExecInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 12; | ||||||
|  |     uint32_t count : 3; | ||||||
|  |     uint32_t isYield : 1; | ||||||
|  |     uint32_t sequence : 12; | ||||||
|  |     uint32_t vertexCacheHigh : 4; | ||||||
|  |     uint32_t vertexCacheLow : 2; | ||||||
|  |     uint32_t : 7; | ||||||
|  |     uint32_t isPredicateClean : 1; | ||||||
|  |     uint32_t : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowExecPredInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 12; | ||||||
|  |     uint32_t count : 3; | ||||||
|  |     uint32_t isYield : 1; | ||||||
|  |     uint32_t sequence : 12; | ||||||
|  |     uint32_t vertexCacheHigh : 4; | ||||||
|  |     uint32_t vertexCacheLow : 2; | ||||||
|  |     uint32_t : 7; | ||||||
|  |     uint32_t isPredicateClean : 1; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowCondExecInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 12; | ||||||
|  |     uint32_t count : 3; | ||||||
|  |     uint32_t isYield : 1; | ||||||
|  |     uint32_t sequence : 12; | ||||||
|  |     uint32_t vertexCacheHigh : 4; | ||||||
|  |     uint32_t vertexCacheLow : 2; | ||||||
|  |     uint32_t boolAddress : 8; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowCondExecPredInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 12; | ||||||
|  |     uint32_t count : 3; | ||||||
|  |     uint32_t isYield : 1; | ||||||
|  |     uint32_t sequence : 12; | ||||||
|  |     uint32_t vertexCacheHigh : 4; | ||||||
|  |     uint32_t vertexCacheLow : 2; | ||||||
|  |     uint32_t : 7; | ||||||
|  |     uint32_t isPredicateClean : 1; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowLoopStartInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 13; | ||||||
|  |     uint32_t isRepeat : 1; | ||||||
|  |     uint32_t : 2; | ||||||
|  |     uint32_t loopId : 5; | ||||||
|  |     uint32_t : 11; | ||||||
|  |     uint32_t : 11; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowLoopEndInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 13; | ||||||
|  |     uint32_t : 3; | ||||||
|  |     uint32_t loopId : 5; | ||||||
|  |     uint32_t isPredicatedBreak : 1; | ||||||
|  |     uint32_t : 10; | ||||||
|  |     uint32_t : 10; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowCondCallInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 13; | ||||||
|  |     uint32_t isUnconditional : 1; | ||||||
|  |     uint32_t isPredicated : 1; | ||||||
|  |     uint32_t : 17; | ||||||
|  |     uint32_t : 2; | ||||||
|  |     uint32_t boolAddress : 8; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowReturnInstruction | ||||||
|  | { | ||||||
|  |     uint32_t : 32; | ||||||
|  |     uint32_t : 11; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowCondJmpInstruction | ||||||
|  | { | ||||||
|  |     uint32_t address : 13; | ||||||
|  |     uint32_t isUnconditional : 1; | ||||||
|  |     uint32_t isPredicated : 1; | ||||||
|  |     uint32_t : 17; | ||||||
|  |     uint32_t : 1; | ||||||
|  |     uint32_t direction : 1; | ||||||
|  |     uint32_t boolAddress : 8; | ||||||
|  |     uint32_t condition : 1; | ||||||
|  |     uint32_t absoluteAddressing : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct ControlFlowAllocInstruction | ||||||
|  | { | ||||||
|  |     uint32_t size : 3; | ||||||
|  |     uint32_t : 29; | ||||||
|  |     uint32_t : 8; | ||||||
|  |     uint32_t isUnserialized : 1; | ||||||
|  |     uint32_t allocType : 2; | ||||||
|  |     uint32_t : 1; | ||||||
|  |     ControlFlowOpcode opcode : 4; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | union ControlFlowInstruction | ||||||
|  | { | ||||||
|  |     ControlFlowExecInstruction exec; | ||||||
|  |     ControlFlowCondExecInstruction condExec; | ||||||
|  |     ControlFlowCondExecPredInstruction condExecPred; | ||||||
|  |     ControlFlowLoopStartInstruction loopStart; | ||||||
|  |     ControlFlowLoopEndInstruction loopEnd; | ||||||
|  |     ControlFlowCondCallInstruction condCall; | ||||||
|  |     ControlFlowReturnInstruction ret; | ||||||
|  |     ControlFlowCondJmpInstruction condJmp; | ||||||
|  |     ControlFlowAllocInstruction alloc; | ||||||
|  | 
 | ||||||
|  |     struct | ||||||
|  |     { | ||||||
|  |         uint32_t : 32; | ||||||
|  |         uint32_t : 12; | ||||||
|  |         ControlFlowOpcode opcode : 4; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class FetchOpcode : uint32_t | ||||||
|  | { | ||||||
|  |     VertexFetch = 0, | ||||||
|  |     TextureFetch = 1, | ||||||
|  |     GetTextureBorderColorFrac = 16, | ||||||
|  |     GetTextureComputedLod = 17, | ||||||
|  |     GetTextureGradients = 18, | ||||||
|  |     GetTextureWeights = 19, | ||||||
|  |     SetTextureLod = 24, | ||||||
|  |     SetTextureGradientsHorz = 25, | ||||||
|  |     SetTextureGradientsVert = 26 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class FetchDestinationSwizzle : uint32_t | ||||||
|  | { | ||||||
|  |     X = 0, | ||||||
|  |     Y = 1, | ||||||
|  |     Z = 2, | ||||||
|  |     W = 3, | ||||||
|  |     Zero = 4, | ||||||
|  |     One = 5, | ||||||
|  |     Keep = 7 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct VertexFetchInstruction | ||||||
|  | { | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         FetchOpcode opcode : 5; | ||||||
|  |         uint32_t srcRegister : 6; | ||||||
|  |         uint32_t srcRegisterAm : 1; | ||||||
|  |         uint32_t dstRegister : 6; | ||||||
|  |         uint32_t dstRegisterAam : 1; | ||||||
|  |         uint32_t mustBeOne : 1; | ||||||
|  |         uint32_t constIndex : 5; | ||||||
|  |         uint32_t constIndexSelect : 2; | ||||||
|  |         uint32_t prefetchCount : 3; | ||||||
|  |         uint32_t srcSwizzle : 2; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t dstSwizzle : 12; | ||||||
|  |         uint32_t formatCompAll : 1; | ||||||
|  |         uint32_t numFormatAll : 1; | ||||||
|  |         uint32_t signedRfModeAll : 1; | ||||||
|  |         uint32_t isIndexRounded : 1; | ||||||
|  |         uint32_t format : 6; | ||||||
|  |         uint32_t reserved2 : 2; | ||||||
|  |         int32_t expAdjust : 6; | ||||||
|  |         uint32_t isMiniFetch : 1; | ||||||
|  |         uint32_t isPredicated : 1; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t stride : 8; | ||||||
|  |         int32_t offset : 23; | ||||||
|  |         uint32_t predicateCondition : 1; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class TextureDimension : uint32_t | ||||||
|  | { | ||||||
|  |     Texture1D, | ||||||
|  |     Texture2D, | ||||||
|  |     Texture3D, | ||||||
|  |     TextureCube | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct TextureFetchInstruction | ||||||
|  | { | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         FetchOpcode opcode : 5; | ||||||
|  |         uint32_t srcRegister : 6; | ||||||
|  |         uint32_t srcRegisterAm : 1; | ||||||
|  |         uint32_t dstRegister : 6; | ||||||
|  |         uint32_t dstRegisterAm : 1; | ||||||
|  |         uint32_t fetchValidOnly : 1; | ||||||
|  |         uint32_t constIndex : 5; | ||||||
|  |         uint32_t texCoordDenorm : 1; | ||||||
|  |         uint32_t srcSwizzle : 6; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t dstSwizzle : 12; | ||||||
|  |         uint32_t magFilter : 2; | ||||||
|  |         uint32_t minFilter : 2; | ||||||
|  |         uint32_t mipFilter : 2; | ||||||
|  |         uint32_t anisoFilter : 3; | ||||||
|  |         uint32_t arbitraryFilter : 3; | ||||||
|  |         uint32_t volMagFilter : 2; | ||||||
|  |         uint32_t volMinFilter : 2; | ||||||
|  |         uint32_t useCompLod : 1; | ||||||
|  |         uint32_t useRegLod : 1; | ||||||
|  |         uint32_t : 1; | ||||||
|  |         uint32_t isPredicated : 1; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t useRegGradients : 1; | ||||||
|  |         uint32_t sampleLocation : 1; | ||||||
|  |         int32_t lodBias : 7; | ||||||
|  |         uint32_t : 5; | ||||||
|  |         TextureDimension dimension : 2; | ||||||
|  |         int32_t offsetX : 5; | ||||||
|  |         int32_t offsetY : 5; | ||||||
|  |         int32_t offsetZ : 5; | ||||||
|  |         uint32_t predCondition : 1; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | union FetchInstruction | ||||||
|  | { | ||||||
|  |     VertexFetchInstruction vertexFetch; | ||||||
|  |     TextureFetchInstruction textureFetch; | ||||||
|  | 
 | ||||||
|  |     struct | ||||||
|  |     { | ||||||
|  |         FetchOpcode opcode : 5; | ||||||
|  |         uint32_t : 27; | ||||||
|  |         uint32_t : 32; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class AluScalarOpcode : uint32_t | ||||||
|  | { | ||||||
|  |     Adds = 0, | ||||||
|  |     AddsPrev = 1, | ||||||
|  |     Muls = 2, | ||||||
|  |     MulsPrev = 3, | ||||||
|  |     MulsPrev2 = 4, | ||||||
|  |     Maxs = 5, | ||||||
|  |     Mins = 6, | ||||||
|  |     Seqs = 7, | ||||||
|  |     Sgts = 8, | ||||||
|  |     Sges = 9, | ||||||
|  |     Snes = 10, | ||||||
|  |     Frcs = 11, | ||||||
|  |     Truncs = 12, | ||||||
|  |     Floors = 13, | ||||||
|  |     Exp = 14, | ||||||
|  |     Logc = 15, | ||||||
|  |     Log = 16, | ||||||
|  |     Rcpc = 17, | ||||||
|  |     Rcpf = 18, | ||||||
|  |     Rcp = 19, | ||||||
|  |     Rsqc = 20, | ||||||
|  |     Rsqf = 21, | ||||||
|  |     Rsq = 22, | ||||||
|  |     MaxAs = 23, | ||||||
|  |     MaxAsf = 24, | ||||||
|  |     Subs = 25, | ||||||
|  |     SubsPrev = 26, | ||||||
|  |     SetpEq = 27, | ||||||
|  |     SetpNe = 28, | ||||||
|  |     SetpGt = 29, | ||||||
|  |     SetpGe = 30, | ||||||
|  |     SetpInv = 31, | ||||||
|  |     SetpPop = 32, | ||||||
|  |     SetpClr = 33, | ||||||
|  |     SetpRstr = 34, | ||||||
|  |     KillsEq = 35, | ||||||
|  |     KillsGt = 36, | ||||||
|  |     KillsGe = 37, | ||||||
|  |     KillsNe = 38, | ||||||
|  |     KillsOne = 39, | ||||||
|  |     Sqrt = 40, | ||||||
|  |     Mulsc0 = 42, | ||||||
|  |     Mulsc1 = 43, | ||||||
|  |     Addsc0 = 44, | ||||||
|  |     Addsc1 = 45, | ||||||
|  |     Subsc0 = 46, | ||||||
|  |     Subsc1 = 47, | ||||||
|  |     Sin = 48, | ||||||
|  |     Cos = 49, | ||||||
|  |     RetainPrev = 50 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class AluVectorOpcode : uint32_t | ||||||
|  | { | ||||||
|  |     Add = 0, | ||||||
|  |     Mul = 1, | ||||||
|  |     Max = 2, | ||||||
|  |     Min = 3, | ||||||
|  |     Seq = 4, | ||||||
|  |     Sgt = 5, | ||||||
|  |     Sge = 6, | ||||||
|  |     Sne = 7, | ||||||
|  |     Frc = 8, | ||||||
|  |     Trunc = 9, | ||||||
|  |     Floor = 10, | ||||||
|  |     Mad = 11, | ||||||
|  |     CndEq = 12, | ||||||
|  |     CndGe = 13, | ||||||
|  |     CndGt = 14, | ||||||
|  |     Dp4 = 15, | ||||||
|  |     Dp3 = 16, | ||||||
|  |     Dp2Add = 17, | ||||||
|  |     Cube = 18, | ||||||
|  |     Max4 = 19, | ||||||
|  |     SetpEqPush = 20, | ||||||
|  |     SetpNePush = 21, | ||||||
|  |     SetpGtPush = 22, | ||||||
|  |     SetpGePush = 23, | ||||||
|  |     KillEq = 24, | ||||||
|  |     KillGt = 25, | ||||||
|  |     KillGe = 26, | ||||||
|  |     KillNe = 27, | ||||||
|  |     Dst = 28, | ||||||
|  |     MaxA = 29 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class ExportRegister : uint32_t | ||||||
|  | { | ||||||
|  |     VSInterpolator0 = 0, | ||||||
|  |     VSInterpolator1, | ||||||
|  |     VSInterpolator2, | ||||||
|  |     VSInterpolator3, | ||||||
|  |     VSInterpolator4, | ||||||
|  |     VSInterpolator5, | ||||||
|  |     VSInterpolator6, | ||||||
|  |     VSInterpolator7, | ||||||
|  |     VSInterpolator8, | ||||||
|  |     VSInterpolator9, | ||||||
|  |     VSInterpolator10, | ||||||
|  |     VSInterpolator11, | ||||||
|  |     VSInterpolator12, | ||||||
|  |     VSInterpolator13, | ||||||
|  |     VSInterpolator14, | ||||||
|  |     VSInterpolator15, | ||||||
|  |     VSPosition = 62, | ||||||
|  |     VSPointSizeEdgeFlagKillVertex = 63, | ||||||
|  |     PSColor0 = 0, | ||||||
|  |     PSColor1, | ||||||
|  |     PSColor2, | ||||||
|  |     PSColor3, | ||||||
|  |     PSDepth = 61, | ||||||
|  |     ExportAddress = 32, | ||||||
|  |     ExportData0 = 33, | ||||||
|  |     ExportData1, | ||||||
|  |     ExportData2, | ||||||
|  |     ExportData3, | ||||||
|  |     ExportData4, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct AluInstruction | ||||||
|  | { | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t vectorDest : 6; | ||||||
|  |         uint32_t vectorDestRelative : 1; | ||||||
|  |         uint32_t absConstants : 1; | ||||||
|  |         uint32_t scalarDest : 6; | ||||||
|  |         uint32_t scalarDestRelative : 1; | ||||||
|  |         uint32_t exportData : 1; | ||||||
|  |         uint32_t vectorWriteMask : 4; | ||||||
|  |         uint32_t scalarWriteMask : 4; | ||||||
|  |         uint32_t vectorSaturate : 1; | ||||||
|  |         uint32_t scalarSaturate : 1; | ||||||
|  |         AluScalarOpcode scalarOpcode : 6; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t src3Swizzle : 8; | ||||||
|  |         uint32_t src2Swizzle : 8; | ||||||
|  |         uint32_t src1Swizzle : 8; | ||||||
|  |         uint32_t src3Negate : 1; | ||||||
|  |         uint32_t src2Negate : 1; | ||||||
|  |         uint32_t src1Negate : 1; | ||||||
|  |         uint32_t predicateCondition : 1; | ||||||
|  |         uint32_t isPredicated : 1; | ||||||
|  |         uint32_t constAddressRegisterRelative : 1; | ||||||
|  |         uint32_t const1Relative : 1; | ||||||
|  |         uint32_t const0Relative : 1; | ||||||
|  |     }; | ||||||
|  |     struct  | ||||||
|  |     { | ||||||
|  |         uint32_t src3Register : 8; | ||||||
|  |         uint32_t src2Register : 8; | ||||||
|  |         uint32_t src1Register : 8; | ||||||
|  |         AluVectorOpcode vectorOpcode : 5; | ||||||
|  |         uint32_t src3Select : 1; | ||||||
|  |         uint32_t src2Select : 1; | ||||||
|  |         uint32_t src1Select : 1; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
							
								
								
									
										80
									
								
								ShaderRecomp/shader_common.hlsli
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ShaderRecomp/shader_common.hlsli
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,80 @@ | ||||||
|  | #define FLT_MIN asfloat(0xff7fffff) | ||||||
|  | #define FLT_MAX asfloat(0x7f7fffff) | ||||||
|  | 
 | ||||||
|  | #ifdef __spirv__ | ||||||
|  | 
 | ||||||
|  | struct PushConstants | ||||||
|  | { | ||||||
|  |     uint64_t VertexShaderConstants; | ||||||
|  |     uint64_t PixelShaderConstants; | ||||||
|  |     uint64_t SharedConstants; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | [[vk::push_constant]] ConstantBuffer<PushConstants> g_PushConstants; | ||||||
|  | 
 | ||||||
|  | #define CONSTANT_BUFFER(NAME, REGISTER) struct NAME | ||||||
|  | #define PACK_OFFSET(REGISTER) | ||||||
|  | 
 | ||||||
|  | #define GET_CONSTANT(NAME) constants.NAME | ||||||
|  | #define GET_SHARED_CONSTANT(NAME) sharedConstants.NAME | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #define CONSTANT_BUFFER(NAME, REGISTER) cbuffer NAME : register(REGISTER, space4) | ||||||
|  | #define PACK_OFFSET(REGISTER) : packoffset(REGISTER) | ||||||
|  | 
 | ||||||
|  | #define GET_CONSTANT(NAME) NAME | ||||||
|  | #define GET_SHARED_CONSTANT(NAME) NAME | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define INPUT_LAYOUT_FLAG_HAS_R11G11B10_NORMAL (1 << 0) | ||||||
|  | 
 | ||||||
|  | #define SHARED_CONSTANTS \ | ||||||
|  |     [[vk::offset(128)]] uint g_AlphaTestMode PACK_OFFSET(c8.x); \ | ||||||
|  |     [[vk::offset(132)]] float g_AlphaThreshold PACK_OFFSET(c8.y); \ | ||||||
|  |     [[vk::offset(136)]] uint g_Booleans PACK_OFFSET(c8.z); \ | ||||||
|  |     [[vk::offset(140)]] uint g_SwappedTexcoords PACK_OFFSET(c8.w); \ | ||||||
|  |     [[vk::offset(144)]] uint g_InputLayoutFlags PACK_OFFSET(c9.x) | ||||||
|  | 
 | ||||||
|  | Texture2D<float4> g_Texture2DDescriptorHeap[] : register(t0, space0); | ||||||
|  | Texture3D<float4> g_Texture3DDescriptorHeap[] : register(t0, space1); | ||||||
|  | TextureCube<float4> g_TextureCubeDescriptorHeap[] : register(t0, space2); | ||||||
|  | SamplerState g_SamplerDescriptorHeap[] : register(s0, space3); | ||||||
|  | 
 | ||||||
|  | float4 tfetch2D(uint resourceDescriptorIndex, uint samplerDescriptorIndex, float2 texCoord) | ||||||
|  | { | ||||||
|  |     return g_Texture2DDescriptorHeap[resourceDescriptorIndex].Sample(g_SamplerDescriptorHeap[samplerDescriptorIndex], texCoord); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float4 tfetch3D(uint resourceDescriptorIndex, uint samplerDescriptorIndex, float3 texCoord) | ||||||
|  | { | ||||||
|  |     return g_Texture3DDescriptorHeap[resourceDescriptorIndex].Sample(g_SamplerDescriptorHeap[samplerDescriptorIndex], texCoord); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float4 tfetchCube(uint resourceDescriptorIndex, uint samplerDescriptorIndex, float4 texCoord) | ||||||
|  | { | ||||||
|  |     return g_TextureCubeDescriptorHeap[resourceDescriptorIndex].Sample(g_SamplerDescriptorHeap[samplerDescriptorIndex], texCoord.xyz); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float4 tfetchR11G11B10(uint inputLayoutFlags, uint4 value) | ||||||
|  | { | ||||||
|  |     if (inputLayoutFlags & INPUT_LAYOUT_FLAG_HAS_R11G11B10_NORMAL) | ||||||
|  |     { | ||||||
|  |         return float4( | ||||||
|  |             (value.x & 0x00000400 ? -1.0 : 0.0) + ((value.x & 0x3FF) / 1024.0), | ||||||
|  |             (value.x & 0x00200000 ? -1.0 : 0.0) + (((value.x >> 11) & 0x3FF) / 1024.0), | ||||||
|  |             (value.x & 0x80000000 ? -1.0 : 0.0) + (((value.x >> 22) & 0x1FF) / 512.0), | ||||||
|  |             0.0); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         return asfloat(value); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float4 tfetchTexcoord(uint swappedTexcoords, float4 value, uint semanticIndex) | ||||||
|  | { | ||||||
|  |     return (swappedTexcoords & (1 << semanticIndex)) != 0 ? value.yxwz : value; | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										1296
									
								
								ShaderRecomp/shader_recompiler.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1296
									
								
								ShaderRecomp/shader_recompiler.cpp
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										45
									
								
								ShaderRecomp/shader_recompiler.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ShaderRecomp/shader_recompiler.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "shader.h" | ||||||
|  | #include "shader_code.h" | ||||||
|  | 
 | ||||||
|  | struct ShaderRecompiler | ||||||
|  | { | ||||||
|  |     std::string out; | ||||||
|  |     uint32_t indentation = 0; | ||||||
|  |     bool isPixelShader = false; | ||||||
|  |     const uint8_t* constantTableData = nullptr; | ||||||
|  |     std::unordered_map<uint32_t, VertexElement> vertexElements; | ||||||
|  |     std::unordered_map<uint32_t, std::string> interpolators; | ||||||
|  |     std::unordered_map<uint32_t, const ConstantInfo*> float4Constants; | ||||||
|  |     std::unordered_map<uint32_t, const char*> boolConstants; | ||||||
|  |     std::unordered_map<uint32_t, const char*> samplers; | ||||||
|  | 
 | ||||||
|  |     void indent() | ||||||
|  |     { | ||||||
|  |         for (uint32_t i = 0; i < indentation; i++) | ||||||
|  |             out += '\t'; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     template<class... Args> | ||||||
|  |     void print(std::format_string<Args...> fmt, Args&&... args) | ||||||
|  |     { | ||||||
|  |         std::vformat_to(std::back_inserter(out), fmt.get(), std::make_format_args(args...)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     template<class... Args> | ||||||
|  |     void println(std::format_string<Args...> fmt, Args&&... args) | ||||||
|  |     { | ||||||
|  |         std::vformat_to(std::back_inserter(out), fmt.get(), std::make_format_args(args...)); | ||||||
|  |         out += '\n'; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void printDstSwizzle(uint32_t dstSwizzle, bool operand); | ||||||
|  |     void printDstSwizzle01(uint32_t dstRegister, uint32_t dstSwizzle); | ||||||
|  | 
 | ||||||
|  |     void recompile(const VertexFetchInstruction& instr, uint32_t address); | ||||||
|  |     void recompile(const TextureFetchInstruction& instr); | ||||||
|  |     void recompile(const AluInstruction& instr); | ||||||
|  | 
 | ||||||
|  |     void recompile(const uint8_t* shaderData); | ||||||
|  | }; | ||||||
							
								
								
									
										1
									
								
								vcpkg
									
										
									
									
									
										Submodule
									
								
							
							
						
						
									
										1
									
								
								vcpkg
									
										
									
									
									
										Submodule
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | Subproject commit e63bd09dc0b7204467705c1c7c71d0e2a3f8860b | ||||||
							
								
								
									
										6
									
								
								vcpkg.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vcpkg.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | { | ||||||
|  |   "builtin-baseline": "e63bd09dc0b7204467705c1c7c71d0e2a3f8860b", | ||||||
|  |   "dependencies": [ | ||||||
|  |     "directx-dxc" | ||||||
|  |   ] | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Skyth
						Skyth