mirror of
https://github.com/cemu-project/Cemu.git
synced 2024-11-24 10:09:19 +01:00
Fix build using clang-cl on windows and improve driver detection (#129)
This commit is contained in:
parent
4ed18a65c3
commit
a54a3ec74e
@ -39,7 +39,15 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|||||||
if (MSVC)
|
if (MSVC)
|
||||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CemuBin)
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CemuBin)
|
||||||
# floating point model: precise, fiber safe optimizations
|
# floating point model: precise, fiber safe optimizations
|
||||||
add_compile_options(/EHsc /fp:precise /GT)
|
add_compile_options(/EHsc /fp:precise)
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
|
# Speeds up static linking (especially helpful in incremental compilation)
|
||||||
|
if((CMAKE_LINKER MATCHES ".*lld-link.*") AND (CMAKE_AR MATCHES ".*llvm-lib.*"))
|
||||||
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY STATIC_LIBRARY_OPTIONS /llvmlibthin)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_compile_options(/GT)
|
||||||
|
endif()
|
||||||
if (PUBLIC_RELEASE)
|
if (PUBLIC_RELEASE)
|
||||||
message(STATUS "Using additional optimization flags for MSVC")
|
message(STATUS "Using additional optimization flags for MSVC")
|
||||||
add_compile_options(/Oi /Ot) # enable intrinsic functions, favor speed
|
add_compile_options(/Oi /Ot) # enable intrinsic functions, favor speed
|
||||||
|
7
dependencies/DirectX_2010/XAudio2.h
vendored
7
dependencies/DirectX_2010/XAudio2.h
vendored
@ -48,10 +48,15 @@
|
|||||||
//DEFINE_CLSID(XAudio2_Debug, 47199894, 7cc2, 444d, 98, 73, ce, d2, 56, 2c, c6, 0e);
|
//DEFINE_CLSID(XAudio2_Debug, 47199894, 7cc2, 444d, 98, 73, ce, d2, 56, 2c, c6, 0e);
|
||||||
|
|
||||||
// XAudio 2.7 (June 2010 SDK)
|
// XAudio 2.7 (June 2010 SDK)
|
||||||
|
#ifdef __clang__
|
||||||
|
class __declspec(uuid("5a508685-a254-4fba-9b82-9a24b00306af")) XAudio2; extern "C" const GUID CLSID_XAudio2;
|
||||||
|
class __declspec(uuid("db05ea35-0329-4d4b-a53a-6dead03d3852")) XAudio2_Debug; extern "C" const GUID CLSID_XAudio2_Debug;
|
||||||
|
struct __declspec(uuid("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")) IXAudio2; extern "C" const GUID IID_IXAudio2;
|
||||||
|
#else
|
||||||
DEFINE_CLSID(XAudio2, 5a508685, a254, 4fba, 9b, 82, 9a, 24, b0, 03, 06, af);
|
DEFINE_CLSID(XAudio2, 5a508685, a254, 4fba, 9b, 82, 9a, 24, b0, 03, 06, af);
|
||||||
DEFINE_CLSID(XAudio2_Debug, db05ea35, 0329, 4d4b, a5, 3a, 6d, ea, d0, 3d, 38, 52);
|
DEFINE_CLSID(XAudio2_Debug, db05ea35, 0329, 4d4b, a5, 3a, 6d, ea, d0, 3d, 38, 52);
|
||||||
DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb);
|
DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Ignore the rest of this header if only the GUID definitions were requested
|
// Ignore the rest of this header if only the GUID definitions were requested
|
||||||
#ifndef GUID_DEFS_ONLY
|
#ifndef GUID_DEFS_ONLY
|
||||||
|
@ -40,6 +40,9 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
#include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define CLIP_U8(x) CLIP3(0, UINT8_MAX, (x))
|
#define CLIP_U8(x) CLIP3(0, UINT8_MAX, (x))
|
||||||
#define CLIP_S8(x) CLIP3(INT8_MIN, INT8_MAX, (x))
|
#define CLIP_S8(x) CLIP3(INT8_MIN, INT8_MAX, (x))
|
||||||
@ -71,7 +74,7 @@
|
|||||||
|
|
||||||
/* For MSVC x64 */
|
/* For MSVC x64 */
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
|
|
||||||
static inline int __builtin_clz(unsigned x)
|
static inline int __builtin_clz(unsigned x)
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,8 @@ uint64 PPCTimer_tscToMicroseconds(uint64 us)
|
|||||||
|
|
||||||
|
|
||||||
uint64 remainder;
|
uint64 remainder;
|
||||||
#if _MSC_VER < 1923
|
|
||||||
|
#if _MSC_VER < 1923 || defined(__clang__)
|
||||||
const uint64 microseconds = udiv128(r.low, r.high, _rdtscFrequency, &remainder);
|
const uint64 microseconds = udiv128(r.low, r.high, _rdtscFrequency, &remainder);
|
||||||
#else
|
#else
|
||||||
const uint64 microseconds = _udiv128(r.high, r.low, _rdtscFrequency, &remainder);
|
const uint64 microseconds = _udiv128(r.high, r.low, _rdtscFrequency, &remainder);
|
||||||
@ -158,7 +159,7 @@ uint64 PPCTimer_getFromRDTSC()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint64 remainder;
|
uint64 remainder;
|
||||||
#if _MSC_VER < 1923
|
#if _MSC_VER < 1923 || defined(__clang__)
|
||||||
uint64 elapsedTick = udiv128(_rdtscAcc.low, _rdtscAcc.high, _rdtscFrequency, &remainder);
|
uint64 elapsedTick = udiv128(_rdtscAcc.low, _rdtscAcc.high, _rdtscFrequency, &remainder);
|
||||||
#else
|
#else
|
||||||
uint64 elapsedTick = _udiv128(_rdtscAcc.high, _rdtscAcc.low, _rdtscFrequency, &remainder);
|
uint64 elapsedTick = _udiv128(_rdtscAcc.high, _rdtscAcc.low, _rdtscFrequency, &remainder);
|
||||||
|
@ -157,7 +157,11 @@ uint32 LatteTexture_CalculateTextureDataHash(LatteTexture* hostTexture)
|
|||||||
readPtr += (288 / 32);
|
readPtr += (288 / 32);
|
||||||
h256 = _mm256_xor_si256(h256, temp);
|
h256 = _mm256_xor_si256(h256, temp);
|
||||||
}
|
}
|
||||||
|
#ifdef __clang__
|
||||||
|
hashVal = h256[0] + h256[1] + h256[2] + h256[3] + h256[4] + h256[5] + h256[6] + h256[7];
|
||||||
|
#else
|
||||||
hashVal = h256.m256i_u32[0] + h256.m256i_u32[1] + h256.m256i_u32[2] + h256.m256i_u32[3] + h256.m256i_u32[4] + h256.m256i_u32[5] + h256.m256i_u32[6] + h256.m256i_u32[7];
|
hashVal = h256.m256i_u32[0] + h256.m256i_u32[1] + h256.m256i_u32[2] + h256.m256i_u32[3] + h256.m256i_u32[4] + h256.m256i_u32[5] + h256.m256i_u32[6] + h256.m256i_u32[7];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if( false ) {}
|
if( false ) {}
|
||||||
|
@ -378,7 +378,7 @@ void OpenGLRenderer::GetVendorInformation()
|
|||||||
forceLog_printf("GL_RENDERER: %s", glRendererString ? glRendererString : "unknown");
|
forceLog_printf("GL_RENDERER: %s", glRendererString ? glRendererString : "unknown");
|
||||||
forceLog_printf("GL_VERSION: %s", glVersionString ? glVersionString : "unknown");
|
forceLog_printf("GL_VERSION: %s", glVersionString ? glVersionString : "unknown");
|
||||||
|
|
||||||
if(boost::icontains(glVersionString, "Mesa") || IsRunningInWine())
|
if(boost::icontains(glVersionString, "Mesa"))
|
||||||
{
|
{
|
||||||
m_vendor = GfxVendor::Mesa;
|
m_vendor = GfxVendor::Mesa;
|
||||||
return;
|
return;
|
||||||
|
@ -197,7 +197,9 @@ void VulkanRenderer::DetermineVendor()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsRunningInWine())
|
VkDriverId driverId = driverProperties.driverID;
|
||||||
|
|
||||||
|
if(driverId == VK_DRIVER_ID_MESA_RADV || driverId == VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA)
|
||||||
m_vendor = GfxVendor::Mesa;
|
m_vendor = GfxVendor::Mesa;
|
||||||
|
|
||||||
forceLog_printf("Using GPU: %s", properties.properties.deviceName);
|
forceLog_printf("Using GPU: %s", properties.properties.deviceName);
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user