diff --git a/pcsx2/GS/Renderers/Common/GSDevice.cpp b/pcsx2/GS/Renderers/Common/GSDevice.cpp index 1b9e3ef7bd..878c346532 100644 --- a/pcsx2/GS/Renderers/Common/GSDevice.cpp +++ b/pcsx2/GS/Renderers/Common/GSDevice.cpp @@ -899,14 +899,13 @@ void GSDevice::ShadeBoost() if (ResizeRenderTarget(&m_target_tmp, m_current->GetWidth(), m_current->GetHeight(), false, false)) { // predivide to avoid the divide (multiply) in the shader - const float params[4] = { + const GSVector4 params( static_cast(GSConfig.ShadeBoost_Brightness) * (1.0f / 50.0f), static_cast(GSConfig.ShadeBoost_Contrast) * (1.0f / 50.0f), static_cast(GSConfig.ShadeBoost_Saturation) * (1.0f / 50.0f), - static_cast(GSConfig.ShadeBoost_Gamma) * (1.0f / 50.0f), - }; + static_cast(GSConfig.ShadeBoost_Gamma) * (1.0f / 50.0f)); - DoShadeBoost(m_current, m_target_tmp, params); + DoShadeBoost(m_current, m_target_tmp, params.v); m_current = m_target_tmp; } diff --git a/pcsx2/GS/Renderers/DX11/GSDevice11.cpp b/pcsx2/GS/Renderers/DX11/GSDevice11.cpp index ad8c61b3ef..9f511306bd 100644 --- a/pcsx2/GS/Renderers/DX11/GSDevice11.cpp +++ b/pcsx2/GS/Renderers/DX11/GSDevice11.cpp @@ -1397,7 +1397,7 @@ void GSDevice11::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* const float right = dRect.z * 2 / ds.x - 1.0f; const float bottom = 1.0f - dRect.w * 2 / ds.y; - GSVertexPT1 vertices[] = + const GSVertexPT1 vertices[] = { {GSVector4(left, top, 0.5f, 1.0f), GSVector2(sRect.x, sRect.y)}, {GSVector4(right, top, 0.5f, 1.0f), GSVector2(sRect.z, sRect.y)}, @@ -1427,13 +1427,14 @@ void GSDevice11::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* void GSDevice11::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) { // match merge cb - struct Uniforms + struct alignas(16) Uniforms { float scale; float pad1[3]; u32 offsetX, offsetY, dOffset; + u32 pad2; }; - const Uniforms cb = {sScale, {}, offsetX, offsetY, dOffset}; + const Uniforms cb = {sScale, {}, offsetX, offsetY, dOffset, 0}; m_ctx->UpdateSubresource(m_merge.cb.get(), 0, nullptr, &cb, 0, 0); const GSVector4 dRect(0, 0, dSize, 1); @@ -1444,14 +1445,15 @@ void GSDevice11::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u void GSDevice11::ConvertToIndexedTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) { // match merge cb - struct Uniforms + struct alignas(16) Uniforms { float scale; float pad1[3]; u32 SBW, DBW, SPSM; + u32 pad2; }; - const Uniforms cb = {sScale, {}, SBW, DBW, SPSM}; + const Uniforms cb = {sScale, {}, SBW, DBW, SPSM, 0}; m_ctx->UpdateSubresource(m_merge.cb.get(), 0, nullptr, &cb, 0, 0); const GSVector4 dRect(0, 0, dTex->GetWidth(), dTex->GetHeight()); @@ -1461,7 +1463,7 @@ void GSDevice11::ConvertToIndexedTexture(GSTexture* sTex, float sScale, u32 offs void GSDevice11::FilteredDownsampleTexture(GSTexture* sTex, GSTexture* dTex, u32 downsample_factor, const GSVector2i& clamp_min, const GSVector4& dRect) { - struct Uniforms + struct alignas(16) Uniforms { float weight; float step_multiplier; @@ -2063,13 +2065,13 @@ void GSDevice11::RenderImGui() UpdateImGuiTextures(); - const float L = 0.0f; + constexpr float L = 0.0f; const float R = static_cast(m_window_info.surface_width); - const float T = 0.0f; + constexpr float T = 0.0f; const float B = static_cast(m_window_info.surface_height); // clang-format off - const float ortho_projection[4][4] = + const GSVector4 ortho_projection[4] = { { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, diff --git a/pcsx2/GS/Renderers/DX12/GSDevice12.cpp b/pcsx2/GS/Renderers/DX12/GSDevice12.cpp index 40ec160bb5..c601ef0a27 100644 --- a/pcsx2/GS/Renderers/DX12/GSDevice12.cpp +++ b/pcsx2/GS/Renderers/DX12/GSDevice12.cpp @@ -1635,14 +1635,14 @@ void GSDevice12::UpdateCLUTTexture( GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) { // match merge cb - struct Uniforms + struct alignas(16) Uniforms { float scale; float pad1[3]; u32 offsetX, offsetY, dOffset; u32 pad2; }; - const Uniforms cb = {sScale, {}, offsetX, offsetY, dOffset}; + const Uniforms cb = {sScale, {}, offsetX, offsetY, dOffset, 0}; SetUtilityRootSignature(); SetUtilityPushConstants(&cb, sizeof(cb)); @@ -1656,14 +1656,15 @@ void GSDevice12::ConvertToIndexedTexture( GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) { // match merge cb - struct Uniforms + struct alignas(16) Uniforms { float scale; float pad1[3]; u32 SBW, DBW, SPSM; + u32 pad2; }; - const Uniforms cb = {sScale, {}, SBW, DBW, SPSM}; + const Uniforms cb = {sScale, {}, SBW, DBW, SPSM, 0}; SetUtilityRootSignature(); SetUtilityPushConstants(&cb, sizeof(cb)); @@ -1675,7 +1676,7 @@ void GSDevice12::ConvertToIndexedTexture( void GSDevice12::FilteredDownsampleTexture(GSTexture* sTex, GSTexture* dTex, u32 downsample_factor, const GSVector2i& clamp_min, const GSVector4& dRect) { - struct Uniforms + struct alignas(16) Uniforms { float weight; float step_multiplier; @@ -2184,7 +2185,7 @@ void GSDevice12::RenderImGui() const float B = static_cast(m_window_info.surface_height); // clang-format off - const float ortho_projection[4][4] = + const GSVector4 ortho_projection[4] = { { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, diff --git a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp index f1f8a415dc..39fb67072b 100644 --- a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp +++ b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp @@ -3131,7 +3131,7 @@ void GSDeviceVK::UpdateCLUTTexture( GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) { // Super annoying, but apparently NVIDIA doesn't like floats/ints packed together in the same vec4? - struct Uniforms + struct alignas(16) Uniforms { u32 offsetX, offsetY, dOffset, pad1; float scale; @@ -3150,7 +3150,7 @@ void GSDeviceVK::UpdateCLUTTexture( void GSDeviceVK::ConvertToIndexedTexture( GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) { - struct Uniforms + struct alignas(16) Uniforms { u32 SBW; u32 DBW; @@ -3171,7 +3171,7 @@ void GSDeviceVK::ConvertToIndexedTexture( void GSDeviceVK::FilteredDownsampleTexture(GSTexture* sTex, GSTexture* dTex, u32 downsample_factor, const GSVector2i& clamp_min, const GSVector4& dRect) { - struct Uniforms + struct alignas(16) Uniforms { GSVector2i clamp_min; int downsample_factor; @@ -4434,16 +4434,13 @@ void GSDeviceVK::RenderImGui() UpdateImGuiTextures(); - const float uniforms[2][2] = {{ - 2.0f / static_cast(m_window_info.surface_width), - 2.0f / static_cast(m_window_info.surface_height), - }, - { - -1.0f, - -1.0f, - }}; + const GSVector4 uniforms( + 2.0f / static_cast(m_window_info.surface_width), + 2.0f / static_cast(m_window_info.surface_height), + -1.0f, + -1.0f); - SetUtilityPushConstants(uniforms, sizeof(uniforms)); + SetUtilityPushConstants(&uniforms, sizeof(uniforms)); SetPipeline(m_imgui_pipeline); if (m_utility_sampler != m_linear_sampler)