diff --git a/.github/workflows/native-compile-platforms.yml b/.github/workflows/native-compile-platforms.yml index 4ce4adacb98..2ed9e49f426 100644 --- a/.github/workflows/native-compile-platforms.yml +++ b/.github/workflows/native-compile-platforms.yml @@ -118,9 +118,9 @@ jobs: sed -i "s@^COCOS_ENGINE_PATH.*@COCOS_ENGINE_PATH=$NATIVE_ROOT@g" gradle.properties sed -i "s@^NATIVE_DIR.*@NATIVE_DIR=$NATIVE_DIR@g" gradle.properties - # To speedup CI, compile arm64-v8a only + # To speedup CI, compile x86 only # sed -i "s@^PROP_APP_ABI.*@PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86@g" gradle.properties - sed -i "s@^PROP_APP_ABI.*@PROP_APP_ABI=arm64-v8a@g" gradle.properties + sed -i "s@^PROP_APP_ABI.*@PROP_APP_ABI=x86@g" gradle.properties echo "Compile Android - cmake ..." echo "ANDROID_NDK ${ANDROID_NDK} or ${ANDROID_NDK_HOME}" diff --git a/native/cocos/base/Macros.h b/native/cocos/base/Macros.h index 36fcbc497cd..6b2765cf422 100644 --- a/native/cocos/base/Macros.h +++ b/native/cocos/base/Macros.h @@ -409,3 +409,7 @@ It should work same as apples CFSwapInt32LittleToHost(..) #define CC_FORCE_INLINE inline #endif #endif + +// Macro definition to check if a type has padding +#define CC_CHECK_STRUCT_NO_PADDING(T) \ + static_assert(std::has_unique_object_representations_v, "ERROR: Type has padding bytes!") diff --git a/native/cocos/renderer/gfx-base/GFXDef-common.h b/native/cocos/renderer/gfx-base/GFXDef-common.h index 84926c05202..43cd5ade696 100644 --- a/native/cocos/renderer/gfx-base/GFXDef-common.h +++ b/native/cocos/renderer/gfx-base/GFXDef-common.h @@ -1291,7 +1291,9 @@ struct ALIGNAS(8) ColorAttachment { LoadOp loadOp{LoadOp::CLEAR}; StoreOp storeOp{StoreOp::STORE}; GeneralBarrier *barrier{nullptr}; - +#if CC_CPU_ARCH == CC_CPU_ARCH_32 + uint32_t _padding{0}; +#endif EXPOSE_COPY_FN(ColorAttachment) }; @@ -1305,7 +1307,9 @@ struct ALIGNAS(8) DepthStencilAttachment { LoadOp stencilLoadOp{LoadOp::CLEAR}; StoreOp stencilStoreOp{StoreOp::STORE}; GeneralBarrier *barrier{nullptr}; - +#if CC_CPU_ARCH == CC_CPU_ARCH_32 + uint32_t _padding{0}; +#endif EXPOSE_COPY_FN(DepthStencilAttachment) }; @@ -1396,7 +1400,7 @@ struct ALIGNAS(8) BufferBarrierInfo { uint32_t offset{0}; uint32_t size{0}; - + uint32_t _padding{0}; uint64_t discardContents{0}; // @ts-boolean Queue *srcQueue{nullptr}; // @ts-nullable diff --git a/native/cocos/renderer/gfx-base/GFXDef.cpp b/native/cocos/renderer/gfx-base/GFXDef.cpp index 986c28a1815..f3ed22f35a1 100644 --- a/native/cocos/renderer/gfx-base/GFXDef.cpp +++ b/native/cocos/renderer/gfx-base/GFXDef.cpp @@ -36,6 +36,7 @@ namespace gfx { // T must have no implicit padding template ccstd::hash_t quickHashTrivialStruct(const T *info, size_t count = 1) { + CC_CHECK_STRUCT_NO_PADDING(T); static_assert(std::is_trivially_copyable::value && sizeof(T) % 8 == 0, "T must be 8 bytes aligned and trivially copyable"); return ccstd::hash_range(reinterpret_cast(info), reinterpret_cast(info + count)); }