From 7b2f1e1d09f57fb3ebab0f73c4d6954139b540b5 Mon Sep 17 00:00:00 2001 From: "Matias N. Goldberg" Date: Tue, 14 Jan 2025 19:01:30 -0300 Subject: [PATCH] Fix union order to simplify empty initializers This is a followup to PR #101344 (commit 0e06eb80bc9cf08000bf86d06c0ce57bcf7775be). Some of them were not an issue because Godot was initializing all members, but they were "fixed" just in case since it could become a problem in the future. Valgrind was specifically complaining about HashMapData & GlobalPipelineData. --- core/templates/a_hash_map.h | 2 +- drivers/gles3/rasterizer_scene_gles3.h | 8 ++++---- scene/3d/voxelizer.h | 2 +- scene/gui/graph_edit.h | 2 +- .../forward_clustered/render_forward_clustered.h | 12 ++++++------ .../forward_mobile/render_forward_mobile.h | 12 ++++++------ 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/templates/a_hash_map.h b/core/templates/a_hash_map.h index de24fe4487e..03089f093a3 100644 --- a/core/templates/a_hash_map.h +++ b/core/templates/a_hash_map.h @@ -35,12 +35,12 @@ struct HashMapData { union { + uint64_t data; struct { uint32_t hash; uint32_t hash_to_key; }; - uint64_t data; }; }; diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index b9ac92b70e4..4d7a319fe0f 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -250,6 +250,10 @@ private: }; union { + struct { + uint64_t sort_key1; + uint64_t sort_key2; + }; struct { uint64_t lod_index : 8; uint64_t surface_index : 8; @@ -265,10 +269,6 @@ private: uint64_t depth_layer : 4; uint64_t priority : 8; }; - struct { - uint64_t sort_key1; - uint64_t sort_key2; - }; } sort; RS::PrimitiveType primitive = RS::PRIMITIVE_MAX; diff --git a/scene/3d/voxelizer.h b/scene/3d/voxelizer.h index 41e77673085..161fa0e2245 100644 --- a/scene/3d/voxelizer.h +++ b/scene/3d/voxelizer.h @@ -72,13 +72,13 @@ private: struct CellSort { union { + uint64_t key = 0; struct { uint64_t z : 16; uint64_t y : 16; uint64_t x : 16; uint64_t level : 16; }; - uint64_t key = 0; }; int32_t index = 0; diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index abc015cc87a..0b8717b766b 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -150,11 +150,11 @@ public: private: struct ConnectionType { union { + uint64_t key = 0; struct { uint32_t type_a; uint32_t type_b; }; - uint64_t key = 0; }; static uint32_t hash(const ConnectionType &p_conn) { diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h index 567ca5d80fa..bfde315c681 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h @@ -428,6 +428,10 @@ private: }; union { + struct { + uint64_t sort_key1; + uint64_t sort_key2; + }; struct { uint64_t lod_index : 8; uint64_t surface_index : 8; @@ -443,10 +447,6 @@ private: uint64_t depth_layer : 4; uint64_t priority : 8; }; - struct { - uint64_t sort_key1; - uint64_t sort_key2; - }; } sort; RS::PrimitiveType primitive = RS::PRIMITIVE_MAX; @@ -541,6 +541,8 @@ private: struct GlobalPipelineData { union { + uint32_t key; + struct { uint32_t texture_samples : 3; uint32_t use_reflection_probes : 1; @@ -556,8 +558,6 @@ private: uint32_t use_shadow_cubemaps : 1; uint32_t use_shadow_dual_paraboloid : 1; }; - - uint32_t key; }; }; diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h index e6aec9752ec..4d2513f012f 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h @@ -397,6 +397,10 @@ protected: }; union { + struct { + uint64_t sort_key1; + uint64_t sort_key2; + }; struct { // !BAS! CHECK BITS!!! @@ -413,10 +417,6 @@ protected: // uint64_t lod_index : 8; // no need to sort on LOD // uint64_t uses_forward_gi : 1; // no GI here, remove }; - struct { - uint64_t sort_key1; - uint64_t sort_key2; - }; } sort; RS::PrimitiveType primitive = RS::PRIMITIVE_MAX; @@ -575,6 +575,8 @@ public: struct GlobalPipelineData { union { + uint32_t key; + struct { uint32_t texture_samples : 3; uint32_t target_samples : 3; @@ -586,8 +588,6 @@ public: uint32_t use_shadow_cubemaps : 1; uint32_t use_shadow_dual_paraboloid : 1; }; - - uint32_t key; }; };