From 703b3f3dc2938979d64def279cb301ec90498c86 Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 16 Dec 2025 15:50:58 -0300 Subject: [PATCH] Add structure padding where necessary for push constants. Co-authored-by: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> --- servers/rendering/renderer_rd/effects/copy_effects.cpp | 1 - servers/rendering/renderer_rd/effects/copy_effects.h | 6 +++--- servers/rendering/renderer_rd/effects/debug_effects.h | 2 +- servers/rendering/renderer_rd/effects/fsr.h | 2 +- .../renderer_rd/shaders/effects/cube_to_octmap.glsl | 3 +++ .../rendering/renderer_rd/shaders/effects/fsr_upscale.glsl | 2 ++ .../renderer_rd/shaders/effects/motion_vectors.glsl | 5 +++-- .../renderer_rd/shaders/effects/octmap_downsampler.glsl | 2 +- .../shaders/effects/octmap_downsampler_raster.glsl | 6 ++++++ .../shaders/effects/screen_space_reflection.glsl | 3 +++ .../shaders/effects/screen_space_reflection_downsample.glsl | 1 + .../shaders/effects/screen_space_reflection_filter.glsl | 1 + .../shaders/effects/screen_space_reflection_hiz.glsl | 1 + .../shaders/effects/screen_space_reflection_resolve.glsl | 1 + 14 files changed, 27 insertions(+), 9 deletions(-) diff --git a/servers/rendering/renderer_rd/effects/copy_effects.cpp b/servers/rendering/renderer_rd/effects/copy_effects.cpp index e210397b519..d7d0807755a 100644 --- a/servers/rendering/renderer_rd/effects/copy_effects.cpp +++ b/servers/rendering/renderer_rd/effects/copy_effects.cpp @@ -1249,7 +1249,6 @@ void CopyEffects::octmap_filter(RID p_source_octmap, const Vector &p_dest_o OctmapFilterPushConstant push_constant; push_constant.border_size[0] = p_border_size; push_constant.border_size[1] = 1.0f - p_border_size * 2.0f; - push_constant.size = 320; Vector uniforms; for (int i = 0; i < p_dest_octmap.size(); i++) { diff --git a/servers/rendering/renderer_rd/effects/copy_effects.h b/servers/rendering/renderer_rd/effects/copy_effects.h index e15fd4a51ea..db464259c7e 100644 --- a/servers/rendering/renderer_rd/effects/copy_effects.h +++ b/servers/rendering/renderer_rd/effects/copy_effects.h @@ -237,7 +237,7 @@ private: struct CopyToOctmapPushConstant { float border_size; - float pad[3]; + uint32_t pad[3]; }; struct CopyToOctmap { @@ -282,8 +282,8 @@ private: struct OctmapFilterPushConstant { float border_size[2]; - uint32_t size; - uint32_t pad; + uint32_t pad1; + uint32_t pad2; }; struct OctmapFilterRasterPushConstant { diff --git a/servers/rendering/renderer_rd/effects/debug_effects.h b/servers/rendering/renderer_rd/effects/debug_effects.h index 40ebdd96b44..9f9a85eb0e8 100644 --- a/servers/rendering/renderer_rd/effects/debug_effects.h +++ b/servers/rendering/renderer_rd/effects/debug_effects.h @@ -71,7 +71,7 @@ private: float reprojection_matrix[16]; float resolution[2]; uint32_t force_derive_from_depth; - float pad; + uint32_t pad; }; struct { diff --git a/servers/rendering/renderer_rd/effects/fsr.h b/servers/rendering/renderer_rd/effects/fsr.h index 7f308be203d..48816936a83 100644 --- a/servers/rendering/renderer_rd/effects/fsr.h +++ b/servers/rendering/renderer_rd/effects/fsr.h @@ -65,7 +65,7 @@ private: float upscaled_height; float sharpness; int pass; - int _unused0, _unused1; + int pad[2]; }; FsrUpscaleShaderRD fsr_shader; diff --git a/servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl b/servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl index faf62fa028c..0c51dffef99 100644 --- a/servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl @@ -27,6 +27,9 @@ layout(set = 0, binding = 0) uniform samplerCube source_cube; layout(push_constant, std430) uniform Params { float border_size; + uint pad1; + uint pad2; + uint pad3; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/fsr_upscale.glsl b/servers/rendering/renderer_rd/shaders/effects/fsr_upscale.glsl index 221e97becea..ed262ab6425 100644 --- a/servers/rendering/renderer_rd/shaders/effects/fsr_upscale.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/fsr_upscale.glsl @@ -60,6 +60,8 @@ layout(push_constant, std430) uniform Params { float upscaled_height; float sharpness; int pass; + int pad1; + int pad2; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/motion_vectors.glsl b/servers/rendering/renderer_rd/shaders/effects/motion_vectors.glsl index d02ffe0b4f2..64e2108dc9a 100644 --- a/servers/rendering/renderer_rd/shaders/effects/motion_vectors.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/motion_vectors.glsl @@ -30,7 +30,8 @@ layout(location = 0) out vec4 frag_color; layout(push_constant, std430) uniform Params { highp mat4 reprojection_matrix; vec2 resolution; - bool force_derive_from_depth; + uint force_derive_from_depth; + uint pad; } params; @@ -55,7 +56,7 @@ void main() { vec2 cell_pos_pixel = floor(pos_pixel / cell_size) * cell_size + (cell_size * 0.5f); vec2 cell_pos_uv = cell_pos_pixel / params.resolution; vec2 cell_pos_velocity = textureLod(source_velocity, cell_pos_uv, 0.0f).xy; - bool derive_velocity = params.force_derive_from_depth || all(lessThanEqual(cell_pos_velocity, vec2(-1.0f, -1.0f))); + bool derive_velocity = bool(params.force_derive_from_depth) || all(lessThanEqual(cell_pos_velocity, vec2(-1.0f, -1.0f))); if (derive_velocity) { float depth = textureLod(source_depth, cell_pos_uv, 0.0f).x; cell_pos_velocity = derive_motion_vector(cell_pos_uv, depth, params.reprojection_matrix); diff --git a/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl b/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl index 1ae91212b43..ff5cb2c31dc 100644 --- a/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl @@ -37,7 +37,7 @@ layout(OCTMAP_FORMAT, set = 1, binding = 0) uniform restrict writeonly image2D d layout(push_constant, std430) uniform Params { float border_size; uint size; - uint pad; + uint pad1; uint pad2; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl b/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl index 24097e6653c..16a922f96d0 100644 --- a/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl @@ -28,7 +28,10 @@ #include "../oct_inc.glsl" layout(push_constant, std430) uniform Params { + float border_size; uint size; + uint pad1; + uint pad2; } params; @@ -64,7 +67,10 @@ void main() { #include "../oct_inc.glsl" layout(push_constant, std430) uniform Params { + float border_size; uint size; + uint pad1; + uint pad2; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl index e043d6e876c..a45450e3545 100644 --- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl @@ -29,6 +29,9 @@ layout(push_constant, std430) uniform Params { float depth_tolerance; bool orthogonal; int view_index; + int pad1; + int pad2; + int pad3; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_downsample.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_downsample.glsl index ec96454d0eb..712623d738f 100644 --- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_downsample.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_downsample.glsl @@ -13,6 +13,7 @@ layout(rgba8, set = 0, binding = 3) uniform restrict writeonly image2D dest_norm layout(push_constant, std430) uniform Params { ivec2 screen_size; + ivec2 pad; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl index 05d69fedbcb..6ca626ee5b4 100644 --- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl @@ -12,6 +12,7 @@ layout(set = 0, binding = 1) uniform restrict writeonly image2D dest; layout(push_constant, std430) uniform Params { ivec2 screen_size; uint mip_level; + int pad; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_hiz.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_hiz.glsl index 8b05d382cf5..3d1f273edb5 100644 --- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_hiz.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_hiz.glsl @@ -11,6 +11,7 @@ layout(r32f, set = 0, binding = 1) uniform restrict writeonly image2D dest; layout(push_constant, std430) uniform Params { ivec2 screen_size; + ivec2 pad; } params; diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_resolve.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_resolve.glsl index db2a79fea82..d50093f4a4f 100644 --- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_resolve.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_resolve.glsl @@ -16,6 +16,7 @@ layout(rgba16f, set = 0, binding = 6) uniform restrict writeonly image2D output_ layout(push_constant, std430) uniform Params { ivec2 screen_size; + ivec2 pad; } params;