From 206ff89587da773bd6642f8db1ead7551353c019 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 23 May 2024 13:58:46 +0200 Subject: [PATCH] Add constant buffers alignment for data structures (16-byte boundaries) --- Source/Engine/Debug/DebugDraw.cpp | 2 +- Source/Engine/Graphics/Config.h | 3 +++ Source/Engine/Graphics/RenderTools.h | 3 ++- Source/Engine/Level/Actors/ExponentialHeightFog.cpp | 2 +- Source/Engine/Level/Actors/Sky.cpp | 2 +- Source/Engine/Particles/Graph/GPU/GPUParticles.cpp | 2 +- Source/Engine/Particles/Particles.cpp | 2 +- Source/Engine/Render2D/Render2D.cpp | 4 ++-- Source/Engine/Renderer/AmbientOcclusionPass.h | 2 +- Source/Engine/Renderer/AntiAliasing/FXAA.cpp | 2 +- Source/Engine/Renderer/AntiAliasing/SMAA.h | 2 +- Source/Engine/Renderer/AntiAliasing/TAA.cpp | 2 +- Source/Engine/Renderer/AtmospherePreCompute.cpp | 2 +- Source/Engine/Renderer/ColorGradingPass.cpp | 2 +- Source/Engine/Renderer/Config.h | 11 ++++++----- Source/Engine/Renderer/DepthOfFieldPass.cpp | 2 +- Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp | 2 +- Source/Engine/Renderer/Editor/VertexColors.cpp | 2 +- Source/Engine/Renderer/EyeAdaptationPass.cpp | 2 +- Source/Engine/Renderer/GBufferPass.cpp | 2 +- .../Renderer/GI/DynamicDiffuseGlobalIllumination.cpp | 4 ++-- .../Renderer/GI/DynamicDiffuseGlobalIllumination.h | 2 +- Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp | 2 +- Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.h | 2 +- .../Engine/Renderer/GlobalSignDistanceFieldPass.cpp | 6 +++--- Source/Engine/Renderer/GlobalSignDistanceFieldPass.h | 2 +- Source/Engine/Renderer/HistogramPass.cpp | 2 +- Source/Engine/Renderer/LightPass.cpp | 4 ++-- Source/Engine/Renderer/MotionBlurPass.cpp | 2 +- Source/Engine/Renderer/PostProcessingPass.h | 4 ++-- Source/Engine/Renderer/ProbesRenderer.cpp | 2 +- Source/Engine/Renderer/ReflectionsPass.cpp | 2 +- Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp | 2 +- Source/Engine/Renderer/ShadowsPass.cpp | 2 +- Source/Engine/Renderer/Utils/BitonicSort.cpp | 2 +- Source/Engine/Renderer/Utils/MultiScaler.cpp | 2 +- Source/Engine/Renderer/VolumetricFogPass.h | 6 +++--- Source/Engine/ShadowsOfMordor/Builder.Jobs.cpp | 2 +- 38 files changed, 54 insertions(+), 49 deletions(-) diff --git a/Source/Engine/Debug/DebugDraw.cpp b/Source/Engine/Debug/DebugDraw.cpp index 942069130..a3a9c21a8 100644 --- a/Source/Engine/Debug/DebugDraw.cpp +++ b/Source/Engine/Debug/DebugDraw.cpp @@ -125,7 +125,7 @@ PACK_STRUCT(struct Vertex { Color32 Color; }); -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Matrix ViewProjection; Float2 Padding; float ClipPosZBias; diff --git a/Source/Engine/Graphics/Config.h b/Source/Engine/Graphics/Config.h index 6bb5496b9..c37594bdb 100644 --- a/Source/Engine/Graphics/Config.h +++ b/Source/Engine/Graphics/Config.h @@ -28,6 +28,9 @@ // Maximum amount of thread groups per dimension for compute dispatch #define GPU_MAX_CS_DISPATCH_THREAD_GROUPS 65535 +// Alignment of the shader data structures (16-byte boundaries) to improve memory copies efficiency. +#define GPU_SHADER_DATA_ALIGNMENT 16 + // Enable/disable assertion for graphics layers #define GPU_ENABLE_ASSERTION 1 diff --git a/Source/Engine/Graphics/RenderTools.h b/Source/Engine/Graphics/RenderTools.h index 00d3398cd..8a19718f1 100644 --- a/Source/Engine/Graphics/RenderTools.h +++ b/Source/Engine/Graphics/RenderTools.h @@ -2,6 +2,7 @@ #pragma once +#include "Config.h" #include "PixelFormat.h" #include "RenderView.h" #include "Engine/Scripting/ScriptingType.h" @@ -11,7 +12,7 @@ class SkinnedModel; struct RenderContext; struct FloatR10G10B10A2; -PACK_STRUCT(struct QuadShaderData +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) QuadShaderData { Float4 Color; }); diff --git a/Source/Engine/Level/Actors/ExponentialHeightFog.cpp b/Source/Engine/Level/Actors/ExponentialHeightFog.cpp index d2ebb69b2..10be7bdf0 100644 --- a/Source/Engine/Level/Actors/ExponentialHeightFog.cpp +++ b/Source/Engine/Level/Actors/ExponentialHeightFog.cpp @@ -179,7 +179,7 @@ void ExponentialHeightFog::GetExponentialHeightFogData(const RenderView& view, S result.VolumetricFogMaxDistance = VolumetricFogDistance; } -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { ShaderGBufferData GBuffer; ShaderExponentialHeightFogData ExponentialHeightFog; }); diff --git a/Source/Engine/Level/Actors/Sky.cpp b/Source/Engine/Level/Actors/Sky.cpp index 103d37316..f0a7c354d 100644 --- a/Source/Engine/Level/Actors/Sky.cpp +++ b/Source/Engine/Level/Actors/Sky.cpp @@ -17,7 +17,7 @@ #include "Engine/Serialization/Serialization.h" #include "Engine/Level/Scene/SceneRendering.h" -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Matrix WVP; Float3 ViewOffset; float Padding; diff --git a/Source/Engine/Particles/Graph/GPU/GPUParticles.cpp b/Source/Engine/Particles/Graph/GPU/GPUParticles.cpp index fae5e807a..e4de0ad89 100644 --- a/Source/Engine/Particles/Graph/GPU/GPUParticles.cpp +++ b/Source/Engine/Particles/Graph/GPU/GPUParticles.cpp @@ -13,7 +13,7 @@ #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" -PACK_STRUCT(struct GPUParticlesData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) GPUParticlesData { Matrix ViewProjectionMatrix; Matrix InvViewProjectionMatrix; Matrix InvViewMatrix; diff --git a/Source/Engine/Particles/Particles.cpp b/Source/Engine/Particles/Particles.cpp index 66fc91cce..0e468b66f 100644 --- a/Source/Engine/Particles/Particles.cpp +++ b/Source/Engine/Particles/Particles.cpp @@ -569,7 +569,7 @@ void DrawEmitterCPU(RenderContext& renderContext, ParticleBuffer* buffer, DrawCa #if COMPILE_WITH_GPU_PARTICLES -PACK_STRUCT(struct GPUParticlesSortingData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) GPUParticlesSortingData { Float3 ViewPosition; uint32 ParticleCounterOffset; uint32 ParticleStride; diff --git a/Source/Engine/Render2D/Render2D.cpp b/Source/Engine/Render2D/Render2D.cpp index c65a9f401..41a136314 100644 --- a/Source/Engine/Render2D/Render2D.cpp +++ b/Source/Engine/Render2D/Render2D.cpp @@ -52,11 +52,11 @@ // True if enable downscaling when rendering blur const bool DownsampleForBlur = false; -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Matrix ViewProjection; }); -PACK_STRUCT(struct BlurData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) BlurData { Float2 InvBufferSize; uint32 SampleCount; float Dummy0; diff --git a/Source/Engine/Renderer/AmbientOcclusionPass.h b/Source/Engine/Renderer/AmbientOcclusionPass.h index 9dacae18b..d89ad38b4 100644 --- a/Source/Engine/Renderer/AmbientOcclusionPass.h +++ b/Source/Engine/Renderer/AmbientOcclusionPass.h @@ -19,7 +19,7 @@ class AmbientOcclusionPass : public RendererPass private: // Packed shader constant buffer structure (this MUST match shader code) - PACK_STRUCT(struct ASSAOConstants { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ASSAOConstants { ShaderGBufferData GBuffer; Float2 ViewportPixelSize; diff --git a/Source/Engine/Renderer/AntiAliasing/FXAA.cpp b/Source/Engine/Renderer/AntiAliasing/FXAA.cpp index 1f9b215e5..032230d64 100644 --- a/Source/Engine/Renderer/AntiAliasing/FXAA.cpp +++ b/Source/Engine/Renderer/AntiAliasing/FXAA.cpp @@ -7,7 +7,7 @@ #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/RenderTask.h" -PACK_STRUCT(struct Data +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float4 ScreenSize; }); diff --git a/Source/Engine/Renderer/AntiAliasing/SMAA.h b/Source/Engine/Renderer/AntiAliasing/SMAA.h index 3b18727cd..7a6690f5d 100644 --- a/Source/Engine/Renderer/AntiAliasing/SMAA.h +++ b/Source/Engine/Renderer/AntiAliasing/SMAA.h @@ -15,7 +15,7 @@ class SMAA : public RendererPass { private: - PACK_STRUCT(struct Data + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float4 RtSize; }); diff --git a/Source/Engine/Renderer/AntiAliasing/TAA.cpp b/Source/Engine/Renderer/AntiAliasing/TAA.cpp index 4c6c899eb..168e15ed9 100644 --- a/Source/Engine/Renderer/AntiAliasing/TAA.cpp +++ b/Source/Engine/Renderer/AntiAliasing/TAA.cpp @@ -11,7 +11,7 @@ #include "Engine/Renderer/GBufferPass.h" #include "Engine/Engine/Engine.h" -PACK_STRUCT(struct Data +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float2 ScreenSizeInv; Float2 JitterInv; diff --git a/Source/Engine/Renderer/AtmospherePreCompute.cpp b/Source/Engine/Renderer/AtmospherePreCompute.cpp index c761268b8..6d17e7613 100644 --- a/Source/Engine/Renderer/AtmospherePreCompute.cpp +++ b/Source/Engine/Renderer/AtmospherePreCompute.cpp @@ -61,7 +61,7 @@ protected: bool Run() override; }; -PACK_STRUCT(struct Data +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { float First; float AtmosphereR; diff --git a/Source/Engine/Renderer/ColorGradingPass.cpp b/Source/Engine/Renderer/ColorGradingPass.cpp index 7ac0da588..9edc83969 100644 --- a/Source/Engine/Renderer/ColorGradingPass.cpp +++ b/Source/Engine/Renderer/ColorGradingPass.cpp @@ -8,7 +8,7 @@ #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderTask.h" -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float4 ColorSaturationShadows; Float4 ColorContrastShadows; Float4 ColorGammaShadows; diff --git a/Source/Engine/Renderer/Config.h b/Source/Engine/Renderer/Config.h index c62941b67..a861eb127 100644 --- a/Source/Engine/Renderer/Config.h +++ b/Source/Engine/Renderer/Config.h @@ -6,11 +6,12 @@ #include "Engine/Core/Math/Vector2.h" #include "Engine/Core/Math/Vector3.h" #include "Engine/Core/Math/Vector4.h" +#include "Engine/Graphics/Config.h" /// /// Structure that contains information about GBuffer for shaders. /// -PACK_STRUCT(struct ShaderGBufferData +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderGBufferData { Float4 ViewInfo; Float4 ScreenSize; @@ -23,7 +24,7 @@ PACK_STRUCT(struct ShaderGBufferData /// /// Structure that contains information about exponential height fog for shaders. /// -PACK_STRUCT(struct ShaderExponentialHeightFogData +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderExponentialHeightFogData { Float3 FogInscatteringColor; float FogMinOpacity; @@ -48,7 +49,7 @@ PACK_STRUCT(struct ShaderExponentialHeightFogData /// /// Structure that contains information about atmosphere fog for shaders. /// -PACK_STRUCT(struct ShaderAtmosphericFogData +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderAtmosphericFogData { float AtmosphericFogDensityScale; float AtmosphericFogSunDiscScale; @@ -70,7 +71,7 @@ PACK_STRUCT(struct ShaderAtmosphericFogData /// /// Structure that contains information about light for shaders. /// -PACK_STRUCT(struct ShaderLightData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderLightData { Float2 SpotAngles; float SourceRadius; float SourceLength; @@ -89,7 +90,7 @@ PACK_STRUCT(struct ShaderLightData { /// /// Packed env probe data /// -PACK_STRUCT(struct ShaderEnvProbeData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderEnvProbeData { Float4 Data0; // x - Position.x, y - Position.y, z - Position.z, w - unused Float4 Data1; // x - Radius , y - 1 / Radius, z - Brightness, w - unused }); diff --git a/Source/Engine/Renderer/DepthOfFieldPass.cpp b/Source/Engine/Renderer/DepthOfFieldPass.cpp index 59a21094d..23c626e9c 100644 --- a/Source/Engine/Renderer/DepthOfFieldPass.cpp +++ b/Source/Engine/Renderer/DepthOfFieldPass.cpp @@ -18,7 +18,7 @@ #define DOF_GRID_SIZE 450 #define DOF_DEPTH_BLUR_FORMAT PixelFormat::R16G16_Float -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float2 ProjectionAB; float BokehDepthCullThreshold; float BokehDepthCutoff; diff --git a/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp b/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp index 113d997f2..e51117434 100644 --- a/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp +++ b/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp @@ -19,7 +19,7 @@ #include "Engine/Level/Scene/Scene.h" #include "Engine/Level/Actors/StaticModel.h" -PACK_STRUCT(struct LightmapUVsDensityMaterialShaderData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) LightmapUVsDensityMaterialShaderData { Matrix ViewProjectionMatrix; Matrix WorldMatrix; Rectangle LightmapArea; diff --git a/Source/Engine/Renderer/Editor/VertexColors.cpp b/Source/Engine/Renderer/Editor/VertexColors.cpp index 8b26e13e5..26513f1c8 100644 --- a/Source/Engine/Renderer/Editor/VertexColors.cpp +++ b/Source/Engine/Renderer/Editor/VertexColors.cpp @@ -12,7 +12,7 @@ #include "Engine/Graphics/RenderTask.h" #include "Engine/Renderer/DrawCall.h" -PACK_STRUCT(struct VertexColorsMaterialShaderData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) VertexColorsMaterialShaderData { Matrix ViewProjectionMatrix; Matrix WorldMatrix; }); diff --git a/Source/Engine/Renderer/EyeAdaptationPass.cpp b/Source/Engine/Renderer/EyeAdaptationPass.cpp index 9b664278c..79e0c30a8 100644 --- a/Source/Engine/Renderer/EyeAdaptationPass.cpp +++ b/Source/Engine/Renderer/EyeAdaptationPass.cpp @@ -16,7 +16,7 @@ #include "Engine/Engine/Engine.h" #include "Engine/Engine/Time.h" -PACK_STRUCT(struct EyeAdaptationData { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) EyeAdaptationData { float MinBrightness; float MaxBrightness; float SpeedUp; diff --git a/Source/Engine/Renderer/GBufferPass.cpp b/Source/Engine/Renderer/GBufferPass.cpp index 589401892..4addcb6c6 100644 --- a/Source/Engine/Renderer/GBufferPass.cpp +++ b/Source/Engine/Renderer/GBufferPass.cpp @@ -21,7 +21,7 @@ #include "Engine/Level/Actors/Decal.h" #include "Engine/Engine/Engine.h" -PACK_STRUCT(struct GBufferPassData{ +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) GBufferPassData{ ShaderGBufferData GBuffer; Float3 Dummy0; int32 ViewMode; diff --git a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp index e488bab81..10a40473e 100644 --- a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp +++ b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp @@ -41,7 +41,7 @@ #define DDGI_PROBE_UPDATE_BORDERS_GROUP_SIZE 8 #define DDGI_PROBE_CLASSIFY_GROUP_SIZE 32 -PACK_STRUCT(struct Data0 +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data0 { DynamicDiffuseGlobalIlluminationPass::ConstantsData DDGI; GlobalSignDistanceFieldPass::ConstantsData GlobalSDF; @@ -54,7 +54,7 @@ PACK_STRUCT(struct Data0 Int4 ProbeScrollClears[4]; }); -PACK_STRUCT(struct Data1 +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data1 { // TODO: use push constants on Vulkan or root signature data on DX12 to reduce overhead of changing single DWORD Float2 Padding1; diff --git a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.h b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.h index 09986636d..ed2642153 100644 --- a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.h +++ b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.h @@ -13,7 +13,7 @@ class FLAXENGINE_API DynamicDiffuseGlobalIlluminationPass : public RendererPass< { public: // Constant buffer data for DDGI access on a GPU. - PACK_STRUCT(struct ConstantsData + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ConstantsData { Float4 ProbesOriginAndSpacing[4]; Int4 ProbesScrollOffsets[4]; diff --git a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp index d4e212222..f48bd627e 100644 --- a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp +++ b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp @@ -42,7 +42,7 @@ #include "Engine/Debug/DebugDraw.h" #endif -PACK_STRUCT(struct Data0 +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data0 { Float3 ViewWorldPos; float ViewNearPlane; diff --git a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.h b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.h index 443b3a401..7961eb8b3 100644 --- a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.h +++ b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.h @@ -11,7 +11,7 @@ class FLAXENGINE_API GlobalSurfaceAtlasPass : public RendererPass { private: - PACK_STRUCT(struct Data { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { float BloomLimit; float BloomThreshold; float BloomMagnitude; @@ -56,7 +56,7 @@ private: Matrix LensFlareStarMat; }); - PACK_STRUCT(struct GaussianBlurData { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) GaussianBlurData { Float2 Size; float Dummy3; float Dummy4; diff --git a/Source/Engine/Renderer/ProbesRenderer.cpp b/Source/Engine/Renderer/ProbesRenderer.cpp index dd88edc8c..da4e56f31 100644 --- a/Source/Engine/Renderer/ProbesRenderer.cpp +++ b/Source/Engine/Renderer/ProbesRenderer.cpp @@ -69,7 +69,7 @@ public: } }; -PACK_STRUCT(struct Data +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float2 Dummy0; int32 CubeFace; diff --git a/Source/Engine/Renderer/ReflectionsPass.cpp b/Source/Engine/Renderer/ReflectionsPass.cpp index 4f362392f..f37f711fb 100644 --- a/Source/Engine/Renderer/ReflectionsPass.cpp +++ b/Source/Engine/Renderer/ReflectionsPass.cpp @@ -13,7 +13,7 @@ #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Level/Actors/EnvironmentProbe.h" -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { ShaderEnvProbeData PData; Matrix WVP; ShaderGBufferData GBuffer; diff --git a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp index 5e758d148..82873b81c 100644 --- a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp +++ b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp @@ -24,7 +24,7 @@ #define TEXTURE1 5 #define TEXTURE2 6 -PACK_STRUCT(struct Data +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { ShaderGBufferData GBuffer; diff --git a/Source/Engine/Renderer/ShadowsPass.cpp b/Source/Engine/Renderer/ShadowsPass.cpp index 2809c1a6f..59d9bf45a 100644 --- a/Source/Engine/Renderer/ShadowsPass.cpp +++ b/Source/Engine/Renderer/ShadowsPass.cpp @@ -28,7 +28,7 @@ #define NormalOffsetScaleTweak METERS_TO_UNITS(1) #define LocalLightNearPlane METERS_TO_UNITS(0.1f) -PACK_STRUCT(struct Data{ +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data{ ShaderGBufferData GBuffer; ShaderLightData Light; Matrix WVP; diff --git a/Source/Engine/Renderer/Utils/BitonicSort.cpp b/Source/Engine/Renderer/Utils/BitonicSort.cpp index 78f6e89b9..8255afdf1 100644 --- a/Source/Engine/Renderer/Utils/BitonicSort.cpp +++ b/Source/Engine/Renderer/Utils/BitonicSort.cpp @@ -15,7 +15,7 @@ struct Item uint32 Value; }; -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Item NullItem; uint32 CounterOffset; uint32 MaxIterations; diff --git a/Source/Engine/Renderer/Utils/MultiScaler.cpp b/Source/Engine/Renderer/Utils/MultiScaler.cpp index 1edb81fa8..f6a7c6693 100644 --- a/Source/Engine/Renderer/Utils/MultiScaler.cpp +++ b/Source/Engine/Renderer/Utils/MultiScaler.cpp @@ -5,7 +5,7 @@ #include "Engine/Content/Content.h" #include "Engine/Graphics/GPUContext.h" -PACK_STRUCT(struct Data { +PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { Float2 TexelSize; Float2 Padding; }); diff --git a/Source/Engine/Renderer/VolumetricFogPass.h b/Source/Engine/Renderer/VolumetricFogPass.h index 47757cf47..d39c7638f 100644 --- a/Source/Engine/Renderer/VolumetricFogPass.h +++ b/Source/Engine/Renderer/VolumetricFogPass.h @@ -28,14 +28,14 @@ public: private: - PACK_STRUCT(struct SkyLightData { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) SkyLightData { Float3 MultiplyColor; float VolumetricScatteringIntensity; Float3 AdditiveColor; float Dummy0; }); - PACK_STRUCT(struct Data { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) Data { ShaderGBufferData GBuffer; Float3 GlobalAlbedo; @@ -67,7 +67,7 @@ private: DynamicDiffuseGlobalIlluminationPass::ConstantsData DDGI; }); - PACK_STRUCT(struct PerLight { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) PerLight { Float2 SliceToDepth; int32 MinZ; float LocalLightScatteringIntensity; diff --git a/Source/Engine/ShadowsOfMordor/Builder.Jobs.cpp b/Source/Engine/ShadowsOfMordor/Builder.Jobs.cpp index b3f299524..b846ab0a9 100644 --- a/Source/Engine/ShadowsOfMordor/Builder.Jobs.cpp +++ b/Source/Engine/ShadowsOfMordor/Builder.Jobs.cpp @@ -23,7 +23,7 @@ namespace ShadowsOfMordor { - PACK_STRUCT(struct ShaderData { + PACK_STRUCT(struct alignas(GPU_SHADER_DATA_ALIGNMENT) ShaderData { Rectangle LightmapArea; Matrix WorldMatrix; Matrix ToTangentSpace;