mirror of
				https://github.com/hedge-dev/XenosRecomp.git
				synced 2025-10-30 07:12:17 +00:00 
			
		
		
		
	Make DXIL Optional. (#3)
* Make DXIL Optional. * Change to ifdef. * Macro name changes.
This commit is contained in:
		
							parent
							
								
									12b38144b9
								
							
						
					
					
						commit
						4b69741e19
					
				
					 2 changed files with 28 additions and 11 deletions
				
			
		|  | @ -1,5 +1,9 @@ | |||
| project(ShaderRecomp) | ||||
| 
 | ||||
| if (WIN32) | ||||
|     option(SHADER_RECOMP_DXIL "Generate DXIL shader cache" ON) | ||||
| endif() | ||||
| 
 | ||||
| set(SMOLV_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/smol-v/source") | ||||
| 
 | ||||
| add_executable(ShaderRecomp  | ||||
|  | @ -35,4 +39,8 @@ endif() | |||
| 
 | ||||
| target_compile_definitions(ShaderRecomp PRIVATE _CRT_SECURE_NO_WARNINGS) | ||||
| 
 | ||||
| if (SHADER_RECOMP_DXIL) | ||||
|     target_compile_definitions(ShaderRecomp PRIVATE SHADER_RECOMP_DXIL) | ||||
| endif() | ||||
| 
 | ||||
| file(COPY ${PACKAGE_PREFIX_DIR}/bin/dxil.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) | ||||
|  |  | |||
|  | @ -113,11 +113,15 @@ int main(int argc, char** argv) | |||
|                 shader.specConstantsMask = recompiler.specConstantsMask; | ||||
| 
 | ||||
|                 thread_local DxcCompiler dxcCompiler; | ||||
|                 shader.dxil = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, recompiler.specConstantsMask != 0, false); | ||||
|                 IDxcBlob* spirv = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, false, true); | ||||
| 
 | ||||
|                 assert(shader.dxil != nullptr && spirv != nullptr); | ||||
|                 assert(*(reinterpret_cast<uint32_t*>(shader.dxil->GetBufferPointer()) + 1) != 0 && "DXIL was not signed properly!"); | ||||
| #ifdef SHADER_RECOMP_DXIL | ||||
|                 shader.dxil = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, recompiler.specConstantsMask != 0, false); | ||||
|                 assert(shader.dxil != nullptr); | ||||
|                 assert(*(reinterpret_cast<uint32_t *>(shader.dxil->GetBufferPointer()) + 1) != 0 && "DXIL was not signed properly!"); | ||||
| #endif | ||||
| 
 | ||||
|                 IDxcBlob* spirv = dxcCompiler.compile(recompiler.out, recompiler.isPixelShader, false, true); | ||||
|                 assert(spirv != nullptr); | ||||
| 
 | ||||
|                 bool result = smolv::Encode(spirv->GetBufferPointer(), spirv->GetBufferSize(), shader.spirv, smolv::kEncodeFlagStripDebugInfo); | ||||
|                 assert(result); | ||||
|  | @ -141,10 +145,13 @@ int main(int argc, char** argv) | |||
|         for (auto& [hash, shader] : shaders) | ||||
|         { | ||||
|             f.println("\t{{ 0x{:X}, {}, {}, {}, {}, {} }},", | ||||
|                 hash, dxil.size(), shader.dxil->GetBufferSize(), spirv.size(), shader.spirv.size(), shader.specConstantsMask); | ||||
|                 hash, dxil.size(), (shader.dxil != nullptr) ? shader.dxil->GetBufferSize() : 0, spirv.size(), shader.spirv.size(), shader.specConstantsMask); | ||||
| 
 | ||||
|             dxil.insert(dxil.end(), reinterpret_cast<uint8_t*>(shader.dxil->GetBufferPointer()), | ||||
|                 reinterpret_cast<uint8_t*>(shader.dxil->GetBufferPointer()) + shader.dxil->GetBufferSize());     | ||||
|             if (shader.dxil != nullptr) | ||||
|             { | ||||
|                 dxil.insert(dxil.end(), reinterpret_cast<uint8_t *>(shader.dxil->GetBufferPointer()), | ||||
|                     reinterpret_cast<uint8_t *>(shader.dxil->GetBufferPointer()) + shader.dxil->GetBufferSize()); | ||||
|             } | ||||
|              | ||||
|             spirv.insert(spirv.end(), shader.spirv.begin(), shader.spirv.end()); | ||||
|         } | ||||
|  | @ -154,7 +161,8 @@ int main(int argc, char** argv) | |||
|         fmt::println("Compressing DXIL cache..."); | ||||
| 
 | ||||
|         int level = ZSTD_maxCLevel(); | ||||
|         //level = ZSTD_defaultCLevel();
 | ||||
| 
 | ||||
| #ifdef SHADER_RECOMP_DXIL | ||||
|         std::vector<uint8_t> dxilCompressed(ZSTD_compressBound(dxil.size())); | ||||
|         dxilCompressed.resize(ZSTD_compress(dxilCompressed.data(), dxilCompressed.size(), dxil.data(), dxil.size(), level)); | ||||
| 
 | ||||
|  | @ -164,6 +172,9 @@ int main(int argc, char** argv) | |||
|             f.print("{},", data); | ||||
| 
 | ||||
|         f.println("}};"); | ||||
|         f.println("const size_t g_dxilCacheCompressedSize = {};", dxilCompressed.size()); | ||||
|         f.println("const size_t g_dxilCacheDecompressedSize = {};", dxil.size()); | ||||
| #endif | ||||
| 
 | ||||
|         fmt::println("Compressing SPIRV cache..."); | ||||
| 
 | ||||
|  | @ -177,11 +188,9 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|         f.println("}};"); | ||||
| 
 | ||||
|         f.println("const size_t g_shaderCacheEntryCount = {};", shaders.size()); | ||||
|         f.println("const size_t g_dxilCacheCompressedSize = {};", dxilCompressed.size()); | ||||
|         f.println("const size_t g_dxilCacheDecompressedSize = {};", dxil.size()); | ||||
|         f.println("const size_t g_spirvCacheCompressedSize = {};", spirvCompressed.size()); | ||||
|         f.println("const size_t g_spirvCacheDecompressedSize = {};", spirv.size()); | ||||
|         f.println("const size_t g_shaderCacheEntryCount = {};", shaders.size()); | ||||
| 
 | ||||
|         writeAllBytes(output, f.out.data(), f.out.size()); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Darío
						Darío