forked from icaven/glm
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
fa51f18
commit e2ae466
Showing
2 changed files
with
105 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
#include <glm/glm.hpp> | ||
/* | ||
#define GLM_ALIGNED(x) __declspec(align(x)) | ||
#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) | ||
#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ | ||
template <typename T> \ | ||
struct storage<T, x, true> { \ | ||
GLM_ALIGNED_STRUCT(x) type { \ | ||
uint8_t data[x]; \ | ||
}; \ | ||
}; | ||
template <typename T, std::size_t size, bool aligned> | ||
struct storage { | ||
typedef struct type { | ||
uint8_t data[size]; | ||
} type; | ||
}; | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) | ||
GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) | ||
*/ | ||
int main() { | ||
size_t size1_aligned = sizeof(glm::detail::storage<int, 1, true>::type); | ||
size_t size2_aligned = sizeof(glm::detail::storage<int, 2, true>::type); | ||
size_t size4_aligned = sizeof(glm::detail::storage<int, 4, true>::type); | ||
size_t size8_aligned = sizeof(glm::detail::storage<int, 8, true>::type); | ||
size_t size16_aligned = sizeof(glm::detail::storage<int, 16, true>::type); | ||
size_t size32_aligned = sizeof(glm::detail::storage<int, 32, true>::type); | ||
size_t size64_aligned = sizeof(glm::detail::storage<int, 64, true>::type); | ||
size_t size128_aligned = sizeof(glm::detail::storage<int, 128, true>::type); | ||
|
||
size_t size1_unaligned = sizeof(glm::detail::storage<int, 1, false>::type); | ||
size_t size2_unaligned = sizeof(glm::detail::storage<int, 2, false>::type); | ||
size_t size4_unaligned = sizeof(glm::detail::storage<int, 4, false>::type); | ||
size_t size8_unaligned = sizeof(glm::detail::storage<int, 8, false>::type); | ||
size_t size16_unaligned = sizeof(glm::detail::storage<int, 16, false>::type); | ||
size_t size32_unaligned = sizeof(glm::detail::storage<int, 32, false>::type); | ||
size_t size64_unaligned = sizeof(glm::detail::storage<int, 64, false>::type); | ||
size_t size128_unaligned = sizeof(glm::detail::storage<int, 128, false>::type); | ||
|
||
size_t align1_aligned = alignof(glm::detail::storage<int, 1, true>::type); | ||
size_t align2_aligned = alignof(glm::detail::storage<int, 2, true>::type); | ||
size_t align4_aligned = alignof(glm::detail::storage<int, 4, true>::type); | ||
size_t align8_aligned = alignof(glm::detail::storage<int, 8, true>::type); | ||
size_t align16_aligned = alignof(glm::detail::storage<int, 16, true>::type); | ||
size_t align32_aligned = alignof(glm::detail::storage<int, 32, true>::type); | ||
size_t align64_aligned = alignof(glm::detail::storage<int, 64, true>::type); | ||
size_t align128_aligned = alignof(glm::detail::storage<int, 128, true>::type); | ||
|
||
size_t align1_unaligned = alignof(glm::detail::storage<int, 1, false>::type); | ||
size_t align2_unaligned = alignof(glm::detail::storage<int, 2, false>::type); | ||
size_t align4_unaligned = alignof(glm::detail::storage<int, 4, false>::type); | ||
size_t align8_unaligned = alignof(glm::detail::storage<int, 8, false>::type); | ||
size_t align16_unaligned = alignof(glm::detail::storage<int, 16, false>::type); | ||
size_t align32_unaligned = alignof(glm::detail::storage<int, 32, false>::type); | ||
size_t align64_unaligned = alignof(glm::detail::storage<int, 64, false>::type); | ||
size_t align128_unaligned = alignof(glm::detail::storage<int, 128, false>::type); | ||
|
||
// RESULTS | ||
// size1_aligned 1 | ||
// size2_aligned 2 | ||
// size4_aligned 4 | ||
// size8_aligned 8 | ||
// size16_aligned 16 | ||
// size32_aligned 32 | ||
// size64_aligned 64 | ||
// size128_aligned 128 | ||
// | ||
// size1_unaligned 1 | ||
// size2_unaligned 2 | ||
// size4_unaligned 4 | ||
// size8_unaligned 8 | ||
// size16_unaligned 16 | ||
// size32_unaligned 32 | ||
// size64_unaligned 64 | ||
// size128_unaligned 128 | ||
// | ||
// align1_aligned 1 | ||
// align2_aligned 2 | ||
// align4_aligned 4 | ||
// align8_aligned 8 | ||
// align16_aligned 16 | ||
// align32_aligned 32 | ||
// align64_aligned 64 | ||
// align128_aligned 1 | ||
// | ||
// align1_unaligned 1 | ||
// align2_unaligned 1 | ||
// align4_unaligned 1 | ||
// align8_unaligned 1 | ||
// align16_unaligned 1 | ||
// align32_unaligned 1 | ||
// align64_unaligned 1 | ||
// align128_unaligned 1 | ||
|
||
return 0; | ||
} |