aboutsummaryrefslogtreecommitdiff
path: root/src/GPU3D.cpp
Commit message (Collapse)AuthorAge
* Fix Incorrect Polygon Swapping Behavior and Implement Correct Rules for ↵Jaklyy2023-08-27
| | | | | | | | | | | | | | Shifting Right Edges Left (#1816) * fix polygons being swapped incorrectly "borrowed" this from noods needs verification that the >= and <= signs aren't actually supposed to be > and < * proper rules for moving vertical right slopes left * nvm most of that was actually pointless that's on me for not checking
* Assorted portability enhancements (#1800)Jesse Talavera-Greenberg2023-08-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Introduce some Platform calls for managing dynamic libraries * Add Platform::WriteFATSectors * Introduce some Platform calls for managing dynamic libraries * Add Platform::WriteFATSectors * Change includes of "../types.h" to "types.h" - Makes it easier to directly include these headers in downstream projects * Change an include of "../Wifi.h" to "Wifi.h" * Allow CommonFuncs.cpp to compile on Android * Tidy up some logging calls - Use Platform::Log in LAN_Socket.cpp - Soften some warnings to Debug logs (since they don't necessarily represent problems) * Add Platform::EnterGBAMode - Gracefully stop the emulator if trying to enter GBA mode * Soften some logs that most players won't care about * Soften some more logs * Introduce Platform wrappers for file operations * Fix pointer spacing * Fix more style nits * Log the errno when ftruncate fails * Fix FileSeek offset argument - With an s32 offset, we couldn't access files larger than 2GB * Revise Platform::StopEmu to address feedback - Remove Platform::EnterGBAMode in favor of adding a reason to Platform::StopEmu - Also rename Platform::StopEmu to Platform::SignalStop - Add an optional argument to NDS::Stop - Use the new argument everywhere that the console stops itself * Rename FileGetString to FileReadLine - It conveys the meaning better * Rename FileSeekOrigin::Set to Start - It conveys the meaning better * Change definition of FileGetString to FileReadLine - Oops, almost forgot it * Rename FlushFile to FileFlush - To remain consistent with the other File functions * Add a FileType usage * Fix line break in FileSeekOrigin * Document Platform::DeInit * Clarify that StopReason::Unknown doesn't always mean an error * Move and document FileType::HostFile * Remove Platform::OpenDataFile - Nothing currently uses it * Refactor Platform::OpenFile and Platform::OpenLocalFile to accept a FileMode enum instead of a string - The enum is converted to fopen flags under the hood - The file type is used to decide whether to add the "b" flag - Some helper functions are exposed for the benefit of consistent behavior among frontends - Equivalent behavior is maintained * Fix a tab that should be spaces * Use Windows' 64-bit implementations of fseek/ftell * Move Platform::IsBinaryFile to Platform.cpp - It could vary by frontend * Remove an unused FileType * Rename an enum constant * Document various Platform items * Use Platform::DynamicLibrary to load libandroid - And clean it up at the end * Fix a typo * Pass the correct filetype to FATStorage - Since it can be used for DSI NAND images or for SD cards * Remove Platform::FileType
* Implement in-memory savestates (#1693)Jesse Talavera-Greenberg2023-06-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Refactor Savestate::Var{8,16,32,64} - They now delegate to VarArray - They're declared in the class header so they're likely to be inlined * First crack at refactoring Savestate to work in-memory - Well, third, but who's counting? * Implement Savestate::Finish * Remove the VersionMajor and VersionMinor fields - Instead, pull their values directly from the savestate buffer * Mark a new constructor as explicit * Rename Reset to Rewind * Fix a linebreak * Implement Savestate::Rewind * Add ROMManager::ClearBackupState * Refactor ROMManager to use the refactored Savestate * Capitalize "Least" - It was driving me nuts * Add a log call * Increase default Savestate buffer length to 32MB * Use C-style file I/O instead of C++-style - Dumping bytes to a file with C++'s standard library is a MONSTROUS PAIN IN THE ASS * Quote the savestate's file path for clarity * Write the savestate's length into the header * Add some extra logging calls * Fix section-loading * Remove the deprecated Savestate constructor * Convert a char* to a u32 with memcpy, not a cast * Fix section-handling in loads * Include <cstring> in Savestate.h - This was causing a build error on Linux
* Introduce `Platform::Log` (#1640)Jesse Talavera-Greenberg2023-03-23
| | | | | | | | | | | | | * Add Platform::Log and Platform::LogLevel * Replace most printf calls with Platform::Log calls * Move a brace down * Move some log entries to one Log call - Some implementations of Log may assume a full line * Log the MAC address as LogLevel::Info
* update copyright headersArisotura2022-01-09
|
* finally decouple Config from the core. baahhahahahahArisotura2021-11-18
|
* handle changed VCount+threaded rasteriser more gracefullyRSDuck2021-08-04
|
* Fix some compiler warningsWaluigiWare642021-05-03
|
* update copyright year and add missing GPL headersRSDuck2021-03-12
|
* Allow for a more modular renderer backends (#990)Wunk2021-02-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Draft GPU3D renderer modularization * Update sources C++ standard to C++17 The top-level `CMakeLists.txt` is already using the C++17 standard. * Move GLCompositor into class type Some other misc fixes to push towards better modularity * Make renderer-implementation types move-only These types are going to be holding onto handles of GPU-side resources and shouldn't ever be copied around. * Fix OSX: Remove 'register' storage class specifier `register` has been removed in C++17... But this keyword hasn't done anything in years anyways. OSX builds consider this "warning" an error and it stops the whole build. * Add RestartFrame to Renderer3D interface * Move Accelerated property to Renderer3D interface There are points in the code base where we do: `renderer != 0` to know if we are feeding an openGL renderer. Rather than that we can instead just have this be a property of the renderer itself. With this pattern a renderer can just say how it wants its data to come in rather than have everyone know that they're talking to an OpenGL renderer. * Remove Accelerated flag from GPU * Move 2D_Soft interface in separate header Also make the current 2D engine an "owned" unique_ptr. * Update alignment attribute to standard alignas Uses standardized `alignas` rather than compiler-specific attributes. https://en.cppreference.com/w/cpp/language/alignas * Fix Clang: alignas specifier Alignment must be specified before the array to align the entire array. https://en.cppreference.com/w/cpp/language/alignas * Converted Renderer3D Accelerated to variable This flag is checked a lot during scanline rasterization. So rather than having an expensive vtable-lookup call during mainline rendering code, it is now a public constant bool type that is written to only once during Renderer3D initialization.
* fixes to the threadedness of the sw rasteriserRSDuck2021-01-26
| | | | also fix #639 and fix #880
* GX: fix vector testRSDuck2021-01-04
| | | | | after I broke it in d2c04c5c511cca3daeed292a397a5ae8ae2aa6a7 fixes Mario & Luigi Partners in Time
* make FIFO size static whene possibleRSDuck2020-12-30
|
* GX: add fastpath for single parameter cmdsRSDuck2020-12-30
|
* fix segfault for build with OpenGL disabledRSDuck2020-12-14
|
* GPU: forward BG0HOFS to internal rendering engine register for 3D layer ↵Arisotura2020-12-10
| | | | | | | | scroll (only when the rendering engine is enabled). fixes #840 thank you RSDuck and Hydr8gon for your insight into this.
* add cur vertex and light information to savestateRSDuck2020-12-09
|
* Merge vram dirty trackingRSDuck2020-11-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Squashed commit of the following: commit b463a05d4b909372f0cd1ad91caa0c77a25e5901 Author: RSDuck <rsduck@users.noreply.github.com> Date: Mon Nov 30 01:55:35 2020 +0100 minor fix commit ce73cebbdf5da243d7ebade82d8799ded9cd6b28 Author: RSDuck <rsduck@users.noreply.github.com> Date: Mon Nov 30 00:43:08 2020 +0100 fix dirty flags of BG/OBJ mappings not being reset commit fc5d73a6178e3adc444398bdd23de8314b5ca8f8 Author: RSDuck <rsduck@users.noreply.github.com> Date: Mon Nov 30 00:11:13 2020 +0100 use flat vram for gpu2d everywhere commit 34ee9fe2bf04fcfa2a5a1c8d78d70007e606f1a2 Author: RSDuck <rsduck@users.noreply.github.com> Date: Sat Nov 28 19:10:34 2020 +0100 mark VRAM dirty for display capture commit e8778fa2f429c6df0eece19d6a5ee83ae23a0cf4 Author: RSDuck <rsduck@users.noreply.github.com> Date: Sat Nov 28 18:59:31 2020 +0100 use flat VRAM for textures and texpals also skip rendering if nothing changed and a bunch of fixes commit 53f2041e2e1a28b35702a2ed51de885c36689f71 Author: RSDuck <rsduck@users.noreply.github.com> Date: Fri Nov 27 18:29:56 2020 +0100 use vram dirty tracking for extpals also preparations to take this further commit 4cdfa329e95aed26d3b21319c8fd86a04abf20f7 Author: RSDuck <rsduck@users.noreply.github.com> Date: Mon Nov 16 23:32:22 2020 +0100 VRAM dirty tracking
* make OpenGL renderer a build optionRSDuck2020-10-01
| | | | mostly meant for the Switch port
* remove some UBRSDuck2020-09-04
| | | | | | | - savestates used to read a four bytes from a single byte value - a few unassigned variables - some other things - also make the ROR macro an inline function
* 3D: add a bunch of missing variables to savestates. oops.Arisotura2020-08-19
| | | | fixes #716
* * rework GPU's settings interface, make it config-agnosticArisotura2020-05-28
| | | | | * make video settings dialog functional, sorta * fix dialogs that were resizable
* get the OpenGL renderer going.Arisotura2020-05-25
| | | | | | sorta. (also make the blackmagic_II branch obsolete in the process)
* GPU3D: more accurate viewport transform (emulate quirk with W greater than ↵Arisotura2020-04-12
| | | | 0xFFFF)
* GPU3D: implement zero-dot W limit (DISP_1DOT_DEPTH)Arisotura2020-04-12
|
* GPU3D: swap vin and vout during clipping, giving results that are closer to ↵Arisotura2020-04-11
| | | | | | hardware. fixes #598 and also fixes #379
* update copyright yearsArisotura2020-02-14
|
* fix bugs with line polygonsArisotura2019-06-12
|
* hack so that the GL renderer can render linesArisotura2019-06-12
|
* fix more bugsArisotura2019-05-24
|
* getting somewhere??Arisotura2019-05-24
|
* more code botchingArisotura2019-05-24
| | | | | | it's less shitty tho but still has bugs
* welp.Arisotura2019-05-21
| | | | progress
* remove reference to GL version 4.3 from filenames and namespacesArisotura2019-05-20
|
* BAHAHAHHHHArisotura2019-05-16
| | | | HARK HARK HARK
* BAHAHAHAHAHAHAHAAArisotura2019-05-16
|
* de-hardcode the GL renderer.Arisotura2019-05-12
| | | | | init framebuffer to black. fix bugs.
* calculate hi-res vertex positions. reduces shaking of polygons when ↵Arisotura2019-05-11
| | | | rendering at a higher res.
* hires hax. somewhat functionalArisotura2019-05-08
|
* first attempt at thingsArisotura2019-04-01
| | | | (also fix softrenderer reset)
* also, update copyright nameArisotura2019-01-22
|
* redesign main emu loop to use timestamps instead of being a trainwreckStapleButter2019-01-05
| | | | | | | | * cleaner code * faster in some cases * more accurate (on-demand compensation for timers and GPU) * less prone to desyncs * overall betterer
* GX: polygon pipeline doesn't get as far if the polygon is rejected by ↵StapleButter2019-01-03
| | | | culling/clipping.
* GX: always latch rendering engine registers even when not flushing (similar ↵StapleButter2019-01-03
| | | | to hardware).
* move the W=0 check, to be sure to check all the verticesStapleButter2018-12-20
|
* some work on extreme/degenerate shit in GPUStapleButter2018-12-20
| | | | | | * clip against Z then Y then X. apparently, fixes #310. I had also observed hints that the hardware does it this way. * truncate W to 24 bits before viewport transform. * mark any polygons that have a W=0 at that point as degenerate. do not render.
* implement proper support for POWCNT1.StapleButter2018-12-18
| | | | fixes #260
* be sure to always reset NormalPipelineStapleButter2018-12-17
|
* GX: timing for command 0x50 is more like 325 cycles on average on hardware. ↵StapleButter2018-12-15
| | | | | | (measured 319/325/331) fixes #297
* set GXSTAT busy flag immediately when writing a command to the GXFIFO.StapleButter2018-12-15
| | | | | | there was a slim chance that a game could send a couple commands and read GXSTAT.busy as zero immediately after. the new timings made that happen in NSMB (not in the USA ROM, oddly), such that the game was reading the clip matrix while matrix commands were running, and getting the first few values wrong. fixes #295 and probably others in the same vein.