SDL: Add padding for non-32-bit-aligned types in structs (#10701)

From 42a0df91bfe63985d951558404acb4aa4a6ada48 Mon Sep 17 00:00:00 2001
From: Evan Hemsley <[EMAIL REDACTED]>
Date: Thu, 5 Sep 2024 09:52:57 -0700
Subject: [PATCH] Add padding for non-32-bit-aligned types in structs (#10701)

---
 include/SDL3/SDL_events.h |  3 +++
 include/SDL3/SDL_gpu.h    | 32 ++++++++++++++++++++++++++++++--
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/include/SDL3/SDL_events.h b/include/SDL3/SDL_events.h
index fbe2bb061b6aa..db776686c0b85 100644
--- a/include/SDL3/SDL_events.h
+++ b/include/SDL3/SDL_events.h
@@ -381,6 +381,9 @@ typedef struct SDL_TextEditingCandidatesEvent
     Sint32 num_candidates;      /**< The number of strings in `candidates` */
     Sint32 selected_candidate;  /**< The index of the selected candidate, or -1 if no candidate is selected */
     SDL_bool horizontal;          /**< SDL_TRUE if the list is horizontal, SDL_FALSE if it's vertical */
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_TextEditingCandidatesEvent;
 
 /**
diff --git a/include/SDL3/SDL_gpu.h b/include/SDL3/SDL_gpu.h
index f09ffb69a6d52..674ead366d260 100644
--- a/include/SDL3/SDL_gpu.h
+++ b/include/SDL3/SDL_gpu.h
@@ -899,6 +899,9 @@ typedef struct SDL_GPUDepthStencilValue
 {
     float depth;
     Uint8 stencil;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_GPUDepthStencilValue;
 
 typedef struct SDL_GPUViewport
@@ -1012,9 +1015,11 @@ typedef struct SDL_GPUSamplerCreateInfo
     SDL_GPUSamplerAddressMode addressModeV;
     SDL_GPUSamplerAddressMode addressModeW;
     float mipLodBias;
-    SDL_bool anisotropyEnable;
     float maxAnisotropy;
+    SDL_bool anisotropyEnable;
     SDL_bool compareEnable;
+    Uint8 padding1;
+    Uint8 padding2;
     SDL_GPUCompareOp compareOp;
     float minLod;
     float maxLod;
@@ -1057,6 +1062,9 @@ typedef struct SDL_GPUStencilOpState
 typedef struct SDL_GPUColorAttachmentBlendState
 {
     SDL_bool blendEnable;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
     SDL_GPUBlendFactor srcColorBlendFactor;
     SDL_GPUBlendFactor dstColorBlendFactor;
     SDL_GPUBlendOp colorBlendOp;
@@ -1126,6 +1134,9 @@ typedef struct SDL_GPURasterizerState
     SDL_GPUCullMode cullMode;
     SDL_GPUFrontFace frontFace;
     SDL_bool depthBiasEnable;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
     float depthBiasConstantFactor;
     float depthBiasClamp;
     float depthBiasSlopeFactor;
@@ -1141,13 +1152,15 @@ typedef struct SDL_GPUDepthStencilState
 {
     SDL_bool depthTestEnable;
     SDL_bool depthWriteEnable;
-    SDL_GPUCompareOp compareOp;
     SDL_bool stencilTestEnable;
+    Uint8 padding1;
+    SDL_GPUCompareOp compareOp;
     SDL_GPUStencilOpState backStencilState;
     SDL_GPUStencilOpState frontStencilState;
     Uint8 compareMask;
     Uint8 writeMask;
     Uint8 reference;
+    Uint8 padding2;
 } SDL_GPUDepthStencilState;
 
 typedef struct SDL_GPUColorAttachmentDescription
@@ -1161,6 +1174,9 @@ typedef struct SDL_GPUGraphicsPipelineAttachmentInfo
     const SDL_GPUColorAttachmentDescription *colorAttachmentDescriptions;
     Uint32 colorAttachmentCount;
     SDL_bool hasDepthStencilAttachment;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
     SDL_GPUTextureFormat depthStencilFormat;
 } SDL_GPUGraphicsPipelineAttachmentInfo;
 
@@ -1234,6 +1250,9 @@ typedef struct SDL_GPUColorAttachmentInfo
 
     /* if SDL_TRUE, cycles the texture if the texture is bound and loadOp is not LOAD */
     SDL_bool cycle;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_GPUColorAttachmentInfo;
 
 typedef struct SDL_GPUDepthStencilAttachmentInfo
@@ -1296,6 +1315,9 @@ typedef struct SDL_GPUDepthStencilAttachmentInfo
 
     /* if SDL_TRUE, cycles the texture if the texture is bound and any load ops are not LOAD */
     SDL_bool cycle;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_GPUDepthStencilAttachmentInfo;
 
 /* Binding structs */
@@ -1318,6 +1340,9 @@ typedef struct SDL_GPUStorageBufferWriteOnlyBinding
 
     /* if SDL_TRUE, cycles the buffer if it is bound. */
     SDL_bool cycle;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_GPUStorageBufferWriteOnlyBinding;
 
 typedef struct SDL_GPUStorageTextureWriteOnlyBinding
@@ -1328,6 +1353,9 @@ typedef struct SDL_GPUStorageTextureWriteOnlyBinding
 
     /* if SDL_TRUE, cycles the texture if the texture is bound. */
     SDL_bool cycle;
+    Uint8 padding1;
+    Uint8 padding2;
+    Uint8 padding3;
 } SDL_GPUStorageTextureWriteOnlyBinding;
 
 /* Functions */