Integrate smol-v.

This commit is contained in:
Skyth 2024-11-28 17:48:33 +03:00
parent 013bffa27e
commit e0ea5db2af
4 changed files with 20 additions and 3 deletions

View file

@ -79,6 +79,8 @@ set(SWA_UI_CXX_SOURCES
"ui/window.cpp"
)
set(SMOLV_SOURCE_DIR "${SWA_THIRDPARTY_ROOT}/ShaderRecomp/thirdparty/smol-v/source")
set(SWA_CXX_SOURCES
"app.cpp"
"main.cpp"
@ -93,6 +95,8 @@ set(SWA_CXX_SOURCES
${SWA_HID_CXX_SOURCES}
${SWA_PATCHES_CXX_SOURCES}
${SWA_UI_CXX_SOURCES}
"${SMOLV_SOURCE_DIR}/smolv.cpp"
)
if (WIN32)
@ -166,6 +170,7 @@ target_include_directories(UnleashedRecomp PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/api
${SWA_THIRDPARTY_ROOT}/ddspp
${Stb_INCLUDE_DIR}
${SMOLV_SOURCE_DIR}
)
target_precompile_headers(UnleashedRecomp PUBLIC ${SWA_PRECOMPILED_HEADERS})

View file

@ -2499,9 +2499,20 @@ static RenderShader* GetOrLinkShader(GuestShader* guestShader, uint32_t specCons
assert(guestShader->shaderCacheEntry != nullptr);
if (g_vulkan)
guestShader->shader = g_device->createShader(g_shaderCache.get() + guestShader->shaderCacheEntry->spirvOffset, guestShader->shaderCacheEntry->spirvSize, "main", RenderShaderFormat::SPIRV);
{
auto compressedSpirvData = g_shaderCache.get() + guestShader->shaderCacheEntry->spirvOffset;
std::vector<uint8_t> decoded(smolv::GetDecodedBufferSize(compressedSpirvData, guestShader->shaderCacheEntry->spirvSize));
bool result = smolv::Decode(compressedSpirvData, guestShader->shaderCacheEntry->spirvSize, decoded.data(), decoded.size());
assert(result);
guestShader->shader = g_device->createShader(decoded.data(), decoded.size(), "main", RenderShaderFormat::SPIRV);
}
else
guestShader->shader = g_device->createShader(g_shaderCache.get() + guestShader->shaderCacheEntry->dxilOffset, guestShader->shaderCacheEntry->dxilSize, "main", RenderShaderFormat::DXIL);
{
guestShader->shader = g_device->createShader(g_shaderCache.get() + guestShader->shaderCacheEntry->dxilOffset,
guestShader->shaderCacheEntry->dxilSize, "main", RenderShaderFormat::DXIL);
}
}
return guestShader->shader.get();

View file

@ -30,6 +30,7 @@
#include <o1heap.h>
#include <cstddef>
#include <wrl/client.h>
#include <smolv.h>
using Microsoft::WRL::ComPtr;

@ -1 +1 @@
Subproject commit bd9872894411060e8b72c8eada341406a350d21d
Subproject commit 53cee767968f30656e23337b8c0919ad78c7fdfe