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