Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions cmake/DaemonFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ macro(try_linker_flag PROP FLAG)
endif()
endmacro()

option(USE_CPU_RECOMMENDED_FEATURES "Use some common hardware features like SSE2, NEON, VFP, MCX16, etc." ON)

if(MINGW AND USE_BREAKPAD)
set_linker_flag("-Wl,--build-id")
endif()
Expand All @@ -140,7 +142,11 @@ if (MSVC)
set_c_cxx_flag("/W4")

if (ARCH STREQUAL "i686")
set_c_cxx_flag("/arch:SSE2")
if (USE_CPU_RECOMMENDED_FEATURES)
set_c_cxx_flag("/arch:SSE2") # This is the default
else()
set_c_cxx_flag("/arch:IA32") # minimum
endif()
endif()

if (USE_LTO)
Expand Down Expand Up @@ -234,7 +240,6 @@ else()
endif()
endif()

option(USE_CPU_RECOMMENDED_FEATURES "Enforce usage of hardware features like SSE, NEON, VFP, MCX16, etc." ON)
if (USE_CPU_RECOMMENDED_FEATURES)
if (ARCH STREQUAL "amd64")
# CMPXCHG16B minimum (x86-64-v2): AMD64 revision F.
Expand Down
7 changes: 2 additions & 5 deletions src/common/Compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,6 @@ int CountTrailingZeroes(unsigned long long x);
// Marks this function as memory allocator
#define ALLOCATOR

// Align the address of a variable to a certain value
#define ALIGNED(a, x) x __attribute__((__aligned__(a)))

// Shared library function import/export
#ifdef _WIN32
#define DLLEXPORT __attribute__((__dllexport__))
Expand Down Expand Up @@ -144,6 +141,8 @@ inline int CountTrailingZeroes(unsigned long long x) { return __builtin_ctzll(x)
#pragma warning(disable : 4244) // 'XXX': conversion from 'YYY' to 'ZZZ', possible loss of data
#pragma warning(disable : 4267) // 'initializing' : conversion from 'size_t' to 'int', possible loss of data

#pragma warning(disable : 4324) // 'refBone_t': structure was padded due to alignment specifier

#pragma warning(disable : 4458) // declaration of 'XXX' hides class member
#pragma warning(disable : 4459) // declaration of 'XXX' hides global declaration

Expand All @@ -167,7 +166,6 @@ inline int CountTrailingZeroes(unsigned long long x) { return __builtin_ctzll(x)
#define ALLOCATOR
#endif
#define MALLOC_LIKE ALLOCATOR __declspec(restrict)
#define ALIGNED(a,x) __declspec(align(a)) x
#define DLLEXPORT __declspec(dllexport)
#define DLLIMPORT __declspec(dllimport)
#define BREAKPOINT() __debugbreak()
Expand Down Expand Up @@ -205,7 +203,6 @@ inline int CountTrailingZeroes(unsigned long long x)
#define PRINTF_TRANSLATE_ARG(a)
#define MALLOC_LIKE
#define ALLOCATOR
#define ALIGNED(a,x) x
#define DLLEXPORT
#define DLLIMPORT
#define BREAKPOINT()
Expand Down
4 changes: 2 additions & 2 deletions src/engine/qcommon/q_math.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -751,8 +751,8 @@ int BoxOnPlaneSide( const vec3_t emins, const vec3_t emaxs, const cplane_t *p )
auto pmax = _mm_max_ps( prod0, prod1 );
auto pmin = _mm_min_ps( prod0, prod1 );

ALIGNED( 16, vec4_t pmaxv );
ALIGNED( 16, vec4_t pminv );
alignas(16) vec4_t pmaxv;
alignas(16) vec4_t pminv;
_mm_store_ps( pmaxv, pmax );
_mm_store_ps( pminv, pmin );

Expand Down
32 changes: 16 additions & 16 deletions src/engine/qcommon/q_shared.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ void Com_Free_Aligned( void *ptr );
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
ALIGNED(16, union transform_t {
union alignas(16) transform_t {
struct {
quat_t rot;
vec3_t trans;
Expand All @@ -266,16 +266,16 @@ void Com_Free_Aligned( void *ptr );
__m128 sseRot;
__m128 sseTransScale;
};
});
};
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
#else
ALIGNED(16, struct transform_t {
struct alignas(16) transform_t {
quat_t rot;
vec3_t trans;
vec_t scale;
});
};
#endif

using fixed4_t = int;
Expand Down Expand Up @@ -1041,29 +1041,29 @@ inline float DotProduct( const vec3_t x, const vec3_t y )
return *(__m128 *)vec;
}
inline __m128 mask_0000() {
static const ALIGNED(16, int vec[4]) = { 0, 0, 0, 0 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { 0, 0, 0, 0 };
return sseLoadInts( vec.data() );
}
inline __m128 mask_000W() {
static const ALIGNED(16, int vec[4]) = { 0, 0, 0, -1 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { 0, 0, 0, -1 };
return sseLoadInts( vec.data() );
}
inline __m128 mask_XYZ0() {
static const ALIGNED(16, int vec[4]) = { -1, -1, -1, 0 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { -1, -1, -1, 0 };
return sseLoadInts( vec.data() );
}

inline __m128 sign_000W() {
static const ALIGNED(16, int vec[4]) = { 0, 0, 0, 1<<31 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { 0, 0, 0, 1<<31 };
return sseLoadInts( vec.data() );
}
inline __m128 sign_XYZ0() {
static const ALIGNED(16, int vec[4]) = { 1<<31, 1<<31, 1<<31, 0 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { 1<<31, 1<<31, 1<<31, 0 };
return sseLoadInts( vec.data() );
}
inline __m128 sign_XYZW() {
static const ALIGNED(16, int vec[4]) = { 1<<31, 1<<31, 1<<31, 1<<31 };
return sseLoadInts( vec );
alignas(16) static const std::array<int, 4> vec = { 1<<31, 1<<31, 1<<31, 1<<31 };
return sseLoadInts( vec.data() );
}

inline __m128 sseDot4( __m128 a, __m128 b ) {
Expand Down
6 changes: 3 additions & 3 deletions src/engine/renderer/tr_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -2180,7 +2180,7 @@ enum class dynamicLightRenderer_t { LEGACY, TILED };
};

// align for sse skinning
ALIGNED(16, struct md5Vertex_t
struct alignas(16) md5Vertex_t
{
vec4_t position;
vec4_t tangent;
Expand All @@ -2194,7 +2194,7 @@ enum class dynamicLightRenderer_t { LEGACY, TILED };

uint32_t boneIndexes[ MAX_WEIGHTS ];
float boneWeights[ MAX_WEIGHTS ];
});
};

struct md5Surface_t
{
Expand Down Expand Up @@ -3395,7 +3395,7 @@ inline bool checkGLErrors()
#endif
};

extern shaderCommands_t tess;
alignas(16) extern shaderCommands_t tess;

void GLSL_InitGPUShaders();
void GLSL_ShutdownGPUShaders();
Expand Down
2 changes: 1 addition & 1 deletion src/engine/renderer/tr_shade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ SURFACE SHADERS
=============================================================
*/

ALIGNED( 16, shaderCommands_t tess );
alignas(16) shaderCommands_t tess;

/*
================
Expand Down
2 changes: 1 addition & 1 deletion src/engine/renderer/tr_surface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ use the shader system.
==============================================================================
*/

static ALIGNED( 16, transform_t bones[ MAX_BONES ] );
static transform_t bones[ MAX_BONES ];

/*
==============
Expand Down
4 changes: 2 additions & 2 deletions src/engine/renderer/tr_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ enum class refSkeletonType_t
SK_ABSOLUTE
};

ALIGNED(16, struct refSkeleton_t
struct alignas(16) refSkeleton_t
{
refSkeletonType_t type; // skeleton has been reset

Expand All @@ -159,7 +159,7 @@ ALIGNED(16, struct refSkeleton_t
vec_t scale;

refBone_t bones[ MAX_BONES ];
});
};

// XreaL END

Expand Down