Created
January 14, 2015 05:03
-
-
Save Subv/0451d24cd54241493c82 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
diff --git a/externals/boost b/externals/boost | |
--- a/externals/boost | |
+++ b/externals/boost | |
@@ -1 +1 @@ | |
-Subproject commit a1afc91d3aaa3da06bdbc13c78613e1466653405 | |
+Subproject commit a1afc91d3aaa3da06bdbc13c78613e1466653405-dirty | |
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt | |
index 9aabd7e..c06cfd0 100644 | |
--- a/src/core/CMakeLists.txt | |
+++ b/src/core/CMakeLists.txt | |
@@ -37,10 +37,13 @@ set(SRCS | |
hle/service/act_u.cpp | |
hle/service/am_app.cpp | |
hle/service/am_net.cpp | |
+ hle/service/am_sys.cpp | |
hle/service/apt_a.cpp | |
hle/service/apt_s.cpp | |
hle/service/apt_u.cpp | |
+ hle/service/boss_p.cpp | |
hle/service/boss_u.cpp | |
+ hle/service/cecd_s.cpp | |
hle/service/cecd_u.cpp | |
hle/service/cfg/cfg.cpp | |
hle/service/cfg/cfg_i.cpp | |
@@ -49,19 +52,24 @@ set(SRCS | |
hle/service/csnd_snd.cpp | |
hle/service/dsp_dsp.cpp | |
hle/service/err_f.cpp | |
+ hle/service/frd_a.cpp | |
hle/service/frd_u.cpp | |
hle/service/fs/archive.cpp | |
hle/service/fs/fs_user.cpp | |
hle/service/gsp_gpu.cpp | |
+ hle/service/gsp_lcd.cpp | |
hle/service/hid_user.cpp | |
+ hle/service/hid_spvr.cpp | |
hle/service/http_c.cpp | |
hle/service/ir_rst.cpp | |
hle/service/ir_u.cpp | |
hle/service/ldr_ro.cpp | |
hle/service/mic_u.cpp | |
hle/service/ndm_u.cpp | |
+ hle/service/news_s.cpp | |
hle/service/news_u.cpp | |
hle/service/nim_aoc.cpp | |
+ hle/service/ns_s.cpp | |
hle/service/nwm_uds.cpp | |
hle/service/pm_app.cpp | |
hle/service/ptm_u.cpp | |
@@ -133,10 +141,13 @@ set(HEADERS | |
hle/service/act_u.h | |
hle/service/am_app.h | |
hle/service/am_net.h | |
+ hle/service/am_sys.h | |
hle/service/apt_a.h | |
hle/service/apt_s.h | |
hle/service/apt_u.h | |
+ hle/service/boss_p.h | |
hle/service/boss_u.h | |
+ hle/service/cecd_s.h | |
hle/service/cecd_u.h | |
hle/service/cfg/cfg.h | |
hle/service/cfg/cfg_i.h | |
@@ -145,19 +156,24 @@ set(HEADERS | |
hle/service/csnd_snd.h | |
hle/service/dsp_dsp.h | |
hle/service/err_f.h | |
+ hle/service/frd_a.h | |
hle/service/frd_u.h | |
hle/service/fs/archive.h | |
hle/service/fs/fs_user.h | |
hle/service/gsp_gpu.h | |
+ hle/service/gsp_lcd.h | |
hle/service/hid_user.h | |
+ hle/service/hid_spvr.h | |
hle/service/http_c.h | |
hle/service/ir_rst.h | |
hle/service/ir_u.h | |
hle/service/ldr_ro.h | |
hle/service/mic_u.h | |
hle/service/ndm_u.h | |
+ hle/service/news_s.h | |
hle/service/news_u.h | |
hle/service/nim_aoc.h | |
+ hle/service/ns_s.h | |
hle/service/nwm_uds.h | |
hle/service/pm_app.h | |
hle/service/ptm_u.h | |
diff --git a/src/core/hle/kernel/event.cpp b/src/core/hle/kernel/event.cpp | |
index 271190d..da2ecb1 100644 | |
--- a/src/core/hle/kernel/event.cpp | |
+++ b/src/core/hle/kernel/event.cpp | |
@@ -90,7 +90,7 @@ ResultCode SignalEvent(const Handle handle) { | |
for (size_t i = 0; i < evt->waiting_threads.size(); ++i) { | |
Thread* thread = Kernel::g_handle_table.Get<Thread>(evt->waiting_threads[i]).get(); | |
if (thread != nullptr) | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(evt); | |
// If any thread is signalled awake by this event, assume the event was "caught" and reset | |
// the event. This will result in the next thread waiting on the event to block. Otherwise, | |
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp | |
index 853a5dd..e0e77e3 100644 | |
--- a/src/core/hle/kernel/mutex.cpp | |
+++ b/src/core/hle/kernel/mutex.cpp | |
@@ -54,7 +54,7 @@ bool ReleaseMutexForThread(Mutex* mutex, Handle thread_handle) { | |
return false; | |
} | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(mutex); | |
return true; | |
} | |
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp | |
index 88ec9a1..762ad97 100644 | |
--- a/src/core/hle/kernel/semaphore.cpp | |
+++ b/src/core/hle/kernel/semaphore.cpp | |
@@ -86,7 +86,7 @@ ResultCode ReleaseSemaphore(s32* count, Handle handle, s32 release_count) { | |
while (!semaphore->waiting_threads.empty() && semaphore->IsAvailable()) { | |
Thread* thread = Kernel::g_handle_table.Get<Thread>(semaphore->waiting_threads.front()).get(); | |
if (thread != nullptr) | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(semaphore); | |
semaphore->waiting_threads.pop(); | |
--semaphore->available_count; | |
} | |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp | |
index bc86a7c..f6ecc2a 100644 | |
--- a/src/core/hle/kernel/thread.cpp | |
+++ b/src/core/hle/kernel/thread.cpp | |
@@ -68,7 +68,8 @@ static void ResetThread(Thread* t, u32 arg, s32 lowest_priority) { | |
t->current_priority = t->initial_priority; | |
} | |
t->wait_type = WAITTYPE_NONE; | |
- t->wait_object = nullptr; | |
+ t->wait_object.clear(); | |
+ t->object_wait_pos.clear(); | |
t->wait_address = 0; | |
} | |
@@ -95,7 +96,7 @@ static bool CheckWaitType(const Thread* thread, WaitType type) { | |
/// Check if a thread is blocking on a specified wait type with a specified handle | |
static bool CheckWaitType(const Thread* thread, WaitType type, Object* wait_object) { | |
- return CheckWaitType(thread, type) && wait_object == thread->wait_object; | |
+ return CheckWaitType(thread, type) && thread->wait_object.find(wait_object) != thread->wait_object.end(); | |
} | |
/// Check if a thread is blocking on a specified wait type with a specified handle and address | |
@@ -112,13 +113,14 @@ void Thread::Stop(const char* reason) { | |
status = THREADSTATUS_DORMANT; | |
for (auto& waiting_thread : waiting_threads) { | |
if (CheckWaitType(waiting_thread.get(), WAITTYPE_THREADEND, this)) | |
- waiting_thread->ResumeFromWait(); | |
+ waiting_thread->ResumeFromWait(this); | |
} | |
waiting_threads.clear(); | |
// Stopped threads are never waiting. | |
wait_type = WAITTYPE_NONE; | |
- wait_object = nullptr; | |
+ wait_object.clear(); | |
+ object_wait_pos.clear(); | |
wait_address = 0; | |
} | |
@@ -158,7 +160,7 @@ Thread* ArbitrateHighestPriorityThread(Object* arbiter, u32 address) { | |
// If a thread was arbitrated, resume it | |
if (nullptr != highest_priority_thread) { | |
- highest_priority_thread->ResumeFromWait(); | |
+ highest_priority_thread->ResumeFromWait(arbiter); | |
} | |
return highest_priority_thread; | |
@@ -170,7 +172,7 @@ void ArbitrateAllThreads(Object* arbiter, u32 address) { | |
// Iterate through threads, find highest priority thread that is waiting to be arbitrated... | |
for (auto& thread : thread_list) { | |
if (CheckWaitType(thread.get(), WAITTYPE_ARB, arbiter, address)) | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(arbiter); | |
} | |
} | |
@@ -226,7 +228,7 @@ static Thread* NextThread() { | |
void WaitCurrentThread(WaitType wait_type, Object* wait_object) { | |
Thread* thread = GetCurrentThread(); | |
thread->wait_type = wait_type; | |
- thread->wait_object = wait_object; | |
+ thread->wait_object.insert(wait_object); | |
ChangeThreadState(thread, ThreadStatus(THREADSTATUS_WAIT | (thread->status & THREADSTATUS_SUSPEND))); | |
} | |
@@ -247,7 +249,7 @@ static void ThreadWakeupCallback(u64 parameter, int cycles_late) { | |
return; | |
} | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(nullptr); | |
} | |
@@ -262,13 +264,23 @@ void WakeThreadAfterDelay(Thread* thread, s64 nanoseconds) { | |
} | |
/// Resumes a thread from waiting by marking it as "ready" | |
-void Thread::ResumeFromWait() { | |
+void Thread::ResumeFromWait(Kernel::Object* object) { | |
+ | |
+ if (wait_type == WAITTYPE_SYNCHN_ALL && !wait_object.empty()) | |
+ return; | |
+ | |
// Cancel any outstanding wakeup events | |
CoreTiming::UnscheduleEvent(ThreadWakeupEventType, GetHandle()); | |
+ if (wait_type == WAITTYPE_SYNCHN) | |
+ context.cpu_registers[1] = object_wait_pos[object]; | |
+ else if (wait_type == WAITTYPE_SYNCHN_ALL) | |
+ context.cpu_registers[1] = object_wait_pos.size(); | |
+ | |
status &= ~THREADSTATUS_WAIT; | |
- wait_object = nullptr; | |
wait_type = WAITTYPE_NONE; | |
+ wait_object.clear(); | |
+ object_wait_pos.clear(); | |
if (!(status & (THREADSTATUS_WAITSUSPEND | THREADSTATUS_DORMANT | THREADSTATUS_DEAD))) { | |
ChangeReadyState(this, true); | |
} | |
@@ -335,7 +347,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |
thread->initial_priority = thread->current_priority = priority; | |
thread->processor_id = processor_id; | |
thread->wait_type = WAITTYPE_NONE; | |
- thread->wait_object = nullptr; | |
+ thread->wait_object.clear(); | |
thread->wait_address = 0; | |
thread->name = std::move(name); | |
@@ -418,11 +430,11 @@ void Reschedule() { | |
} else { | |
LOG_TRACE(Kernel, "cannot context switch from 0x%08X, no higher priority thread!", prev->GetHandle()); | |
- for (auto& thread : thread_list) { | |
+ /*for (auto& thread : thread_list) { | |
LOG_TRACE(Kernel, "\thandle=0x%08X prio=0x%02X, status=0x%08X wait_type=0x%08X wait_handle=0x%08X", | |
thread->GetHandle(), thread->current_priority, thread->status, thread->wait_type, | |
(thread->wait_object ? thread->wait_object->GetHandle() : INVALID_HANDLE)); | |
- } | |
+ }*/ | |
} | |
} | |
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h | |
index 284dec4..0c689e8 100644 | |
--- a/src/core/hle/kernel/thread.h | |
+++ b/src/core/hle/kernel/thread.h | |
@@ -6,6 +6,8 @@ | |
#include <string> | |
#include <vector> | |
+#include <set> | |
+#include <unordered_map> | |
#include "common/common_types.h" | |
@@ -46,6 +48,8 @@ enum WaitType { | |
WAITTYPE_THREADEND, | |
WAITTYPE_MUTEX, | |
WAITTYPE_SYNCH, | |
+ WAITTYPE_SYNCHN, | |
+ WAITTYPE_SYNCHN_ALL, | |
WAITTYPE_ARB, | |
WAITTYPE_TIMER, | |
}; | |
@@ -79,7 +83,7 @@ public: | |
void Stop(const char* reason); | |
/// Resumes a thread from waiting by marking it as "ready". | |
- void ResumeFromWait(); | |
+ void ResumeFromWait(Kernel::Object* object); | |
Core::ThreadContext context; | |
@@ -96,7 +100,8 @@ public: | |
s32 processor_id; | |
WaitType wait_type; | |
- Object* wait_object; | |
+ std::set<Object*> wait_object; | |
+ std::unordered_map<Object*, int> object_wait_pos; | |
VAddr wait_address; | |
std::vector<SharedPtr<Thread>> waiting_threads; | |
diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp | |
index 3b0452d..d184795 100644 | |
--- a/src/core/hle/kernel/timer.cpp | |
+++ b/src/core/hle/kernel/timer.cpp | |
@@ -94,7 +94,7 @@ static void TimerCallback(u64 timer_handle, int cycles_late) { | |
// Resume all waiting threads | |
for (Handle thread_handle : timer->waiting_threads) { | |
if (SharedPtr<Thread> thread = Kernel::g_handle_table.Get<Thread>(thread_handle)) | |
- thread->ResumeFromWait(); | |
+ thread->ResumeFromWait(timer.get()); | |
} | |
timer->waiting_threads.clear(); | |
diff --git a/src/core/hle/service/apt_s.cpp b/src/core/hle/service/apt_s.cpp | |
index f4599e1..0f2395b 100644 | |
--- a/src/core/hle/service/apt_s.cpp | |
+++ b/src/core/hle/service/apt_s.cpp | |
@@ -24,10 +24,17 @@ namespace APT_U { | |
extern void AppletUtility(Service::Interface* self); | |
extern void GlanceParameter(Service::Interface* self); | |
extern void ReceiveParameter(Service::Interface* self); | |
+ extern void NotifyToWait(Service::Interface* self); | |
+ extern void IsRegistered(Service::Interface* self); | |
} | |
namespace APT_S { | |
+void ReplySleepQuery(Service::Interface* self) { | |
+ u32* cmd_buff = Kernel::GetCommandBuffer(); | |
+ cmd_buff[1] = 0; | |
+} | |
+ | |
const Interface::FunctionInfo FunctionTable[] = { | |
{0x00010040, APT_U::GetLockHandle, "GetLockHandle"}, | |
{0x00020080, APT_U::Initialize, "Initialize"}, | |
@@ -37,7 +44,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |
{0x00060040, nullptr, "GetAppletInfo"}, | |
{0x00070000, nullptr, "GetLastSignaledAppletId"}, | |
{0x00080000, nullptr, "CountRegisteredApplet"}, | |
- {0x00090040, nullptr, "IsRegistered"}, | |
+ {0x00090040, APT_U::IsRegistered, "IsRegistered"}, | |
{0x000A0040, nullptr, "GetAttribute"}, | |
{0x000B0040, APT_U::InquireNotification, "InquireNotification"}, | |
{0x000C0104, nullptr, "SendParameter"}, | |
@@ -90,12 +97,12 @@ const Interface::FunctionInfo FunctionTable[] = { | |
{0x003B0040, nullptr, "CancelLibraryApplet"}, | |
{0x003C0042, nullptr, "SendDspSleep"}, | |
{0x003D0042, nullptr, "SendDspWakeUp"}, | |
- {0x003E0080, nullptr, "ReplySleepQuery"}, | |
+ {0x003E0080, ReplySleepQuery, "ReplySleepQuery"}, | |
{0x003F0040, nullptr, "ReplySleepNotificationComplete"}, | |
{0x00400042, nullptr, "SendCaptureBufferInfo"}, | |
{0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, | |
{0x00420080, nullptr, "SleepSystem"}, | |
- {0x00430040, nullptr, "NotifyToWait"}, | |
+ {0x00430040, APT_U::NotifyToWait, "NotifyToWait"}, | |
{0x00440000, APT_U::GetSharedFont, "GetSharedFont"}, | |
{0x00450040, nullptr, "GetWirelessRebootInfo"}, | |
{0x00460104, nullptr, "Wrap"}, | |
diff --git a/src/core/hle/service/apt_u.cpp b/src/core/hle/service/apt_u.cpp | |
index 9729b10..199b795 100644 | |
--- a/src/core/hle/service/apt_u.cpp | |
+++ b/src/core/hle/service/apt_u.cpp | |
@@ -224,6 +224,12 @@ void GetSharedFont(Service::Interface* self) { | |
} | |
} | |
+void IsRegistered(Service::Interface* self) { | |
+ u32* cmd_buff = Kernel::GetCommandBuffer(); | |
+ cmd_buff[1] = 0; | |
+ cmd_buff[2] = 1; | |
+} | |
+ | |
const Interface::FunctionInfo FunctionTable[] = { | |
{0x00010040, GetLockHandle, "GetLockHandle"}, | |
{0x00020080, Initialize, "Initialize"}, | |
@@ -233,7 +239,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |
{0x00060040, nullptr, "GetAppletInfo"}, | |
{0x00070000, nullptr, "GetLastSignaledAppletId"}, | |
{0x00080000, nullptr, "CountRegisteredApplet"}, | |
- {0x00090040, nullptr, "IsRegistered"}, | |
+ {0x00090040, IsRegistered, "IsRegistered"}, | |
{0x000A0040, nullptr, "GetAttribute"}, | |
{0x000B0040, InquireNotification, "InquireNotification"}, | |
{0x000C0104, nullptr, "SendParameter"}, | |
diff --git a/src/core/hle/service/cfg/cfg_s.cpp b/src/core/hle/service/cfg/cfg_s.cpp | |
index cf4e821..d38e524 100644 | |
--- a/src/core/hle/service/cfg/cfg_s.cpp | |
+++ b/src/core/hle/service/cfg/cfg_s.cpp | |
@@ -74,9 +74,15 @@ static void UpdateConfigNANDSavegame(Service::Interface* self) { | |
cmd_buffer[1] = Service::CFG::UpdateConfigNANDSavegame().raw; | |
} | |
+static void SecureInfoGetRegion(Service::Interface* self) { | |
+ u32* cmd_buffer = Kernel::GetCommandBuffer(); | |
+ cmd_buffer[1] = 0; | |
+ cmd_buffer[2] = 1; | |
+} | |
+ | |
const Interface::FunctionInfo FunctionTable[] = { | |
{0x00010082, GetConfigInfoBlk2, "GetConfigInfoBlk2"}, | |
- {0x00020000, nullptr, "SecureInfoGetRegion"}, | |
+ {0x00020000, SecureInfoGetRegion, "SecureInfoGetRegion"}, | |
{0x04010082, GetConfigInfoBlk8, "GetConfigInfoBlk8"}, | |
{0x04020082, nullptr, "SetConfigInfoBlk4"}, | |
{0x04030000, UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"}, | |
diff --git a/src/core/hle/service/ptm_sysm.cpp b/src/core/hle/service/ptm_sysm.cpp | |
index 4b5f86a..5abde9b 100644 | |
--- a/src/core/hle/service/ptm_sysm.cpp | |
+++ b/src/core/hle/service/ptm_sysm.cpp | |
@@ -13,6 +13,11 @@ | |
namespace PTM_SYSM { | |
+void GetShellStatus(Service::Interface* self) { | |
+ u32* cmd_buff = Kernel::GetCommandBuffer(); | |
+ cmd_buff[1] = 0; | |
+} | |
+ | |
const Interface::FunctionInfo FunctionTable[] = { | |
{0x040100C0, nullptr, "SetRtcAlarmEx"}, | |
{0x04020042, nullptr, "ReplySleepQuery"}, | |
@@ -40,7 +45,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |
{0x080E0140, nullptr, "NotifyPlayEvent"}, | |
{0x080F0000, nullptr, "IsLegacyPowerOff"}, | |
{0x08100000, nullptr, "ClearLegacyPowerOff"}, | |
- {0x08110000, nullptr, "GetShellStatus"}, | |
+ {0x08110000, GetShellStatus, "GetShellStatus"}, | |
{0x08120000, nullptr, "IsShutdownByBatteryEmpty"}, | |
{0x08130000, nullptr, "FormatSavedata"}, | |
{0x08140000, nullptr, "GetLegacyJumpProhibitedFlag"} | |
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp | |
index 5c6a3be..9e2651b 100644 | |
--- a/src/core/hle/svc.cpp | |
+++ b/src/core/hle/svc.cpp | |
@@ -164,18 +164,27 @@ static Result WaitSynchronizationN(s32* out, Handle* handles, s32 handle_count, | |
bool wait = wait_result.Succeeded() && *wait_result; | |
if (!wait && !wait_all) { | |
+ Kernel::GetCurrentThread()->wait_object.clear(); | |
+ Kernel::GetCurrentThread()->object_wait_pos.clear(); | |
+ Kernel::GetCurrentThread()->wait_type = WAITTYPE_NONE; | |
*out = i; | |
return RESULT_SUCCESS.raw; | |
} else { | |
+ Kernel::GetCurrentThread()->object_wait_pos[object.get()] = i; | |
unlock_all = false; | |
} | |
} | |
if (wait_all && unlock_all) { | |
*out = handle_count; | |
+ Kernel::GetCurrentThread()->wait_object.clear(); | |
+ Kernel::GetCurrentThread()->object_wait_pos.clear(); | |
+ Kernel::GetCurrentThread()->wait_type = WAITTYPE_NONE; | |
return RESULT_SUCCESS.raw; | |
} | |
+ Kernel::GetCurrentThread()->wait_type = wait_all ? WAITTYPE_SYNCHN_ALL : WAITTYPE_SYNCHN; | |
+ | |
// Check for next thread to schedule | |
HLE::Reschedule(__func__); | |
diff --git a/src/core/hw/gpu.cpp b/src/core/hw/gpu.cpp | |
index 3b730a0..e176b02 100644 | |
--- a/src/core/hw/gpu.cpp | |
+++ b/src/core/hw/gpu.cpp | |
@@ -114,7 +114,7 @@ inline void Write(u32 addr, const T data) { | |
} | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown source framebuffer format %x", config.input_format.Value()); | |
+ //LOG_ERROR(HW_GPU, "Unknown source framebuffer format %x", config.input_format.Value()); | |
break; | |
} | |
@@ -141,7 +141,7 @@ inline void Write(u32 addr, const T data) { | |
} | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown destination framebuffer format %x", config.output_format.Value()); | |
+ //LOG_ERROR(HW_GPU, "Unknown destination framebuffer format %x", config.output_format.Value()); | |
break; | |
} | |
} | |
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp | |
index 025d4e4..440d9c2 100644 | |
--- a/src/video_core/rasterizer.cpp | |
+++ b/src/video_core/rasterizer.cpp | |
@@ -231,8 +231,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return (int)(((unsigned)val) % size); | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return 0; | |
} | |
}; | |
@@ -281,8 +281,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return combiner_output; | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown color combiner source %d\n", (int)source); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown color combiner source %d\n", (int)source); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return {}; | |
} | |
}; | |
@@ -308,8 +308,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return combiner_output.a(); | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown alpha combiner source %d\n", (int)source); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown alpha combiner source %d\n", (int)source); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return 0; | |
} | |
}; | |
@@ -327,8 +327,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return { values.a(), values.a(), values.a() }; | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown color factor %d\n", (int)factor); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown color factor %d\n", (int)factor); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return {}; | |
} | |
}; | |
@@ -342,8 +342,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return 255 - value; | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown alpha factor %d\n", (int)factor); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown alpha factor %d\n", (int)factor); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return 0; | |
} | |
}; | |
@@ -378,8 +378,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
} | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown color combiner operation %d\n", (int)op); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown color combiner operation %d\n", (int)op); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return {}; | |
} | |
}; | |
@@ -402,8 +402,8 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |
return std::max(0, (int)input[0] - (int)input[1]); | |
default: | |
- LOG_ERROR(HW_GPU, "Unknown alpha combiner operation %d\n", (int)op); | |
- _dbg_assert_(HW_GPU, 0); | |
+ //LOG_ERROR(HW_GPU, "Unknown alpha combiner operation %d\n", (int)op); | |
+ //_dbg_assert_(HW_GPU, 0); | |
return 0; | |
} | |
}; | |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp | |
index 29d220e..a30871e 100644 | |
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp | |
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |
@@ -214,6 +214,7 @@ void RendererOpenGL::DrawScreens() { | |
DrawSingleScreenRotated(textures[0], top_x, 0, | |
(float)VideoCore::kScreenTopWidth, (float)VideoCore::kScreenTopHeight); | |
+ glFlush(); | |
DrawSingleScreenRotated(textures[1], bottom_x, (float)VideoCore::kScreenTopHeight, | |
(float)VideoCore::kScreenBottomWidth, (float)VideoCore::kScreenBottomHeight); | |
diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp | |
index 4897738..603d2d4 100644 | |
--- a/src/video_core/vertex_shader.cpp | |
+++ b/src/video_core/vertex_shader.cpp | |
@@ -340,9 +340,9 @@ static void ProcessShaderCode(VertexShaderState& state) { | |
break; | |
default: | |
- LOG_ERROR(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x", | |
+ /*LOG_ERROR(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x", | |
(int)instr.opcode.Value(), instr.opcode.GetInfo().name, instr.hex); | |
- _dbg_assert_(HW_GPU, 0); | |
+ _dbg_assert_(HW_GPU, 0);*/ | |
break; | |
} | |
@@ -519,8 +519,8 @@ static void ProcessShaderCode(VertexShaderState& state) { | |
} | |
default: | |
- LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", | |
- (int)instr.opcode.Value(), instr.opcode.GetInfo().name, instr.hex); | |
+ /*LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", | |
+ (int)instr.opcode.Value(), instr.opcode.GetInfo().name, instr.hex);*/ | |
break; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment