From f5795a68a7fe5249ac5e6dd1deb6996cfdfac4dd Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 6 Mar 2015 00:24:39 -0800 Subject: [PATCH 1/3] Make compilable under VS2015 --- Core/HLE/sceRtc.cpp | 16 ++++++++-------- GPU/Software/Rasterizer.cpp | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Core/HLE/sceRtc.cpp b/Core/HLE/sceRtc.cpp index 11783199b1..9a80368098 100644 --- a/Core/HLE/sceRtc.cpp +++ b/Core/HLE/sceRtc.cpp @@ -459,12 +459,12 @@ static int sceRtcConvertLocalTimeToUTC(u32 tickLocalPtr,u32 tickUTCPtr) { u64 srcTick = Memory::Read_U64(tickLocalPtr); // TODO : Let the user select his timezone / daylight saving instead of taking system param ? -#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) +#if !defined(_MSC_VER) time_t timezone = 0; tm *time = localtime(&timezone); srcTick -= time->tm_gmtoff*1000000ULL; #else - srcTick -= -timezone * 1000000ULL; + srcTick -= -_timezone * 1000000ULL; #endif Memory::Write_U64(srcTick, tickUTCPtr); } @@ -482,12 +482,12 @@ static int sceRtcConvertUtcToLocalTime(u32 tickUTCPtr,u32 tickLocalPtr) { u64 srcTick = Memory::Read_U64(tickUTCPtr); // TODO : Let the user select his timezone / daylight saving instead of taking system param ? -#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) +#if !defined(_MSC_VER) time_t timezone = 0; tm *time = localtime(&timezone); srcTick += time->tm_gmtoff*1000000ULL; #else - srcTick += -timezone * 1000000ULL; + srcTick += -_timezone * 1000000ULL; #endif Memory::Write_U64(srcTick, tickLocalPtr); } @@ -1015,12 +1015,12 @@ static int sceRtcFormatRFC2822LocalTime(u32 outPtr, u32 srcTickPtr) } int tz_seconds; -#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) +#if !defined(_MSC_VER) time_t timezone = 0; tm *time = localtime(&timezone); tz_seconds = time->tm_gmtoff; #else - tz_seconds = -timezone; + tz_seconds = -_timezone; #endif DEBUG_LOG(SCERTC, "sceRtcFormatRFC2822LocalTime(%08x, %08x)", outPtr, srcTickPtr); @@ -1050,12 +1050,12 @@ static int sceRtcFormatRFC3339LocalTime(u32 outPtr, u32 srcTickPtr) } int tz_seconds; -#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) +#if !defined(_MSC_VER) time_t timezone = 0; tm *time = localtime(&timezone); tz_seconds = time->tm_gmtoff; #else - tz_seconds = -timezone; + tz_seconds = -_timezone; #endif DEBUG_LOG(SCERTC, "sceRtcFormatRFC3339LocalTime(%08x, %08x)", outPtr, srcTickPtr); diff --git a/GPU/Software/Rasterizer.cpp b/GPU/Software/Rasterizer.cpp index a113dcea2b..a06015e905 100644 --- a/GPU/Software/Rasterizer.cpp +++ b/GPU/Software/Rasterizer.cpp @@ -1309,14 +1309,24 @@ void DrawTriangle(const VertexData& v0, const VertexData& v1, const VertexData& int range = (maxY - minY) / 16 + 1; if (gstate.isModeClear()) { if (range >= 24 && (maxX - minX) >= 24 * 16) - GlobalThreadPool::Loop(std::bind(&DrawTriangleSlice, v0, v1, v2, minX, minY, maxX, maxY, placeholder::_1, placeholder::_2), 0, range); + { + auto bound = [&](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; + GlobalThreadPool::Loop(bound, 0, range); + } else + { DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, 0, range); + } } else { if (range >= 24 && (maxX - minX) >= 24 * 16) - GlobalThreadPool::Loop(std::bind(&DrawTriangleSlice, v0, v1, v2, minX, minY, maxX, maxY, placeholder::_1, placeholder::_2), 0, range); + { + auto bound = [&](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; + GlobalThreadPool::Loop(bound, 0, range); + } else + { DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, 0, range); + } } } From 594ed65bd36f208c884ac7980fdb5e89605812f4 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 6 Mar 2015 21:49:04 +0100 Subject: [PATCH 2/3] use the timezone value for non GLIB, non MSVC platforms --- Core/HLE/sceRtc.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Core/HLE/sceRtc.cpp b/Core/HLE/sceRtc.cpp index 9a80368098..d9be62ef84 100644 --- a/Core/HLE/sceRtc.cpp +++ b/Core/HLE/sceRtc.cpp @@ -459,12 +459,16 @@ static int sceRtcConvertLocalTimeToUTC(u32 tickLocalPtr,u32 tickUTCPtr) { u64 srcTick = Memory::Read_U64(tickLocalPtr); // TODO : Let the user select his timezone / daylight saving instead of taking system param ? -#if !defined(_MSC_VER) +#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) time_t timezone = 0; tm *time = localtime(&timezone); srcTick -= time->tm_gmtoff*1000000ULL; +#elif defined(_MSC_VER) + long timezone_val; + _get_timezone(&timezone_val); + srcTick -= -timezone_val * 1000000ULL; #else - srcTick -= -_timezone * 1000000ULL; + srcTick -= -timezone * 1000000ULL; #endif Memory::Write_U64(srcTick, tickUTCPtr); } @@ -482,12 +486,16 @@ static int sceRtcConvertUtcToLocalTime(u32 tickUTCPtr,u32 tickLocalPtr) { u64 srcTick = Memory::Read_U64(tickUTCPtr); // TODO : Let the user select his timezone / daylight saving instead of taking system param ? -#if !defined(_MSC_VER) +#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) time_t timezone = 0; tm *time = localtime(&timezone); srcTick += time->tm_gmtoff*1000000ULL; +#elif defined(_MSC_VER) + long timezone_val; + _get_timezone(&timezone_val); + srcTick += -timezone_val * 1000000ULL; #else - srcTick += -_timezone * 1000000ULL; + srcTick += -timezone * 1000000ULL; #endif Memory::Write_U64(srcTick, tickLocalPtr); } @@ -1015,12 +1023,16 @@ static int sceRtcFormatRFC2822LocalTime(u32 outPtr, u32 srcTickPtr) } int tz_seconds; -#if !defined(_MSC_VER) +#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) time_t timezone = 0; tm *time = localtime(&timezone); tz_seconds = time->tm_gmtoff; +#elif defined(_MSC_VER) + long timezone_val; + _get_timezone(&timezone_val); + tz_seconds = -timezone_val; #else - tz_seconds = -_timezone; + tz_seconds = -timezone; #endif DEBUG_LOG(SCERTC, "sceRtcFormatRFC2822LocalTime(%08x, %08x)", outPtr, srcTickPtr); @@ -1050,12 +1062,16 @@ static int sceRtcFormatRFC3339LocalTime(u32 outPtr, u32 srcTickPtr) } int tz_seconds; -#if !defined(_MSC_VER) +#if defined(__GLIBC__) || defined(BLACKBERRY) || defined(__SYMBIAN32__) time_t timezone = 0; tm *time = localtime(&timezone); tz_seconds = time->tm_gmtoff; +#elif defined(_MSC_VER) + long timezone_val; + _get_timezone(&timezone_val); + tz_seconds = -timezone_val; #else - tz_seconds = -_timezone; + tz_seconds = -timezone; #endif DEBUG_LOG(SCERTC, "sceRtcFormatRFC3339LocalTime(%08x, %08x)", outPtr, srcTickPtr); From 3ada9887403df9299af5402c5bf079475d34986e Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 6 Mar 2015 22:10:10 +0100 Subject: [PATCH 3/3] capture by value, since the dispatch seems asynchronous --- GPU/Software/Rasterizer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GPU/Software/Rasterizer.cpp b/GPU/Software/Rasterizer.cpp index a06015e905..e02e2b225d 100644 --- a/GPU/Software/Rasterizer.cpp +++ b/GPU/Software/Rasterizer.cpp @@ -1310,7 +1310,7 @@ void DrawTriangle(const VertexData& v0, const VertexData& v1, const VertexData& if (gstate.isModeClear()) { if (range >= 24 && (maxX - minX) >= 24 * 16) { - auto bound = [&](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; + auto bound = [=](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; GlobalThreadPool::Loop(bound, 0, range); } else @@ -1320,7 +1320,7 @@ void DrawTriangle(const VertexData& v0, const VertexData& v1, const VertexData& } else { if (range >= 24 && (maxX - minX) >= 24 * 16) { - auto bound = [&](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; + auto bound = [=](int a, int b) -> void {DrawTriangleSlice(v0, v1, v2, minX, minY, maxX, maxY, a, b); }; GlobalThreadPool::Loop(bound, 0, range); } else