diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index fda71a20..baabe782 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -380,7 +380,9 @@ function(compile_pixel_shader FILE_PATH) endfunction() compile_vertex_shader(copy_vs) -compile_pixel_shader(csd_filter_ps) +compile_pixel_shader(csd_filter_ps) +compile_vertex_shader(csd_no_tex_vs) +compile_vertex_shader(csd_vs) compile_pixel_shader(enhanced_motion_blur_ps) compile_pixel_shader(gaussian_blur_3x3) compile_pixel_shader(gaussian_blur_5x5) diff --git a/UnleashedRecomp/gpu/shader/csd_no_tex_vs.hlsl b/UnleashedRecomp/gpu/shader/csd_no_tex_vs.hlsl new file mode 100644 index 00000000..9c83bb53 --- /dev/null +++ b/UnleashedRecomp/gpu/shader/csd_no_tex_vs.hlsl @@ -0,0 +1,67 @@ +#include "../../../tools/ShaderRecomp/ShaderRecomp/shader_common.h" + +#ifdef __spirv__ + +#define g_ViewportSize vk::RawBufferLoad(g_PushConstants.VertexShaderConstants + 2880, 0x10) +#define g_Z vk::RawBufferLoad(g_PushConstants.VertexShaderConstants + 3936, 0x10) + +#else + +cbuffer VertexShaderConstants : register(b0, space4) +{ + float4 g_ViewportSize : packoffset(c180); + float4 g_Z : packoffset(c246); +}; + +cbuffer SharedConstants : register(b2, space4) +{ + DEFINE_SHARED_CONSTANTS(); +}; + +#endif + +void main( + [[vk::location(0)]] in float4 iPosition0 : POSITION0, + [[vk::location(8)]] in float4 iColor0 : COLOR0, + out float4 oPos : SV_Position, + out float4 oTexCoord0 : TEXCOORD0, + out float4 oTexCoord1 : TEXCOORD1, + out float4 oTexCoord2 : TEXCOORD2, + out float4 oTexCoord3 : TEXCOORD3, + out float4 oTexCoord4 : TEXCOORD4, + out float4 oTexCoord5 : TEXCOORD5, + out float4 oTexCoord6 : TEXCOORD6, + out float4 oTexCoord7 : TEXCOORD7, + out float4 oTexCoord8 : TEXCOORD8, + out float4 oTexCoord9 : TEXCOORD9, + out float4 oTexCoord10 : TEXCOORD10, + out float4 oTexCoord11 : TEXCOORD11, + out float4 oTexCoord12 : TEXCOORD12, + out float4 oTexCoord13 : TEXCOORD13, + out float4 oTexCoord14 : TEXCOORD14, + out float4 oTexCoord15 : TEXCOORD15, + out float4 oColor0 : COLOR0, + out float4 oColor1 : COLOR1) +{ + oPos.xy = (iPosition0.xy - 0.5) * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0); + oPos.z = g_Z.x; + oPos.w = 1.0; + oTexCoord0 = iColor0.wxyz; + oTexCoord1 = 0.0; + oTexCoord2 = 0.0; + oTexCoord3 = 0.0; + oTexCoord4 = 0.0; + oTexCoord5 = 0.0; + oTexCoord6 = 0.0; + oTexCoord7 = 0.0; + oTexCoord8 = 0.0; + oTexCoord9 = 0.0; + oTexCoord10 = 0.0; + oTexCoord11 = 0.0; + oTexCoord12 = 0.0; + oTexCoord13 = 0.0; + oTexCoord14 = 0.0; + oTexCoord15 = 0.0; + oColor0 = 0.0; + oColor1 = 0.0; +} diff --git a/UnleashedRecomp/gpu/shader/csd_vs.hlsl b/UnleashedRecomp/gpu/shader/csd_vs.hlsl new file mode 100644 index 00000000..c9862fb1 --- /dev/null +++ b/UnleashedRecomp/gpu/shader/csd_vs.hlsl @@ -0,0 +1,69 @@ +#include "../../../tools/ShaderRecomp/ShaderRecomp/shader_common.h" + +#ifdef __spirv__ + +#define g_ViewportSize vk::RawBufferLoad(g_PushConstants.VertexShaderConstants + 2880, 0x10) +#define g_Z vk::RawBufferLoad(g_PushConstants.VertexShaderConstants + 3936, 0x10) + +#else + +cbuffer VertexShaderConstants : register(b0, space4) +{ + float4 g_ViewportSize : packoffset(c180); + float4 g_Z : packoffset(c246); +}; + +cbuffer SharedConstants : register(b2, space4) +{ + DEFINE_SHARED_CONSTANTS(); +}; + +#endif + +void main( + [[vk::location(0)]] in float4 iPosition0 : POSITION0, + [[vk::location(8)]] in float4 iColor0 : COLOR0, + [[vk::location(4)]] in float4 iTexCoord0 : TEXCOORD0, + out float4 oPos : SV_Position, + out float4 oTexCoord0 : TEXCOORD0, + out float4 oTexCoord1 : TEXCOORD1, + out float4 oTexCoord2 : TEXCOORD2, + out float4 oTexCoord3 : TEXCOORD3, + out float4 oTexCoord4 : TEXCOORD4, + out float4 oTexCoord5 : TEXCOORD5, + out float4 oTexCoord6 : TEXCOORD6, + out float4 oTexCoord7 : TEXCOORD7, + out float4 oTexCoord8 : TEXCOORD8, + out float4 oTexCoord9 : TEXCOORD9, + out float4 oTexCoord10 : TEXCOORD10, + out float4 oTexCoord11 : TEXCOORD11, + out float4 oTexCoord12 : TEXCOORD12, + out float4 oTexCoord13 : TEXCOORD13, + out float4 oTexCoord14 : TEXCOORD14, + out float4 oTexCoord15 : TEXCOORD15, + out float4 oColor0 : COLOR0, + out float4 oColor1 : COLOR1) +{ + oPos.xy = (iPosition0.xy - 0.5) * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0); + oPos.z = g_Z.x; + oPos.w = 1.0; + oTexCoord0 = iColor0.wxyz; + oTexCoord1.xy = iTexCoord0.xy; + oTexCoord1.zw = 0.0; + oTexCoord2 = 0.0; + oTexCoord3 = 0.0; + oTexCoord4 = 0.0; + oTexCoord5 = 0.0; + oTexCoord6 = 0.0; + oTexCoord7 = 0.0; + oTexCoord8 = 0.0; + oTexCoord9 = 0.0; + oTexCoord10 = 0.0; + oTexCoord11 = 0.0; + oTexCoord12 = 0.0; + oTexCoord13 = 0.0; + oTexCoord14 = 0.0; + oTexCoord15 = 0.0; + oColor0 = 0.0; + oColor1 = 0.0; +} diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp index 45dad00d..f089f107 100644 --- a/UnleashedRecomp/gpu/video.cpp +++ b/UnleashedRecomp/gpu/video.cpp @@ -38,6 +38,8 @@ #ifdef SWA_D3D12 #include "shader/copy_vs.hlsl.dxil.h" #include "shader/csd_filter_ps.hlsl.dxil.h" +#include "shader/csd_no_tex_vs.hlsl.dxil.h" +#include "shader/csd_vs.hlsl.dxil.h" #include "shader/enhanced_motion_blur_ps.hlsl.dxil.h" #include "shader/gamma_correction_ps.hlsl.dxil.h" #include "shader/gaussian_blur_3x3.hlsl.dxil.h" @@ -55,6 +57,8 @@ #include "shader/copy_vs.hlsl.spirv.h" #include "shader/csd_filter_ps.hlsl.spirv.h" +#include "shader/csd_no_tex_vs.hlsl.spirv.h" +#include "shader/csd_vs.hlsl.spirv.h" #include "shader/enhanced_motion_blur_ps.hlsl.spirv.h" #include "shader/gamma_correction_ps.hlsl.spirv.h" #include "shader/gaussian_blur_3x3.hlsl.spirv.h" @@ -4160,7 +4164,13 @@ static GuestShader* CreateShader(const be* function, ResourceType reso if (findResult->guestShader == nullptr) { shader = g_userHeap.AllocPhysical(resourceType); - shader->shaderCacheEntry = findResult; + + if (hash == 0xB1086A4947A797DE) + shader->shader = CREATE_SHADER(csd_no_tex_vs); + else if (hash == 0xB4CAFC034A37C8A8) + shader->shader = CREATE_SHADER(csd_vs); + else + shader->shaderCacheEntry = findResult; findResult->guestShader = shader; } diff --git a/UnleashedRecomp/patches/csd_patches.cpp b/UnleashedRecomp/patches/csd_patches.cpp index bceff9ba..f0503bb9 100644 --- a/UnleashedRecomp/patches/csd_patches.cpp +++ b/UnleashedRecomp/patches/csd_patches.cpp @@ -217,6 +217,10 @@ static const ankerl::unordered_dense::map g_flags = // ui_lcursor_enemy { HashStr("ui_lcursor/cursor"), UNSTRETCH_CENTER }, + // ui_loading + { HashStr("ui_loading/bg_1"), STRETCH }, + { HashStr("ui_loading/bg_2"), STRETCH }, + // ui_mediaroom { HashStr("ui_mediaroom/header/bg/img_1"), EXTEND_LEFT }, { HashStr("ui_mediaroom/header/bg/img_10"), EXTEND_RIGHT }, @@ -399,6 +403,8 @@ static const ankerl::unordered_dense::map g_flags = { HashStr("ui_townscreen/cam"), ALIGN_TOP_RIGHT }, // ui_worldmap + { HashStr("ui_worldmap/contents/active_parts/cts_parts_flag"), UNSTRETCH_CENTER }, + { HashStr("ui_worldmap/contents/active_parts/cts_parts_sun_moon"), UNSTRETCH_CENTER }, { HashStr("ui_worldmap/contents/guide/cts_guide_1_hiscore"), ALIGN_RIGHT }, { HashStr("ui_worldmap/contents/guide/cts_guide_2_besttime"), ALIGN_RIGHT }, { HashStr("ui_worldmap/contents/guide/cts_guide_3_rank"), ALIGN_RIGHT },