1
0
Fork 0
forked from suyu/suyu

Merge pull request #1475 from lioncash/align

Common: Get rid of alignment macros
This commit is contained in:
Yuri Kunde Schlesner 2016-03-09 20:08:38 -08:00
commit 305e63d9ea
2 changed files with 5 additions and 13 deletions

View file

@ -18,19 +18,11 @@
#define INSERT_PADDING_BYTES(num_bytes) u8 CONCAT2(pad, __LINE__)[(num_bytes)] #define INSERT_PADDING_BYTES(num_bytes) u8 CONCAT2(pad, __LINE__)[(num_bytes)]
#define INSERT_PADDING_WORDS(num_words) u32 CONCAT2(pad, __LINE__)[(num_words)] #define INSERT_PADDING_WORDS(num_words) u32 CONCAT2(pad, __LINE__)[(num_words)]
// Inlining
#ifdef _WIN32 #ifdef _WIN32
// Alignment
#define FORCE_INLINE __forceinline #define FORCE_INLINE __forceinline
#define MEMORY_ALIGNED16(x) __declspec(align(16)) x
#define MEMORY_ALIGNED32(x) __declspec(align(32)) x
#define MEMORY_ALIGNED64(x) __declspec(align(64)) x
#define MEMORY_ALIGNED128(x) __declspec(align(128)) x
#else #else
#define FORCE_INLINE inline __attribute__((always_inline)) #define FORCE_INLINE inline __attribute__((always_inline))
#define MEMORY_ALIGNED16(x) __attribute__((aligned(16))) x
#define MEMORY_ALIGNED32(x) __attribute__((aligned(32))) x
#define MEMORY_ALIGNED64(x) __attribute__((aligned(64))) x
#define MEMORY_ALIGNED128(x) __attribute__((aligned(128))) x
#endif #endif
#ifndef _MSC_VER #ifndef _MSC_VER

View file

@ -82,7 +82,7 @@ struct ShaderSetup {
struct { struct {
// The float uniforms are accessed by the shader JIT using SSE instructions, and are // The float uniforms are accessed by the shader JIT using SSE instructions, and are
// therefore required to be 16-byte aligned. // therefore required to be 16-byte aligned.
Math::Vec4<float24> MEMORY_ALIGNED16(f[96]); alignas(16) Math::Vec4<float24> f[96];
std::array<bool, 16> b; std::array<bool, 16> b;
std::array<Math::Vec4<u8>, 4> i; std::array<Math::Vec4<u8>, 4> i;
@ -276,9 +276,9 @@ struct UnitState {
struct Registers { struct Registers {
// The registers are accessed by the shader JIT using SSE instructions, and are therefore // The registers are accessed by the shader JIT using SSE instructions, and are therefore
// required to be 16-byte aligned. // required to be 16-byte aligned.
Math::Vec4<float24> MEMORY_ALIGNED16(input[16]); alignas(16) Math::Vec4<float24> input[16];
Math::Vec4<float24> MEMORY_ALIGNED16(output[16]); alignas(16) Math::Vec4<float24> output[16];
Math::Vec4<float24> MEMORY_ALIGNED16(temporary[16]); alignas(16) Math::Vec4<float24> temporary[16];
} registers; } registers;
static_assert(std::is_pod<Registers>::value, "Structure is not POD"); static_assert(std::is_pod<Registers>::value, "Structure is not POD");