arm/video: Fix shader extension and exception handling

Two main changes in this commit:

1. Replace NVIDIA-specific GL_NV_gpu_shader5 extension with the more widely
   supported GL_EXT_shader_explicit_arithmetic_types_float16 in the scaleforce
   shader. This improves compatibility across different GPU vendors.

2. Refactor ARM32 exception handling:
   - Restructure exception cases for better readability
   - Update exception handling to match current Dynarmic API
   - Fix indentation in switch statement
   - Remove AccessViolation case as it's no longer supported in current API

These changes improve shader compatibility and align the exception handling
with the current Dynarmic implementation.
This commit is contained in:
Zephyron 2025-01-18 19:09:03 +10:00
parent 450d80fc81
commit d4d3061eb7
2 changed files with 18 additions and 20 deletions

View file

@ -91,17 +91,15 @@ public:
void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override {
switch (exception) {
case Dynarmic::A32::Exception::UndefinedInstruction:
LOG_CRITICAL(Core_ARM, "Undefined instruction at PC = 0x{:08X}", pc);
m_parent.GetContext(m_parent.m_breakpoint_context);
m_parent.m_jit->HaltExecution(DataAbort);
break;
case Dynarmic::A32::Exception::NoExecuteFault:
LOG_CRITICAL(Core_ARM, "Cannot execute instruction at unmapped address {:#08x}", pc);
ReturnException(pc, PrefetchAbort);
return;
case Dynarmic::A32::Exception::AccessViolation:
if (pc == 0 || pc < 0x1000) {
LOG_CRITICAL(Core_ARM, "Null pointer dereference at {:#08x}", pc);
ReturnException(pc, DataAbort);
return;
}
[[fallthrough]];
default:
if (m_debugger_enabled) {
ReturnException(pc, InstructionBreakpoint);

View file

@ -10,7 +10,7 @@
#ifdef CITRON_USE_FP16
#extension GL_AMD_gpu_shader_half_float : enable
#extension GL_NV_gpu_shader5 : enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
#define lfloat float16_t
#define lvec2 f16vec2