Update ShaderRecomp, fix macros.

This commit is contained in:
Dario 2024-12-14 12:37:59 -03:00
parent 27c95d108d
commit 0106761a72
6 changed files with 25 additions and 20 deletions

View file

@ -36,7 +36,7 @@
#include "../../tools/ShaderRecomp/ShaderRecomp/shader_common.h" #include "../../tools/ShaderRecomp/ShaderRecomp/shader_common.h"
#if defined(SWA_D3D12) #ifdef SWA_D3D12
#include "shader/copy_vs.hlsl.dxil.h" #include "shader/copy_vs.hlsl.dxil.h"
#include "shader/csd_filter_ps.hlsl.dxil.h" #include "shader/csd_filter_ps.hlsl.dxil.h"
#include "shader/enhanced_motion_blur_ps.hlsl.dxil.h" #include "shader/enhanced_motion_blur_ps.hlsl.dxil.h"
@ -78,7 +78,7 @@ extern "C"
namespace plume namespace plume
{ {
#if defined(SWA_D3D12) #ifdef SWA_D3D12
extern std::unique_ptr<RenderInterface> CreateD3D12Interface(); extern std::unique_ptr<RenderInterface> CreateD3D12Interface();
#endif #endif
extern std::unique_ptr<RenderInterface> CreateVulkanInterface(); extern std::unique_ptr<RenderInterface> CreateVulkanInterface();
@ -180,7 +180,7 @@ static FORCEINLINE void SetDirtyValue(bool& dirtyState, T& dest, const T& src)
} }
} }
#if defined(SWA_D3D12) #ifdef SWA_D3D12
static bool g_vulkan = false; static bool g_vulkan = false;
#else #else
static constexpr bool g_vulkan = true; static constexpr bool g_vulkan = true;
@ -590,13 +590,18 @@ static std::unique_ptr<uint8_t[]> g_buttonBcDiff;
static void LoadEmbeddedResources() static void LoadEmbeddedResources()
{ {
const size_t decompressedSize = g_vulkan ? g_spirvCacheDecompressedSize : g_dxilCacheDecompressedSize; if (g_vulkan)
g_shaderCache = std::make_unique<uint8_t[]>(decompressedSize); {
g_shaderCache = std::make_unique<uint8_t[]>(g_spirvCacheDecompressedSize);
ZSTD_decompress(g_shaderCache.get(), ZSTD_decompress(g_shaderCache.get(), g_spirvCacheDecompressedSize, g_compressedSpirvCache, g_spirvCacheCompressedSize);
decompressedSize, }
g_vulkan ? g_compressedSpirvCache : g_compressedDxilCache, #ifdef SWA_D3D12
g_vulkan ? g_spirvCacheCompressedSize : g_dxilCacheCompressedSize); else
{
g_shaderCache = std::make_unique<uint8_t[]>(g_dxilCacheDecompressedSize);
ZSTD_decompress(g_shaderCache.get(), g_dxilCacheDecompressedSize, g_compressedDxilCache, g_dxilCacheCompressedSize);
}
#endif
g_buttonBcDiff = decompressZstd(g_button_bc_diff, g_button_bc_diff_uncompressed_size); g_buttonBcDiff = decompressZstd(g_button_bc_diff, g_button_bc_diff_uncompressed_size);
} }
@ -1073,7 +1078,7 @@ static GuestShader* g_csdShader;
static std::unique_ptr<GuestShader> g_enhancedMotionBlurShader; static std::unique_ptr<GuestShader> g_enhancedMotionBlurShader;
#if defined(SWA_D3D12) #ifdef SWA_D3D12
#define CREATE_SHADER(NAME) \ #define CREATE_SHADER(NAME) \
g_device->createShader( \ g_device->createShader( \
@ -1308,13 +1313,13 @@ void Video::CreateHostDevice()
Window::Init(); Window::Init();
#if defined(SWA_D3D12) #ifdef SWA_D3D12
g_vulkan = DetectWine() || Config::GraphicsAPI == EGraphicsAPI::Vulkan; g_vulkan = DetectWine() || Config::GraphicsAPI == EGraphicsAPI::Vulkan;
#endif #endif
LoadEmbeddedResources(); LoadEmbeddedResources();
#if defined(SWA_D3D12) #ifdef SWA_D3D12
g_interface = g_vulkan ? CreateVulkanInterface() : CreateD3D12Interface(); g_interface = g_vulkan ? CreateVulkanInterface() : CreateD3D12Interface();
#else #else
g_interface = CreateVulkanInterface(); g_interface = CreateVulkanInterface();
@ -2832,7 +2837,7 @@ static RenderShader* GetOrLinkShader(GuestShader* guestShader, uint32_t specCons
shader = guestShader->linkedShaders[specConstants].get(); shader = guestShader->linkedShaders[specConstants].get();
} }
#if defined(SWA_D3D12) #ifdef SWA_D3D12
if (shader == nullptr) if (shader == nullptr)
{ {
static Mutex g_compiledSpecConstantLibraryBlobMutex; static Mutex g_compiledSpecConstantLibraryBlobMutex;

View file

@ -274,7 +274,7 @@ struct GuestShader : GuestResource
std::unique_ptr<RenderShader> shader; std::unique_ptr<RenderShader> shader;
struct ShaderCacheEntry* shaderCacheEntry = nullptr; struct ShaderCacheEntry* shaderCacheEntry = nullptr;
ankerl::unordered_dense::map<uint32_t, std::unique_ptr<RenderShader>> linkedShaders; ankerl::unordered_dense::map<uint32_t, std::unique_ptr<RenderShader>> linkedShaders;
#if defined(SWA_D3D12) #ifdef SWA_D3D12
std::vector<ComPtr<IDxcBlob>> shaderBlobs; std::vector<ComPtr<IDxcBlob>> shaderBlobs;
ComPtr<IDxcBlobEncoding> libraryBlob; ComPtr<IDxcBlobEncoding> libraryBlob;
#endif #endif

View file

@ -6,7 +6,7 @@
#include <windows.h> #include <windows.h>
#endif #endif
#if defined(SWA_D3D12) #ifdef SWA_D3D12
#include <dxcapi.h> #include <dxcapi.h>
#endif #endif

View file

@ -28,7 +28,7 @@ public:
CONFIG_DEFINE_LOCALISED("Audio", bool, MusicAttenuation, false); CONFIG_DEFINE_LOCALISED("Audio", bool, MusicAttenuation, false);
CONFIG_DEFINE_LOCALISED("Audio", bool, BattleTheme, true); CONFIG_DEFINE_LOCALISED("Audio", bool, BattleTheme, true);
#if defined(SWA_D3D12) #ifdef SWA_D3D12
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::D3D12); CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::D3D12);
#else #else
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::Vulkan); CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::Vulkan);

View file

@ -95,7 +95,7 @@ CONFIG_DEFINE_ENUM_TEMPLATE(EVoiceLanguage)
enum class EGraphicsAPI : uint32_t enum class EGraphicsAPI : uint32_t
{ {
#if defined(SWA_D3D12) #ifdef SWA_D3D12
D3D12, D3D12,
#endif #endif
Vulkan Vulkan
@ -103,7 +103,7 @@ enum class EGraphicsAPI : uint32_t
CONFIG_DEFINE_ENUM_TEMPLATE(EGraphicsAPI) CONFIG_DEFINE_ENUM_TEMPLATE(EGraphicsAPI)
{ {
#if defined(SWA_D3D12) #ifdef SWA_D3D12
{ "D3D12", EGraphicsAPI::D3D12 }, { "D3D12", EGraphicsAPI::D3D12 },
#endif #endif
{ "Vulkan", EGraphicsAPI::Vulkan } { "Vulkan", EGraphicsAPI::Vulkan }

@ -1 +1 @@
Subproject commit 12b38144b9ff5d131e0d30af22bd38607d07d9fd Subproject commit 4b69741e196e0a8aed9d51bbe0cf24019afab08e