AA1 is not supported on hw renderers so ignore flushing the prims on triangles.
Should provide a nice speed boost on games that use AA1 on triangle prims.
* wx: Fix `pxExplore` on macOS
Trying to open file urls in a browser does not actually launch a file explorer in macOS
* wx: Remove pxExplore/pxLaunch
Was barely used
* Update the FAQ, as well as some general cleanup.
* A few more adjustments.
* Change indentation.
* Minor changes.
* Remove the information about the time, which was incorrect.
* Life is like a hurricane...
* Modify Windows controller information.
* Add more ways to contribute.
- adapters are now referenced by index instead of string matching, hopefully this will make a few things easier
- add a setting to enable dxgi/device debugging (instead of hiding it behind a compiler macro)
- improve logging
- remove some d3d cruft from gsutils
Make things look more symmetrical and structured.
Affects Audio Settings (SPU2) , Gamepad Settings (PAD) + Network and HDD Settings (DEV9).
For audio settings the slider will no longer do 0.5 steps when you change from TimeStretch. Reduce max audio latency from 750 to 200 (less is better if your PC can handle it).
Windows SPU2 codebase is in dire need of a rehaul on how it handles this behaviour (not convert it multiple times).
Percentages will now actually be percentages instead of permille (units of 1/1000)
Was caused by trying to match Windows's returns of 100ns units, but then reporting 1µs units from `GetThreadTicksPerSecond()`
They serve no purpose, no need to check unless we actually use them
GL_ARB_compute_shader,
GL_ARB_shader_storage_buffer_object,
GL_ARB_texture_view,
GL_ARB_vertex_attrib_binding,
GL_ARB_multi_bind
just some spring cleaning since I'm here anyway.
mostly getting rid of dead code and comments
adding some comments and logging
remove some asserts
making the code a little easier to read
stuff like that
Poor MTVU thread getting trolled by the GS thread. By the time it wakes up its lock is taken again. When under contention (GS thread behind the VU thread), this caused the GS thread to waste an additional 8% of its time pointlessly waking the VU thread
Inspired by the work by fldef, fixes up swapping support for ISO's and physical discs
CDVD: Set the disk type to none/detecting when seeking.
Also disable the skip BIOS flag if we're not skipping the BIOS
CDVD: Fix up swapping behaviour, Singstar etc
CUnknown starts with a refcount of 0, so a "nonstandard"
assignment needs to be performed, even though it looks like
a COM reference leak at the first glance.
Seems there were still some missing serials, it's pretty hard to track if there are dozen more but it did had a console ban there after short-lived debut.
Corrects XMM count for COP2 ops (some might be wrong, keep an eye out in the logs)
Fixes a hidden microVU bug with a SUB shortcut + some reg allocation bugs in QMFC/QMTC hidden by flushes.
Fixes Tennis Court Smash and Love Smash games which previously couldn't be fixed.
WRC no longer requires a patch, just the xgkickhack option.
Note: it's not a hack anymore, it just has to be called that :P
The automatic gamefixes were incorrect as it would SPS. Fix the SPS with nearest VuRound and then Extra + Preserve sign for VuClamp. God will be pleased.
It's needed for the next commit, as thanks to wxWidgets
anything using the precompiled header would default to 0x0600 (Vista)
instead of 0x0602 (Win8).
Now-redundant WINNT definitions resulting in macro redefinition
warnings have been removed.
when I merged the utils and emitter project in #4707 I neglected to update the SVNRootDir macro so it was causing common libraries to not be written to the correct directory.
don't use this macro anymore so just remove it make output relative to solution dir instead
Some games like to write directly to VU memory once the program has finished and I have no easy way to update the kick without being super slow. so for now, we'll just flush it.
Also fixed a situation where PATH3 could transfer a packet to the GIF and finish its DMA while PATH1 was busy, so PATH3 never finished transferring properly as it relies on the DMA to handle the pretend timing of PATH3.
* common: move ThreadingDialogs and wxAppWithHelpers to main project
* common: move CheckedStaticBox to the main project
* common: move pxCheckBox to the main project
* common: move pxRadioPanel to the main project
* common: move pxEvents.h to main project
This was zero extending because of the implicit promotion from
signed->unsigned, causing incorrect high bits in the GPR.
Funnily enough, this was noted in the source, but implemented
incorrectly.
* common: format AlignedMalloc.cpp
* common: format AppTrait.h
* common: format Assertions.h
* common: format CheckedStaticBox
* common: format Console
* common: format Dependencies.h
* common: format EmbeddedImage
* common: format EventSource
* common: format Exceptions
* common: format FastFormatString.cpp
* common: format General.h
* common: format InitInterface
* common: format MathUtils.h
* common: format MemsetFast/MemcpyFast
* common: format Mutex.cpp
* common: format PageFaultSource.h
* common: format Path.h
* common: format PathUtils.cpp
* common: format Pcsx2Types.h
* common: format Perf
* common: format PersistentThread.h
* common: format RwMutex
* common: format SafeArray
* common: format ScopedAlloc.h
* common: format ScopedPtrMT.h
* common: format Semaphore.cpp
* common: format StringHelpers
* common: format ThreadTools.cpp
* common: format Threading.h
* common: format ThreadingDialogs
* common: format ThreadingInternal.h
* common: format TraceLog.h
* common: format VirtualMemory.cpp
* common: format pxCheckBox
* common: format pxEvents.h
* common: format pxForwardDefs.h
* common: format pxRadioPanel
* common: format pxStaticText
* common: format pxStreams
* common: format pxTranslate.cpp
* common: format pxWindowTextWriter.cpp
* common: format wxAppWithHelpers
* common: format wxBaseTools.h
* common: format wxGuiTools
* common: format wxHelpers.cpp
* common: format Darwin directory
* common: format Linux directory
* common: format Windows directory
* common: format LnxCpuDetect.cpp
* common: format WinCpuDetect.cpp
* common: format bmi.cpp
* common: format cpudetect.cpp
* common: format cpu_detect_internal.h
* common: format fpu.cpp
* common: format groups.cpp
* common: format instructions.h
* common: format internal.h
* common: format jmp.cpp
* common: format legacy.cpp
* common: format legacy_instructions.h
* common: format legacy_internal.h
* common: format movs.cpp
* common: format simd.cpp
* common: format tools.h
* common: format x86emitter.cpp
* common: format x86types.h
* common: format bmi.h
* common: format dwshift.h
* common: format group1.h group2.h group3.h
* common: format incdec.h
* common: format jmpcall.h
* common: format movs.h
* common: format simd_arithmetic.h
* common: format simd_comparisons.h
* common: format simd_helpers.h
* common: format simd_moremovs.h
* common: format simd_shufflepack.h
* common: format simd_templated_helpers.h
* common: format test.h
Gets rid of the spooky apparition in Grand Theft Auto 3 if you watch the intro.
This is kind of just enabling the old code which was kind of correct, but the old code didn't ignore the time passed, so this also updates the last cycles.
Turns out we had an unneeded layer of inheritance in the name of
BasePathsPanel, whose only job was to, wait for it, be inherited.
It is an empty class inheriting wxPanel instead of the needed
BaseApplicationConfigPanel, making it all the more unecessary.
Someone _really_ loved their OOP.
Also added back the OnShown trigger for the BIOS page to ensure BIOS
confirmity.
Since emulation settings has been renamed general settings, we can put BIOS and Folder in the same location where people have an overview and can just use tab key on icons or mouse. Less confusion and also fixes the speedhacks section *for the zillionth time*.
Update the headers to a more recent version while it brings no improvements at this moment, it can in the future.
Update glcorearb.h from 7 February 2019
Update wglext.h from 33248 (10-24-2016) to 20200813 (13 August 2020)
Update glext.h from 33248 (10-24-2016) to 20210420 ( 20 April 2021)
Creation of khrplatform.h
Need to adjust GameDB entries for to remove ones no longer required, added EE Timing fix for SOCOM as that seems to fix it up like its sequel.
Some misc changes too which are inconsequential (mostly formatting)
- Arctic Thunder
- Evolution Snowboarding
- From Software First Previews
- Growlanser Generations
- ICO
- Major League Baseball 2K5
- Major League Baseball 2K10
- Musashiden II - Blademaster
- Musashi Samurai Legend
- NHL 2K5
- NHL 2K6
- NHL 2K7
- NHL 2K8
- NHL 2K9
- Virtua Fighter 4
-- Removed patches and other miscellaneous changes
pkg_search_module was looking at our lib_FOUND and thinking it was its own
Fixed by tracking who found the library and only invoking pkg_search_module if pkg_search_module also found the library the previous time
This will re-organise the config window to be more visually distinct.
Also fixes the issue where GamePad and Graphics if used with Alt, though it would still work technically if you press G again.
If buffers are smaller than the threshold PCSX2 uses to decide whether to time a read as a seek, ThreadedFileReader fails to provide data in time for the very small linear read time cutoff
We switched to appimage in an earlier commit. It makes more sense for us
to maintain a distribution agnostic packaging method than something
which is already forked by upstream anyways.
Remove unneeded quotation marks.
linux-workflow.yml:
Checkout Submodules:
Shorten --jobs to -j, use $(getconf _NPROCESSORS_ONLN).
Make restore-keys into one line.
Remove unneeded ./.
macos-workflow.yml:
Checkout Submodules:
Shorten --jobs to -j.
Use $(getconf _NPROCESSORS_ONLN) instead of 2.
Move HOMEBREW_NO_INSTALL_CLEANUP to env: and add HOMEBREW_NO_ANALYTICS.
Remove unneeded ./.
pr-triage.yml:
Make on: pull_request_target into one line.
Properly capitalize GitHub.
compile.sh:
Add warning when running outside of GitHub Actions CI.
Use $(getconf _NPROCESSORS_ONLN).
validate-vs-filters.ps1:
End of file newline.
windows-workflow.yml:
Rename config to configuration.
Opt out of PowerShell telemetry.
Checkout Submodules:
Shorten --jobs to -j, use $env:NUMBER_OF_PROCESSORS.
Remove unneeded shell from Verify VS Project Files.
setup-msbuild:
Use v1. (always the latest version)
Remove useless vs-version parameter.
Remove unneeded ./ and .\.
Add -p to mkdir.
.gitmodules:
Make submodules shallow.
build.sh:
Move parameters from shebang to set.
Consistent formatting for ifs.
Use $(getconf _NPROCESSORS_ONLN).
Adding Forbidden Siren (PAL demo disc) as well as the Bonus Demo 8 (old) demo disc, which was included with an updated Network Disc.
NOTE: The "(old)" part is written verbatim on the disc.
Passing focus on the focus message instead of the activate message
resolves an issue where external processes (e.g. NVIDIA overlay)
forced a focus change to the GS Frame, requiring the window to be
refocused in order for keyboard inputs to work again.
Currently, GSFrame rejects focus messages and instead passes it to
the child GSPanel.
* Headers cleanup.
* Remove stray Windows code.
* Rename Gamepad.* to Device.*.
* Rename ini.cpp to Config.cpp. Get rid of controller.cpp, moving code to controller.h.
* Change controller.h to Config.h. More cleanup.
* More header cleanup.
* Switch things over to the InputManager. Didn't move the update code there for now.
* Move to pragma once. Move update code to InputManager.
* Reformatted files. Rearranged some includes and defines.
* Not sure how I missed this...
* It's 2021.
* clang-format: make sure the formatting changes are correct
Co-authored-by: Gauvain 'GovanifY' Roussel-Tarbouriech <gauvain@govanify.com>
the cleaner solution would be to make our cdvd implementation using
scopecorepausedthread cleaner but I'm probably going to hold off on
doing that until I do some major refactoring because the GS merge is
alreadying getting out of hand
Move the pcsx2 project from pcsx2/windows/VCprojects/ to pcsx2/
This is to fix an issue that was causing the intermediate files to go to the wrong directory.
pcsx2/windows/VCprojects/Win32/Devel/../../GS/GS.o -> pcsx2/Win32/Devel/GS/GS.o
surprisingly, GSdx never ran into this issue prior as linux didn't use
baseclasses but used wxwidgets, while windows did but used the winAPI
GUI system. Software is cursed
The rumble test using either the checkbox or the slider in the gamepad
configuration GUI always causes the first gamepad to rumble, even if
other gamepads are selected in the drop-down menu.
Official Playstation Magazine - Demo Disc 40'entries, Official Playstation Magazine - Demo Disc 85, Singstar Boy Bands vs Girl Bands, Singstar Take That.
Around half of the debug and console output from the DEV9 tree already
had this prefix. Adding it everywhere for consistency. Also fixed
misspelling of "Unknown" whilst there.
FULL clamping mode fix games where hack was used, so is no longer required.
This commit remove hack, adjust GameDB according to that change, and rename fpuFloat4 function to fpuFloat3.
Last change is because fpuFloat3 was just wrapper for fpuFloat4 with added check for compare hack.
Additionally fpuFloat2 was only function that called fpuFloat4 directly, so that one call was changed to fpuFloat3 to respect previous changes.
Gist is we paused the CoreThread without resuming it (input recording would wait until the next VSync), the shutdown routine triggers it when all required window elements are already cleaned up, hence the crash.
Reproduction Steps:
- boot game so gs window is open
- open the dialog for a new input recording, then close it
- close the GS window
- re-open the dialog for a new input recording, then close it
- close pcsx2, should error.
- Discord is more obvious to endusers now with logo and corresponding blue color.
readme: Remove coverity
- Sets discord to white icon and remove coverity because it hasn't been used since 2019 and replaced by codacy.
readme: SSE4 to SSE4.1
- Make it more obvious to have atleast SSE 4.1
This resolves folder memory card incompatibilities with games assuming
the order of files in the filesystem - e.g. Grand Theft Auto games.
A newly added index file tracks the order in which files would have
landed in the FAT partition and attempts to preserve this order
upon loading.
Linux: 300 to 100 (which should be fine for everyone.
Windows: Change the steps to start from 3 and increment on higher numbers instead of 0.5 steps which is just stupid to be that granular.
MTVU checked + Instant VU1 checked = MTVU is on
MTVU checked + Instant VU1 off = MTVU is on
Essentially it doesn’t matter for Instant VU1 be checked or unchecked if MTVU is checked.
MTVU off + Instant VU1 checked = Instant VU1 is on
MTVU off + Instant VU1 off = both are off
Instant VU1 enabled is the old behaviour (so think of it always being enabled in the past). Some games however don’t like this and for those few games they should be off, those kind of games should’ve normally been added as an automatic gamefix or will be in the future.
The capture dialog filename handling code did not handle non-English
filenames properly.
Fix the filename handling by working in Unicode only and avoiding
unnecessary and incorrect string conversions.
The shader dialog filename handling code had several buffer overflows
and also did not handle non-English filenames well.
Fix the filename handling by storing them as UTF-8 in the ini and
converting them to/from UTF-16 as necessary, and also fix the buffer
overflows.
We want this to be visible at all times so ISO damage issues are more visible without enabling advanced logs. Conversely, we don't want this to show up as a big red error, since it is not necessarily a critical error as mentioned in li's comment.
There doesn't seem to be an obvious way to detect a submodule change. If the TAG was put inside the `gitmodules` file that would be another thing, but it isn't. So after a new submodule is added, the cache is never evicted (for instance in this PR's case, where an existing submodule is bumped to a new commit)
Jumps emulation to the initial state of an active input recording file whether boost or savestate. Makes it easier to reset savestate-based recordings.
* Overrides the Boot ISO/CDVD/Bios menu option.
*Resulting .wavs should get saved in the same location as the video file on linux
*Keep gui capture state consistent regardless of the method used to start recording
*Reworked mainFrame capture menu video options to route to a single toggleCapture_click function
*Split GS & SPU2 recording into start & end functions
* No longer calls HandleFrameAdvanceAndPausing() more than once per frame. No need to increment frameCountTracker.
* Splits framelocking into its own function (which could harmlessly get called more than once per frame).
If backups are enabled, the .backup file will have already been created via renaming the original save-state. The asynchronous process is dumping the current emulation state, but by the time we've hit this function the rename has already taken place so we have a guarantee.
This solves a potential bug in the existing code (which probably would have never been hit):
Save to slot that has no current backup
Rename fails
Update method looks for the file without .backup, which is still there.
Load backup option is enabled despite there not actually being a backup to load.
Compilation with the default settings failed when downloading PCSX2 into
a directory with spaces somewhere in its path:
* In CompileGResources.cmake the paths had been escaped already, resulting
in double escaping the strings (i.e. embedding them in quotes _and_
escaping spaces with a backslash. cmake wasn't able to parse the line
any more.
* In pcsx2/CMakeLists.txt the paths were not escaped, but also not
embedded in quotes, resulting in an invalid Bash command.
This commit fixes these cases (but is neither a review to find all cases
or making sure other characters such as a newline character would work).
Allows users to use the leshort, leword, and ledouble datatypes inside their patches. Using these datatypes ensures that values in the memory view appear the same as the values in the patch.
This was made with easing patch development in mind as now developers can make patches without having to reverse endianness. This is especially useful when using programs like ghidra who display an instructions bytes in little endian.
Fix for Depth precision.
Game fills upper 16bits of depth with 0xFFFF.
This results in a really high 32 bit value which is then converted to float because both hw and sw renderers lack double precision the lower 16 bits of the initial 32 bit value lose precision.
I was expecting to add some more serials to SLUS (NTSC) but it seems to be more well maintained than the SLES (PAL). Most additions are demos but there are some normal full entries . Minor fixups on SLUS and other regions for names.
These seems to be have been adjusted to match the output of catmull-rom
which is really the one in the wrong by being twice as loud.
As a result of the the interpolated output being at a reasonable level
we can use ApplyVolume to apply the ADSR volume.
On macOS it prevents the parent window from regaining focus
Also remove OK/Cancel buttons JoystickConfiguration, they already obey the Cancel/Apply/OK of the parent
Caching blocks of ADPCM is a bit sketchy because the previous samples (which it uses to generate the new ones) can change, so you can end up with blips and glitches in the sample stream, this should avoid that problem whilst not making the cache completely unusable.
Should fix invisible characters and move hardware renderer settings 2px down.
Also make the full window and software renderer settings consistent at 2px towards the bottom.
Most macOS users expect applications to store their stuff in ~/Library/Application Support
Documents is protected on newer macOSes and requires users' explicit permission (and also may be cloud synced), and use of ~/ is fairly uncommon
- Change the wxitems to reflect a more appropiate name + change comment to explain the process of Custom hotkeys.
- Cycling savestates are now in the GUI but they are grayed out because it's only used like labels for now.
- The most essential custom hotkeys are now included.
- F8 Snapshot needs some future tinkering but atleast shows up correctly now
- This will show `default hotkeys` from `PCSX2_keys.ini.default` or based on the `copy of PCSX2_keys.ini` that the user itself added to `inis folder` for changing it `for custom hotkeys`.
This algorithm comes from pcsxr and is an implementation of Dr. Hell's
research. It's supposed to be very accurate.
Bumps savestate because of new SPU core struct members.
New UI option (ini option has been there a while) so users can choose between a little bit extra performance or better input lag. Also added the PAD Update to the VSync call in Counters as it seemed to improve Input lag marginally.
Add PR title if applicable, limit the length of the file to avoid file-name length issues.
Also put all contents of the artifact into a folder with the same name to simplify extraction.
- Conservative Buffer Allocation will be enabled by default.
- Unscaled has a lesser visual impact but will be moved to the middle so it is more consistent with the other options in the GUI.
- Monitor will hence be named Statistics Monitor which makes it more obvious that it's similar to RivaTuner Statistics Server.
- The monitor will print the stats of the emulated components EE (roughly CPU-usage) , GS (roughly GPU-usage).
- Make room for the new checkboxes with revision of names and tooltips.
- GPU (color) Palette Conversion instead of 8bit textures (the name didn't make much sense).
It takes 4 cycles per word, according to No$PSX documents
Also fixed an issue with when ADMA refills the buffer, fixes The Simpsons (for real this time)
* File browsing will be required when creating a new input recording if at any point the filename box is empty.
* Removes the "Current Frame" selection if GS is closed. Corethread check in InputRecordingFile::openNew() no longer necesaary.
* Hold virtualPad window pointers solely in the g_inputRecording object
* Only inits the windows once per session and only if recording options are enabled
This will change the PageUp/PageDown and also to clicks near/far but still on the slidebar and the jumps are changed from 42 to 5 , scroll wheel will still be 2 and all the arrows keys on 1. If you click and hold and then move just outside of the slider you now get nice jumps of multitudes of 5. Dragging the slider will not be affected.
Skip reinit when swapping discs or it probably hooks dinput8 wndproc causing recursion.
If swapping discs, use WM_ENABLE to signal we have focus again.
Sometimes (CoD Finest Hour) can somehow end up with blocks missing from a program, not sure how, but it still finds the current program, so we check if the block exists, if not, recompile new ones.
Copying them afterwards ended up in the wrong order with Xcode's code signing, causing unsigned plugins to get copied, which would break the later step of signing the whole bundle
* Suppress hardening warning spam for the moment. Get rid of a multi-line comment warning.
* Resolve a bunch of warnings about unused variables, unused labels, and sign mismatches.
* Deal with various possibly unused variables.
* Rearrange member variables to match initialization order.
* Move [[maybe_unused]] to a separate line in one spot to make it easier to read.
Aniso filtering doesn't work with textureLod so use texture
(automatic_lod) instead.
Credits to KrossX.
Note: Won't work on AMD because the driver is broken.
Plenty of users misclick this setting and don't know how to switch back
since it's a rarely used option.
Let's get rid of the hotkey toggle for a quality of life change.
Directly calculate blend index in rendererdx11, and send the value to
SetupOM. Get rid of duplicate calculation and abcd variables.
Code is cleaner this way.
* Remove version and platform checks for wxwidgets. It's probably better to find *something* rather then fail because you have 3.1.2 and the build was looking for 3.0 when both work.
* Build gtk 3 by default. Replace gtk 3 flag with one for gtk 2.
* Remove two unused cmake modules.
* Forgot to change a description in build.sh.
This call became a problem with distributions (eg Gentoo GNU/Linux) that
builds PCSX2 in sandboxed environment which disallows setcap execution.
Signed-off-by: Yuri Konotopov <ykonotopov@gnome.org>
ChaosLegion
vuClampMode 2. Fixes SPS in the item menu. Found by EspeonScottie.
Dragons's lair
EETimingHack, VU0KickstartHack. Fixes hang and SPS.
Astro Boy (Atom)
eeRoundMode 0. Fixes character behaviour.
Previously iLinkId was writen/overwriten to .nvm only when user not supplied own file.
But when user supplied file with empty iLinkId, then value is never set. So games fail to get correct data.
That implementation return hardcoded ilinkId when read is requested, and correct iLinkId is not found.
I believe the intention of the cheats/settings reloading is for the conventional pause/resume from the MainFrame's menu.
However, with input recording, nothing ever actually gets closed so I doubt the settings need to be reloaded. This stops that from happening on every individual frame advance. However, in case im wrong and it is needed, they do get re-applied when emulation is fully resumed (Shift+P by default). This just dramatically reduces the console spam.
Now that there's a reason for it, enable the call to the CloseGSPanel function (although it still won't delete the panel).
pcsx2-gui: Remove input recording keybinds when tools are disabled
recording: Log "Recording" > "Input Recording" consistency
pcsx2-gui: Don't attempt to modify recording items if main frame is null
pcsx2-gui: Add some help text for the recording options as well
pcsx2-gui: Disable `Toggle Recording Mode` if no recording is active
recording: Factor in DPIScaling when scaling VirtualPad window
recording: Add a reset button, hopefully better quality backgrounds for lower resolutions
recording: Improved VPad analog alignment
Co-authored-by: sonicfind
recording: Some final VirtualPad coordinate adjustments
F9 now has the following functionality on Windows:
- If the renderer in the config is D3D11, switch between D3D11 and SW
- If the renderer in the config is OGL, switch between OGL and SW
- If the renderer in the config is SW, switch between SW and the renderer returned by GetBestRenderer()
msbuild does not use the project in it's entirety to build the app. This means problems can slip through, so an easy solution is just to ensure the XML is well-formed. More sophisticated validation could be done with something like `xmllint` but seems overkill.
* Moved ps1 init. Added Sample Rate change for SPU that gets set but not applied
* SPU: misc fixes on SPU ps1 mode init
* Init the soundbuffer to apply sample rate. Actually set the correct sample rate for the ps1 though it still won't apply
Co-authored-by: Gauvain 'GovanifY' Roussel-Tarbouriech <gauvain@govanify.com>
Co-authored-by: kenshen112 <obarrtimothy@gmail.com>
Shares a single filename between the two capture functions so that the .avi and .wav will match.
Default wavdump filename changed to "audio_recording.wav"
The `.git/modules` folder was not being initialized, which caused the post-cleanup of the `Checkout` step to flag an error at the end. Caching this folder and thus completely caching anything submodule related, should eliminate this warning.
Also allowed submodules to be pulled in parallel when they aren't cached.
- Dropdown menu for 3 options: Off (No Effect/ Been always like this), Scaled (Strongest effect/obvious), Unscaled (Weakest effect/less obvious).
- Change default from Scaled to Unscaled.
* RecordingReset is now a function of the InputRecording class
* TotalFrames is now signed
* InputRecordingControls refactor, IsRecordingPaused -> IsPaused
* Add check to keep frameCounter from overflowing (not like someone is gonna record a year's worth of inputs though).
* Code Formatting adjustments (more to do in a separate PR)
Ensures that no frames of input are skipped over on the initial load of a recording file or during a fast/full boot when a recording file is active. Improved consistency.
* Replaces the savestate load flag with a more general initial load flag to be used by full/fast boots and savestates.
* Have the Pcsx2App::ResetRecordingCounter() method mirror the similar method of the savestate class.
* Handle setting frameCounter to 0 in SetStartingFrame().
* FrameCounter, signed -> unsigned.
* Have SetFrameCounter handle the calculations for the relative frame displacement from the startingFrame.
* Optimizes InputRecording::controllerInterrupt.
* Flip the order of execution in inputRecordingFreeze.
* Set framecounter properly on full/fast boot.
* More accurately increment undo count
* Recording mode enum, NoneActive -> NotActive
* Changed IsMode method names and added an IsRecording method.
* Add methods designated to setting a recording to a certain mode.
Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
* RecordingControls - > InputRecordingControls (+ function refactors & simplifications)
* Avoid mutating g_FrameCount - now use isolated frameCounter & startingFrame variables for input recordings
* Pause or resume emulation preemptively based on GUI actions
* Exclusively handle GS window title updates in FrameForGS
* Revamp the spu2-x wx dialog box to be more consistant with the wx GSdx dialog.
* Revised advanced sync text for brevity, changed it back to a label, and renamed the dialog box.
* LightningTerror thinks Spu2 looks better in uppercase.
* Change around the time stretching labels again.
* recording: Only stop the current recording once the menuing hasnt been cancelled
* recording: Avoid changing menu option's state if the recording couldn't be played
* recording: Don't play a recording that uses a savestate, if no game is running
* recording: Don't modify `frameAdvance` flag when explicitly [un]pausing
These functions are only called when creating/playing a recording, and modifying the frameAdvance flag leads to unexpected behaviour (such as the game starting paused if the recording was made from "power-on")
* recording: Refactor and simplify `InputRecordingFile`
InputRecordingFile will no longer be concerned with loading the save-state when playing back an existing recording. This makes it much easier to only load the save-state if the file is valid and manipulate the emulation state correctly.
* recording: Update play logic with new refactor, resume emulation in the event of a failure
* recording/lint: spaces to tabs
* recording: Properly only examine controller 1A & 2A
The previous controller port checks in place never actually succeeded in their designated task. A new slot check in sio.cpp will perform this task instead.
* recording: Save the savestate in OpenNew() instead of open()
Ensures that the savesate could be saved before trying to create the actual input recording file. It will overwrite any previous backup savestate.
Also, allows for a simplified & easier to read code struture of open().
* Refactor and simplify `InputRecording`
Changes the return type of Play/Create from void to bool.
Optimizes Stop(), Pause(), and Unpause() call placements
Improved handling of emulation pause state, the recording menu on failures, and the conditioning of when a recording file should actually be unloaded.
For example, a currently loaded recording should not get unloaded if a user presses Play *but* chooses cancel in the file browser. However, the emulation should be paused during the duration of this action.
On the flipside, a loaded recording *should* get unloaded if the tools get disabled in settings AND emulation should resume if not already playing.
* recording: Simplify VirtualPad_Open_Click
Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
Currently they are not used when compiling with opencl so don't include
them, entire opencl 3rdparty needs to be updated. Can be done when
someone attempts to fix the opencl renderer.
Auto-Eject checkbox is a failsave for broken saves. Card (file)name to Memory Card (like a real PS2 you need to plug a memory card in port 1 to work).
Add usable to formatted to be obvious if you can use the memory card. Changed default column width.
FMV Aspect Ratio Override = Off is the same as the value for Aspect Ratio. Formatting fix for Zoom tooltip.
Double click on emulation windows also does fullscreen. Disable framelimiting means Uncapping the FPS.
Capped slowmotion adjust at 5% (it doesn't accept lower than 5 anyway). MTGS gets debug tag (useless for many).
Large framebuffer should only be used in cases of stuttery FMVs (cutscenes). 4/8 bits is best used where GPU is much stronger than CPU.
Fix DPI scaling for OSD color sliders (FPS + other stats).
DS4 is finicky sometimes with Directinput enabled and is best used with Xinput + Steam (Steam is recommended for all controllers).
Alternative for DS4 is Ryochan7/DS4Windows (not main DS4Windows).
* recording: Resolve hang when opening PAD plugin with the game paused
* pcsx2-gui: Forbid editing the PAD settings while emulation is paused by recording tools
* pcsx2-gui: Resume emulation before configuring PAD plugin, resume on return
Add skip_branch_with_pr reference.
- Do not build feature branch with open Pull Requests.
Remove VS2017 32bit build, will allow appveyor to finish
jobs/work faster.
Added missing CRC for Jak II PAL Preview and Review builds. Due to the protection, the CRCs are identical.
Added mention of Jak 3 Review build in comments. Same CRC as two other builds, due to its protection.
Added a missing Jak X Demo CRC.
* Reshuffle and reorganize menus. Add a help menu with links to the main website, forums, github page, wiki, and getting started pages.
* Change fast boot to an option.
* Make the Debug window menu option checkable, similar to the Log window.
* Move log settings to the Log menu.
* Add more information to the status bar.
* Moved a few things around. Added Compatibility to the Help menu.
* Removed Pcsx2 from the menu item names in the Help menu, and rearranged a bit.
* Fix crash on cancelling.
* Status bar changes.
* Add minimize/maximize flags to debug window.
* Don't strip out the maximize and minimize boxes on the debugger in weird Windows-only code.
* Add Help button. Fix Help dialog on Linux.
* Remove no longer used Windows code for Debug window.
* cmake: Remove zzogl from cmake.
* cmake/build: Remove GLSL_API and EGL_API flags.
Only used in zzogl.
* linux various: Remove zzogl.
* sln: Remove zzogl from old plugins solution.
* zzogl: Remove source files.
* debian: Exclude zzogl from copyright.
* linux various: Remove glsl2h.pl
Used only in zzogl?
* linux various: Remove zzogl code from validate_glsl.sh
* debian: Remove zzogl mentions in create built tarball.
* gitignore: Remove zzogl paths.
Another small piece of #3451
Moves all VTLB pointer manipulation into dedicated classes for the purpose, which should allow the algorithm to be changed much more easily in the future (only have to change the class and recVTLB.cpp assembly since it obviously can't use the class)
Also some of the functions that manipulated the VTLB previously used POINTER_SIGN_BIT (which 1 << 63 on 64-bit) while others used a sign-extended 0x80000000. Now they all use the same one (POINTER_SIGN_BIT)
Note: recVTLB.cpp was updated to keep it compiling but the rest of the x86-64 compatibility changes were left out
Also, Cache.cpp seems to assume VTLB entries are both sides of the union at the same time, which is impossible. Does anyone know how this actually worked (and if this patch breaks it) or if it never worked properly in the first place?
Allocate memory in an x86-64-compatible way
Another part of #3451
Note: While this shouldn't change how anything works, it's been the #1 source of breakage of 32-bit builds in #3451 (it was the cause for the failure of win32 to allocate memory and the failure of linux-32 afterward) so we should definitely make sure it gets tested
see #3523 for more information
Fix codegen on x86-64
Part 1 of the changes being worked on in #3451
Makes x86emitter emit the x86-64 machine code you would expect it to
Also adds some unit tests to verify that things are working
* The emulator version was hard-coded to PCSX2-1.5.X which is no longer accurate, it is no longer hard-coded and will use the correct version number the same way it is calculated to display in the window title.
* When creating a recording, the game name is preferred over the ISO name. This is determined via the GameDB. When playing back the recording, a simple check occurs to see if the game running is the same one that was used to make the recording. On the playback side, it always only checked with the ISO filename.
* git: Ignore uncaught linux build artifacts
* onepad-legacy: Return legitimate key event on `PADkeyEvent` call
Onepad-legacy was the plugin that was building and being used on my linux environment. I'm not sure if t hat's expected and normal 'onepad' has yet to take over.
* onepad: Return legitimate key event on `PADkeyEvent` call
* recording: Remove unnecessary `PadKeyDispatch(ev)` wrapping func
* recording: Cleanup key event handling when GSFrame CoreThread is paused
* recording: Refactor recording status check to be more explicit
* recording: Define additional key bindings for capitalized varient
Despite the advice of the docstrings in these files, on linux this seems to be required for the bindings to consistently fire.
* onepad: Declare `AnalyzeKeyEvent` not static
* recording: Ensure file extension is appended to recording file on linux
* recording: Correct typo in comment
* recording: Better wording around linux keybinding handling
* Remove unneeded `extern`
* IPU: Perform an interrupt on IPU_CTRL Reset.
Doing this reset performs a forced command end, meaning the IPU will run through the procedure of ending any command running and telling the core that it is done, even if there is no command currently active.
Fixes Fightbox
* Remove Fightbox patch
- 24 : The game
- Amplitude
- Freaky Flyers
- Free Running
- Ghosthunter
- Next Generation Tennis 2003
- NHL 2K6
- NHL 2K9
- Primal
- Ruff Trigger
- Salt Lake 2002
- Savage Skies
- SOCOM 3
- Tomb Raider: Angel of Darkness
- True Crime: Streets of LA
- Yanya Caballista: City Skater
* Improve secondary dialogs in Onepad. I'll do gtk stuff in this branch, too, I promise...
* More fiddling with onepad's secondary dialogs.
* Rework config.inl to use wx, getting the rest of the null plugins.
* Remove some unnecessary includes, and convert SysMessage to wx in onepad.
* Add in tellowkrinkle's Mac OS fixes.
* VIF MSCAL instructions wait on VU T-Bit stop
Fixes:
The Sims
Spiderman 3
Sharks Tale
Maybe some bits of Over the Hedge
* Removed Spiderman 3 patches
* Fix VIF DMA resuming when stalled on tag
* Remove warning which doesn't really need to be there anymore
Don't interrupt if compare/overflow flag is already set
Removed patches for Harry Potter Prisoner of Azkeban and Chamber of Secrets as they should no longer be required.
Note - Some harry potter games still have the EE Timing Fix which may also not be required
Updates the d3d device and swapchain creation to more modern methods.
- Use CreateDXGIFactory2 to create the factory and store in member
- Use CreateSwapChainForHwnd
- Add messages for failures to the console
- Some general formatting improvements
Convert sprites on the cpu instead of the gpu when applicable. Port from
Opengl.
Lines: GPU conversion.
Triangles: CPU conversion.
Disable Geometry shader when conversion is done on the cpu.
v1 It won't allow users to try to input a value that isn't supported
osd (size, timeout, max), tc offsets (x, y), rendering threads.
v2 Use const if applicable for variables throughout
GSSettingsDlg.cpp. Will cleanup some warnings.
DMC3, Onimusha 3 rely on this behavior.
They do fullscreen rectangle with scissor, then shift by 8 pixels, not done with recursion.
So we check if it's a TS effect by checking the scissor value.
Credits to Kojin for figuring out the issue.
Overhauls the previous batch of changes and adds the latest changes. Changes include:
- Unification of terminology between all the strings.
- Changing quotation marks with the ones used in Spanish.
- Removal of some GT-like translations.
- Unification of parenthesis symbols.
- Removal of title uppercasing (Spanish language doesn't use that many uppercased words).
- Checked fuzzy entries.
Hack is obsolete/replaced with accurate date/date_one option/code.
There's pretty much no usecase for it remaining other than using it as
an alternative to skipdraw which removes/breaks transparency effects.
In GSRendererHW, reuse the method CanUseSwSpriteRender for OI_JakGames.
As in current master, 16x16 "flat" sprite draws are performed via CPU: those are palette rendering better emulated with the SwSpriteRender.
Jak games do also many 64x64 "flat" draws, but mostly for render to texture effects that are already correctly emulated in the TC, so those draws are not done via CPU (as on the contrary happens for DBZ BT games).
Improve texture cache Source objects invalidation logic taking into account overlapping with current draw.
Fixes eyes rendering for the Major in Jak 1.
Use SwSpriteRender to render sprites, which:
- fixes kaioken effect,
- fixes character outlines when upscaling,
- reduces frametime by up to 3ms with big upscaling factors.
Don't disable sparse texture by default before extension check, it will
display sparse texture always not supported. Do an ini check in
check_sparse_compatibility function instead.
Log should properly state if sparse texture is supported now.
Move Additional colclip info, dithering, FixedTEX0 to extra debug logs.
It will allow to keep track of more important stuff going on and they
can be enabled with ENABLE_EXTRA_LOG if needed.
Change context creation log type from stderr to stdout.
The behavior was verified on Dobie to be correct.
The code needs to be ported to SW renderer too to
improve rendering on SW side.
Current PR will fix plenty of games on HW renderer
that had/have zbuffer issues before.
v2. Set DepthMask to the maximum the current depth format allows.
Will properly clamp for 16bit and 24bit formats.
v3. gl: Fix uniform buffer upload/cache for VSConstantBuffer.
Add support for depthmasking to EmulateZbuffer, previous old code had
support but wasn't ported properly with the new code a few years back.
VS Constant buffer is now properly setup.
* Add Z clamping to GSdx SW mode
* Fix spacing
* Only clamp when max vertex z is greater than zfmt max
* Fix Z format switches
* Get rid of needless shuffle
* Whoops, missed a case
* Replace switches with a shift
* Disable triangle clamping for SSE2
* Implement clamping on GS Raster Interpreter
* Added SSE2 Triangle Z clamping by KrossX
* macOS compile
* Fix memprotect error on macOS
* Fix semaphore wait + thread cancel on macOS
* Fix timedlock timeout calculation
* spu2-x macOS
* onepad macOS support
* Add MacOS game controller db
* Disable onepad_legacy on macOS
* Fix spu2-x configuration crashes
* Make recompiler work on 32-bit macOS
* Use dylib extension for plugins on macOS
* Make app bundle on macOS
* Use git info for Info.plist version
Fix for terrible performance in US versions of Primal (all the time) and Ghosthunter (when encountering Teddy Bear and in the moment of Gator-Man's rush attack, maybe few other cases), Both games use shared code with pretty dumb wait loops in the microcode, those are absolutelly unnecessary and significantly kill performance on emulator.
* Performance fix for Primal and Ghosthunter
Fix for terrible performance in US versions of Primal (all the time) and Ghosthunter (when encountering Teddy Bear and in the moment of Gator-Man's rush attack, maybe few other cases). Both games use shared code with pretty dumb wait loops in the microcode, those are absolutely unnecessary and significantly kill performance on the emulator.
This change makes the EE recompiler not hardcoded to working with 32 MB of RAM, and instead work with the amount of RAM set in Ps2MemSize::MainRam. The rest of PCSX2 seems to work fine with more than 32 MB of RAM - it is only the EE recompiler that has trouble. If the Ps2MemSize::MainRam value is not changed from the default 32 MB, there should be no change: 32 MB / 0x10000 = 0x200, the value that was there previously.
This may be helpful if anybody else in the future wants to emulate a PS2 dev kit with 128 MB or RAM, or maybe the PSX dvr thing which I think has 64 MB of RAM. I've confirmed that with the change, you could set Ps2MemSize::MainRam to 128 MB, and execute code with the recompiler that's above the first 32 MB of RAM, and do VIF and scratchpad DMA transfers from this upper memory as well.
* Modify VU addressing so it only multiplies by 8 before entering the program
Fixes issues with VU1 TPC being read multiplied by 8 (bad)
* Removed assert on SuperVU which no longer makes sense
- Always enable sw colclip for BLEND_NO_BAR.
Free blending and it's faster than standard hdr algo when Blending
Accuracy is disabled.
- Enable sw colclip for Safe FBMASK SW emulated.
instead of hdr mode with accumulation blend so we don't use a mix of sw
and hw blending. It is more accurate.
Test case: Superman Shadows of Apokolips, fixes shadows when blending is enabled.
- Use const to get rid of some warnings.
- Free blending and it's faster than standard hdr algo when Blending
Accuracy is disabled.
- Add assert when disabling hw blending, hw blending should only be disabled
on free/no barrier blending. D3D11 lacks other types of blending.
- Use const to get rid of some warnings.
Fast floating point behaviour can optimise out handling for special
floating point values e.g. NaNs. As GSdx needs to handle NaNs in a few
places, precise floating point behaviour should be used instead.
Fixes a flashlight regression in Silent Hill 2/3 that was caused by
VS2019 optimising out NaN handling.
* Change the minimum cmake version to a range. Uses the new policies of the newer versions if you are on them, taking care of CMP0054.
* Grab a newer version of FindHarfBuzz.cmake from Webkit that fixes the cmake warning the earlier one was giving.
* Add in -ftime-trace as an option on build.sh.
* Precompile PrecompiledHeader.h if you are using cmake 3.16+ and GCC. (Currently disabled on clang due to compilation issues.)
* Check if target_precompile_headers exists rather than by version.
Co-authored-by: scribam <scribam@users.noreply.github.com>
* spu2-x: Make portaudio an optional dependency.
v2: Fix crash in the audio settings with SDL1 and without portaudio.
* cmake: Add PORTAUDIO_API to disable portaudio support.
ePSXe for example.
There is little to no benefit in keeping it, especially when nobody was
maintaining the code. If we ever want to reintroduce it we can do so
from older branches like 1.6.
Plus if we want to integrate plugins into pcsx2 itself this is a required step.
PS1 games can ofc still be played within pcsx2.
Let's Make a Soccer Team!, Virtua Pro Football, Pro Soccer Club o Tsukurou! Europe Championship, World Football Climax.
Technicals:
SLES-54151 reads data from SLES-54153 to allow importing players. Same with the Japanese equivalents.
The above pairing in reverse allows importation of custom teams exported in 54151's VS mode. Again, same with the Japanese equivalents.
SLPM-66442 is listed in PCSX2 Wiki but not in GameIndex.
Leave it as an ini option only.
People should never use custom resolution as it causes many issues and
many features aren't supported with it.
On linux option was removed a long time ago.
Uninstaller:
- Removed dependency for AdvUninstallLog, it wasn't really used for anything.
- Remove unpacked installer files upon successful installation.
Installer:
- Remove detection code for versions prior to 1.4.
- Fix Unicode path issues.
- Fix path issues if install folder already exists.
- Remove language option.
- Fix redistributable installation issues.
- Move redistributable installation to after user proceeds with install.
This reverts commit 99f814d376.
The assert gets triggered on Linux and so debug build can't be used properly.
Would be nice to investigate why in the first place but until then revert the
entire commit. We have checks for texture limits anyway so it shouldn't be an issue.
VS complains about errors so isolate the code in each file for TAS with macros.
Remove ifndef for m_capturingVideo as it is used for video capture menu.
This patches some values in Powerdromes VU microprogram, which restores the 3d models of the characters.
The game uses the extended PS2 float range to do some culling calculations, so I have brung them down to be usable by x86, no other way to really fix this game.
Update all documentation for 1.6.
Source files for documentation are in md format and are kept in pcsx2\pcsx2\Docs, final exported/converted docs are in pdf format (Configuration_Guide and PCSX2_FAQ).
Update First time wizard to reflect recent documentation changes.
Update cmake to reflect recent documentation changes.
PO/POT/MO Localisation needs to be updated for the First time wizard to include the documentation changes.
NSIS installer needs to be updated to reflect the recent changes.
This commit add several fixes for several games as well as some serial updates:
- Batman Vengeance - patch removal and the addition of EETiminghack to fix slow videos.
- Musashiden 2 - Several fixes which reduce by a large margin the amount of graphical issues.
- F1 2001 - Adjustment of the patch to make it fully working as well as the addition of the NTSC-U patch.
- Sprint Car 2 - Added a patch to make it playable without bouncing cars.
- Wakeboarding Unleashed - Added 2 fixes to fix various graphics issues (still unplayable on retail builds).
- Netsu Chu! Pro Baseball 2003 - Added a patch to fix game hanging when going ingame.
- Hisshou Pachinko-Pachislot series - Added the EETiminghack to solve crashing videos.
- Yu Gi ho 2 - Added several fixes to fix battle annimation.
- .hack fragment - Removal of all unneeded hacks.
- Ratchet and Calnk 2 - Removal of the EEtimingHack causing problems in the game.
Previous behaviour:
Anisotropic filtering was continuing to run even with Nearest filtering.
On opengl it doesn't run on nearest filtering. The gui for both
renderers also greys out aniso when nearest is selected.
Anisotropic filtering being able to run on palette texture. This caused
to break the rendering on palette textures for games that use it.
PR behavior:
The PR corrects both of these behaviors, Aniso won't run on palette
textures as well as nearest filtering.
Test cases for observing the issues were used: Star Ocean 3, Fifa
Street.
Automatic, Force Disabled, Force Enabled.
Automatic - automatically determinate if a game needs the half screen
fix.
Force Disabled - fully disables the half bottom fix. It will help
Xenosaga games.
Force Enabled - fully enables the half bottom fix. Will help Lord of the
Rings Two Towers, Superman Shadows of Apokolips, Midnight Club 3.
Automatic, same as before, automatically enable based on height delta.
Force Disabled, fully disables the half bottom detection.
Force Enabled: Fully enables the half bottom detection.
Jak X, Spongebob Squarepants( The movie and Battle for Bikini Bottom),
namCollection - Namco 50th Anniversary, Disney-Pixar's The Incredibles,
Incredibles, The - Rise of the Underminer.
Fixes booting issues in the following games:
Jak X, Namco 50th anniversary, Spongebob the Movie, Spongebob Battle for Bikini Bottom,
The Incredibles, The Incredibles rize of the underminer, Soukou kihei armodyne, Garfield Saving Arlene, Tales of Fandom Vol. 2.
The games will no longer require a patch to boot.
Add forum and license links.
Remove Developers and Contributors names, replaced with:
"Big thanks to everyone who contributed to the project throughout the years."
Separate and group hack types in to Rendering and Upscaling hacks. This
should help users identify better what some hacks do and make it a
little bit easier to use.
Rename Automatic CRC Level label back to CRC Hack Level.
Rename Accurate Date label to DATE Accuracy.
Rename Accurate Blending label to Blending Accuracy.
Remove 10x and 12x upscaling options, we don't want to hit the maximum
texture size limit and cause issues so better play it safe and allow
only up until 8x upscaling.
Reword the tooltip to make it a bit more fitting with it's current
behavior.
Add all games in the list that have some sort of aggressive state.
Update anisotropic filtering, autoflush sw, sparse texture, gl blending tooltips.
Fixes issue regarding a missing blade in Castlevania Curse of Darkness. User reported in Discord that any EE clamping modes besides full would work (they used Extra + Preserve sign, so we've done that here as well).
This commit add a patch for the game : Ecco the Dolphin - Defender of the Future
This resolve a race condition causing the game to hang on the main loading screen.
Fixes respawn issues as well as SPS.
Also add a missing DB entry for a JAP release of SC3 Trial. The demo
discs may not actually need the gamefixes so they aren't included.
Wasn't able to verify if the gamefixes are required for SC3.
This commit add multiples patch for various games.
F1 Racing championship - Fixes IPU hanging.
Sprint Cars 2 - Rearrange COP2 instructions to fix bad mac flag stuff. Fix for bouncing vehicles. Close#1991
Knockout Kings 2002 - Fixes DMA loop causing Hanging at start of fight.
Xenosaga handles the half bottom as an vertex offset instead of a buffer
offset which does the effect twice.
Half bottom won't trigger a cache miss that skip the draw because it is
still the normal buffer but with a vertices offset.
Issue #3147
This commit add several changes:
- Various serials updates.
- An Emotion Engine clamping fix to solve the inability of collecting items in Lemony Snicket's A Series of Unfortunate Events. Tested by atomic83github
- A missing XgKickHack fix for Crash Twinsanity.
- An adjustment of the fixes applied to Muppets Party Cruise which allow to make the game fully playable. Tested by atomic83github
- A patch for Superman Returns (Pal only) to fix major SPS ingame. Tested by kozarovv
- A missing Gif Fifo fix for Puzzle Quest - Challenge of the Warlords to correct flickering black and white sprites.
- A removal of Vif Fifo hack for Pippa Funnell which do not change anything.
- A XgKickHack fix for Eternal Quest which fixes missing blue lines on the characters in dark areas. Tested by atomic83github
- Several EETiminghack fixes to various games of the Hisshou Pachinko-Pachislot Kouryoku series which fixes FMV hanging. Tested by atomic83github
- A patch for namCollection - Namco 50th Anniversary which fixes a game hanging at the intro. Tested by atomic83github - PSI and Refraction
- An adjustment of the VU clamping mode fix for Pac-Man World Rally which require a higher value to work. Tested by atomic83github
- A patch for True Crime streets of LA which fixes a game hanging before going ingame. Tested by PSI
---------REMOVALS--------
EETimingHack:
- Blade 2 (replace EE TimingHack with GIF FIFO Gamefix)
- Buffy the Vampire Slayer
- Drakan The Ancient Gates
- Euro Rally Champion
- Obscure
- R-Type Final
- Muppets Party Cruise (replace EETimingHack with mVUFlagSpeedHack)
OPHFlagHack:
- Sphinx and the Cursed Mummy
- Buffy the Vampire Slayer
- Motorstorm Arctic Edge
------ADDITIONS```````
- Evergrace (Full EE Clamping - fixes hanging going in-game.)
On Direct3D11 FMVinSoftwareHack in combination with FXAA or External
shader enabled cause the emulator to hang. This is only a temporary
solution, a real solution would be to fix the fmv issue instead.
Previous skip value 6 wasn't enough and caused some visual issues on the
ntsc version. Use value of 8 instead.
Issue reported by ozzie212121 on discord.
Effect is properly rendered with depth emulation, so far only Burnout
Revenge triggered the crc hack from my testing.
Triggering the draw is done when the player car crashes.
* spu2-x: Fix crash with an invalid output module.
This will default to SDLOut.
Fixes https://github.com/PCSX2/pcsx2/issues/3124
* spu2-x: Create non-empty defaults for OutputApi and SdlOutputApi.
Avoid some function overloads that can accept char*, wxChar* and
wxString as a parameter. wxString can be constructed with either of
those parameters, so the function overloads may actually result in
ambiguity errors. Keep the wxString parameter versions and remove the
rest.
Fixes some compile errors on FreeBSD.
__try is used in pthread_cleanup_push when CLEANUP_SET is used as the
pthread cleanup model. That can't be used in functions with objects that
have destructors, so move it into a separate function.
Prevents compile errors on non-release Windows builds if other things in
the internal callback function change.
This commit adds VU rounding modes (Positive) to Asobo games (Disney-Pixar WALL-E, Disney-Pixar Toy Story 3) which produces small lines in game.
Also add missing PAL entries to DB for Disney-Pixar WALL-E.
This commit add a patch to solve a crash in the game "Fahrenheit".
Found with the help of the dev-9 plugin and the PS4 emu.
This is a game bug trigger by a timing issue. The game have an internal crash reporting system
which rely on a debug server connected to the console.
When the game do an error, it expects the debug server to be connected to send the crash dump.
But that never happen on PCSX2 as the debug server is not present.
Thus, the game will enter in an infinite loop at the asylum level.
This only happen when certain conditions are meet in the game.
This patch makes the game to exit the loop by cancelling the debug reporting.
On top of that the game have no frame pacing system in place which causes a massive slowdown in loading screens.
Thankfully, this can be patched out.
Note: NTSC version is fine and doesn't require the patch.
Tested by atomic83github
[107/641] Building CXX object plugins/GSdx_legacy/CMakeFiles/GSdx-legacy-1.0.0.dir/stdafx.cpp.o
warning: unknown warning option '-Wno-class-memaccess'; did you mean '-Wno-class-varargs'? [-Wunknown-warning-option]
warning: unknown warning option '-Wno-packed-not-aligned'; did you mean '-Wno-over-aligned'? [-Wunknown-warning-option]
2 warnings generated.
The pack command converts from RGB32 to RGB16/INDX4, not RAW8 to
RGB16/INDX4.
Also, the VQ conversion (still unimplemented) only occurs when the
output format is 0, so fix that as well.
On earlier versions (0.9.8) the KOSMOS patches were used to fix an
emulator crash on bootup, the patches are no longer needed and cause an
emulator crash on OpenGL HW before a race begins.
The intro video patch skip also isn't needed anymore since intro video
is emulated properly. So far the only issue I spotted on earlier
versions such as 0.9.8 was fmv screen shaking.
Bug Report:
https://forums.pcsx2.net/Thread-Regression-Bug-Report-Emulator-crash-with-game-Dakar-2?pid=602842
This fixes timing issues in Dynasty Warriors 3 Xtreme Legends
(fake save corruption), Jak II (random speedup issues) and Shadow of
Rome (FMV audio issues).
Also update the comments since a lot of them refer to past revisions of
the code.
Partially replace the Linux ini code so that it:
- works on both Windows and Linux
- is backwards compatible with older GSdx inis
- properly handles UTF-8 ini pathnames
Fix an issue with GSdx on Windows not being able to handle non-ASCII
ini pathnames.
Add Jak 1 Jap versions:PAPX-90222, PAPX-90223
Add Jak 1 Korean version: SCPS-56003
Add Jak 2 Jap version:PAPX-90516
Add Jak 2 demo EU version: SCED-51700
Add Jak 3 demo EU version: SCED-52952
Adjust/ correct some of the names for Jak games to better fit their
region name and wiki entries.
* cdvd: Fix off-by-one end of file checks
* cdvd: Fix loading for games that attempt to read non-existent sectors
Some games will hang when attempting to read non-existent sectors.
Just do nothing when it occurs instead of erroring out.
* cdvdgigaherz: Fix loading for games that attempt to read non-existent sectors
Some games will hang when attempting to read non-existent sectors.
Just do nothing when it occurs instead of erroring out.
* cdvd: Don't write non-existent sectors to blockdump
This commit add some explaination about what the EETiming hack does in "Enter the Matrix" and add a missing serial with corresponding fixes to it.
Tested by atomic83github
This fixes a semi-consistent regression introduced by #3056, where on_process_exit would execute before other destructors relying on pthreads.
Now on_process_init has been moved to an earlier section of static initializers, ensuring it will be initialized first. Previously, this initializer was placed in the same section as any other initializer, making their order of execution non-deterministic across compilations - for example, I was unable to reproduce this issue as soon as I forced pthreads4w.c to recompile last!
Fixes eyes rendering in Jak games both ingame and in cutscenes.
Previous method yielded no eyes in Jak 2/3/X cutscenes.
- Generalized offset search logic with caching system (works for BW > 1
and any PSM, limited to PSMCT32 for now)
- CRC Flags mechanism for default behavior enabling in Jak games
Fixes eyes blinking in Jak games with tex in rt search
enabled.
- Target TEX0 in Source is Source TEX0 if the Source is
not build from Target, otherwise it is the Target TEX0,
allowing improved Source invalidation
This commit add a FPU negative div hack to Crazy Frog Racer 2 to fix black fade effects and some overlays texts in the menus.
It also add EETimingHack on some missing Alone in the Dark revisions which fixes game hanging at boot.
Tested by Forum member:
- LoStraniero1991
This PR modifies a third party module - I realize normally those should be fixed upstream, but I really doubt pthreads4w would a) consider it a valid bug and b) fix it. To make all my changes easily visible, I wrap them all in #if PCSX2_FIX.
This PR fixes a process exit routine in pthreads. This third party module exploits CRT initialization order to inject their initializer/deinitializer earlier than the others by putting their functions in .CRT$XCU and .CRT$XPU pseudo regions. The problem comes when a module gets build with dynamic CRT (/MD or /MDd), like most of PCSX2 plugins, it doesn't actually use .CRT$XPx regions as terminators, and instead lets dynamic CRT handle them.
This PR corrects this issue by registering the terminator via atexit, so it works with both static and dynamic CRT. This resolves an issue where SPU2-X plugin (and potentially more) leaks TLS handles when unloaded.
Setting the toggle variable is now at the vsync point. FMV toggle should still work as usual, but the F9 toggle should have to wait the full period of around 32 frames. This seems short enough while also depends on how fast those frames can rendered, avoiding having to set a timer in ms.
Add XgKickHack gamefix for Dog of Bay., fixes corrupt textures. Issue
#3041
Add some crc ids. Big Mutha JP version(Bakusou Convoy Densetsu - Otoko
Hanamichi America Roman),
Jak X Public Beta v.1 US, Sly 3 EU Prototype.
This commit add an emotion engine rounding fix for Super Monkey Ball Deluxe to fix object balls never stoping in the Monkey Billiards DX minigame.
Tested by atomic83github
Fixes the noise generator outputting a 4.8 kHz tone instead of white noise. The random number generator used in GetNoiseValues currently repeats every 10 samples, which is really really awful for a random number generator.
New code based on http://problemkaputt.de/psx-spx.htm#spunoisegenerator
Add/update patches/entries for WWE SmackDown! Shut Your Mouth:
SLES-51283, SLKA-25030, SLUS-20483
Fixes freeze during entrances.
Add gamefix patch for Dead or Alive 2 SLPS-25026 JP.
Fixes game hanging on boot, fixes sound.
Add gamefix patches for Spider Man 3 US/EU regions:
SLES-54723, SLES-54724, SLUS-21552, SLPS-25823.
Fixes hang before loading level 2.
Issue #3012
Patch sources from thread:
https://forums.pcsx2.net/Thread-Fixing-unplayable-games
Developed a new SW sprite render function, which is used to fix
Jak and Daxter colors in Jak games and to remove the old Jak games hack
which yielded wrong colors and clashed with TC search texture in RT function.
- Remove OO_JakGames hack for palette readback from framebuffer (slow,
clashes with texture in RT TC function, clashes with Target readback logic)
- Developed new method SwSpriteRender with CPU rendering logic
- Add OI_JakGames method using SwSpriteRender for CPU palette rendering (fast,
does not clash with texture in RT TC function, no readback required)
Bonus: fps also sees an improvement in Jak games 3-5 increase.
This PR clean a bit the GameDB and add 2 fixes for:
-Ratatouille: Add vu round mode to positive to fix very minor lines appearing at certain points during the game.
tested by atomic83github
-Dog's Life and Wallace & Gromit in Project Zoo: Add vu clamping mode to extra+preserv sign to fix minor white SPS problem on characters.
Tested by discord member: LastBreath
This commit add FPU clamping fixes for Bully/Canis Canem Edit to fix the inability to take the bottle in the trophy case in Chapter 2: Hattrick vs Galloway.
Tested by atomic83github.
* Refactor build.sh. Restructure finding plugins. Remove legacy code. Add --clean-plugins option. Document --no-trans option.
Don't do setcap if dev9ghzdrk isn't being built. List dependencies if they are missing. Remove code related to zerospu2, and misc plugins we aren't building. Minor message changes.
2 pass fallback cases for the untitled scenario was mentioned in the TODO comment to be completed, added one of them. (Still doesn't seem reliable enough, but honestly when do we Also modified blank space indentation at a part to tab space to satisfy lightning boi.
Previously the blockdumps will be automatically stored in the root directory of PCSX2, added an INI option in "PCSX2_ui.ini" named "CurrentBlockdump" to modify the directory to whatever is preferred by the user. (Some people were requesting for this)
A GUI could also be added if anyone wants, but considering the popularity of this I'm not sure as blockdumps will only be used my less percentile of users and mostly by testers and developers for debugging.
It will allow to render the shadows properly.
Rendering pattern is:
Save RG channel with a kind of a TS (replaced by a copy in this hack),
compute shadow in RG,
save result in alpha with a TS,
Restore RG channel that we previously copied to render shadows.
- serials update along with a minor modification to siphon filter patches typo.
- Pac Man world 2 Timing fixes to avoid hangs at various levels. Tested by atomic83github.
- Missing VU clamping fixes for some EA sports titles. Tested by atomic83github.
Seems like Texture shuffle/depth is not handled properly in all cases so
revert the change until we fix it properly. Move it to gl level too.
Commit:
11cd6b56cd
With the sprite hack removed it was no longer possible to toggle this
hack on nvidia gpus, the toggle has been moved to Disable Safe Features.
It some issues caused by the hack in sotc, fatal frame and border offset
issues.
Added VU clamping to none for Ulitmate Ninja 2 to fix minor visual issues with lights.
- Tested by boberto5888
Added VU clamping to extra for Ulitmate Ninja 3 to fix minor visual issues with lights as well as missing QTE.
- Tested by boberto5888
Added beta trial serials.
- Tested by atomic83github
The adapter ID was needed to be passed before for a legacy DX9 hack which is no longer present, I figured it could cause a potential conflict when the adapter value stored at INI is outdated. (which is now a possibility after
lightning removed reference device)
The other alternative would be to just force set the INI value on dialog initialization to avoid unavailable values in the INI file, but that would be a rough for a person transitioning from debug build to release build using the reference device
option, so just removing this outdated variable for now, I rather doubt we'd be needing it in the future, in case we need adapter passing to subdialogs, the former suggestion needs to be implemented. Not implementing it right now since there's no need for it.
GsDump file can be optional in case you just want to launch the plugin config dialog.
Throw with a meaningful error message in case validation layer fails.
in vs 2019, the system xhash used by unordered_map uses Target in its template definition. pcsx2 #defines this in the r5900 and r3000 headers which leak cause a cryptic compilation error. A quick fix here is just to undef it in gamebase.h. A better fix would be to encapsulate the definition or use something more c++ to avoid the pre-processor. Add a comment to explain the _Target_ undef.
tap.h did not have string defined. I guess this was included transitively somewhere with an earlier set of system headers.
Biostools, the file is opened in text mode which causes the bios to be partially read. I'm not sure that's vs2019 specific but it's wrong in any case. Maybe the default mode parameter changed at some point. Maybe wxFile would be a better choice here rather than WxFFile because wxFile always open s in binary mode.
It is quite complex to handle rescaling on ComputeFixedTEX0
so this function is less stricter than GetSizeFixedTEX0,
therefore we remove the reduce optimization,
and we don't handle bilinear filtering which might create wrong interpolation at the border.
Fixes FFX upscaling issues on Bilinear filter during cutscenes.
comment
Remove some crc lookups for gamefix patches that share the same serial
and patch codes. It will allow game versions with different crc ids to
use the patches. Close#2654
Add JP version to automatic mipmapping.
Typical shuffle case is 1/2 height so other half is undesired
In dbz we split the depth buffer.
- Sample first half, write to `0x0`.
- Sample second half, write to `0x800`
- Finally, sample `0x0` though `0xffc`
Crash Twinsanity is a similar case.
A short summary how d3d option behaves compared to gl.
None d3d-> behaves the same
Basic d3d-> even less than 1/3 of Basic opengl.
Medium d3d -> less than 1/3 of Basic opengl.
High d3d -> 1/3 of Basic opengl.
Note: Medium and High options are mostly intended for debug use.
Add the remaining code and separate it in levels because dx sux.
Basic blending mode -> doesn't enable fbmask on texture shuffle and
triangle primitives.
Medium -> doesn't enable fbmask on triangle primitives.
High mode- > fully enables fbmask, note it's still not on par with
opengl because we miss sw blending for some games.
Also keep in mind that High Blending option on d3d11 is like 1/3 of
Basic Blending option on GL.
It works on games such as Fifa Street 1 and 2 (character and stage
rendering), mission impossible operation surma (shadow rendering).
It needs at least Basic level of blending enabled on d3d11.
Attention! Older savestates will be incompatible so please use a
previous older dev build (such as dev 3043) to save your progress on
memory cards instead!
Squashed commit:
[7955b42e3] recording: Throw errors on fread/fwrite errors.
[5a2160f9e] recording: Remove function implementation from header files
[f2937ab5f] recording: Fixed UndoCount metadata bug and will gracefully fail if savestate is missing
[d7f4d43e5] recording: Refactored code-style to be consistent
[0f77fbb71] recording: Refactor to use switch statements
[28d7945f6] recording: Resolve CMake warnings and use tagged github links for cross-linking to LilyPad
[7c01c6cb4] recording: corrected disparity between comment and code
[17a8bd8d6] recording: Remove all usages of #define
[3830f5a82] recording: Refactor enums and general cleanup
[569ef7d67] recording: Completely disable new console log sources when recording is disabled
Regressions were discovered after merging with master due to way the save state data was saved within the movie file.
This change uses the same functions used in the GUI to create savestates to create a compressed save-state file. Eventually this could be re-incorporated back into the recording file and could be backwards compatible.
This PR allow each fixes to by apply in all situations (such as exiting from the NETGUI utility). It makes these games completely playable in all cases.
Follow up from the previous commit which is bypassing the texture cache
when the frame buffer is sampled.
Crc hacks are no longer needed on opengl.
Note: it requires at least Basic blending support.
Proof of concept. It should provide a huge speedup when accurate
blending is enabled for tri-ace / Jak / R&C (shadow rendering).
See #2894
Need PR#2892
v2: Add const + comment to explain that code isn't ideal.
- Add simple logging infrastructure and further improve the existing one
- Delegate loading of dlls and dumps into dedicated loader classes
- Adjust user interaction to restrict updates to only relevant parts
- Gsdx dlls (dumps) are only reloaded when a new path for gsdx dlls (dumps) was given. That means dlls are not reloaded just because the dumps path was changed or another dump was selected
- When GSDumpGui can not find the specified settings folder or there is no setting saved so far it will look into the directory of the currently running application (however as before only exactly in the directory and not in subdirectories)
- Further decouple model, view and 'controller' logic.
- Restrict directory checks to application basepath instead of current directory as current directly is changed at too man places
- Avoid some minor memory leaks by disposing some disposable elements
Note: Net framework requirement has been increased to 4.0 to run/compile the application.
- automatically find the next free TCP port yielded by OS
- transfering currently used instance-fixed port to launched clients
- connect each client via given port
See #1637
This commit re introduces a partial patch to WRC avec sebastien loeb to fix a performance problem with a delay slot instruction.
Follow up from a58f56fa4a
Single triangle draw can now hit the tex_is_fb path.
Primitive Overlap will return no overlap for single primitive (triangle).
Ratchet and Clank, Jak, tri-Ace games.
It should improve shadow rendering.
Idea by Gregory.
This commit add the rounding fix for the international version of Final Fantasy X, a Emotion Engine Clamping fix for let's make a soccer team, a Emotion Engine rounding fix for Eternal Ring, and add the WRC avec Sebastien Loeb patch.
There are also several additions about Winback fixes for various regions.
Adds a separate author line for pnach entries. This will allow to separate comments with other info such as pnach purposes.
GameDB could be updated with the new changes for a more slick and clean look.
PlayStation Underground 4.4 is a set of 2 discs:
* SCUS-97120: PS1 CD (disc 1)
* SCUS-97121: PS2 DVD (disc 2)
Specific changes:
* Remove disc 1 since it's out of scope
* Change 4.3 to 4.4 in disc 2's name (4.3 doesn't include any PS2 discs)
Follow up from 6052614233
Fixes (black voids) central tower level loading.
Issue: Some doors leading to some areas appeared as black voids that you can walk in to.
Credits to @wgarvin0 for the patch.
Depth and channel shuffle rendered correctly on all renderers.
Also add some missing crc ids for Tales of Abyss.
PS: I'm ninjaing 3000 builds on the buildbot 😄
Allow to open Advanced settings and hacks window even when hw hacks are
off, this should allow OpenGL advanced settings to be configured even
when hw hacks are off in the gui since the options are configurable
wihtout depending on hw hacks checkbox.
Hw hacks will be greyed out when the checkbox button is not enabled.
New behavior will only be present on opengl hw gui. Direct3d11 will remain the same.
Don't set DATE true when Accurate Date is off, DATE is true anyway so
no need to set it again.
Don't call full barrier for DATE 45 at the date selection, do it
at the shader call check. It's the same, plus we avoid extra checks.
Change the name to Accurate Blending so it fits more with Date option
next to it, get rid of low/high end recommended nametag for the list and
just use Recommended for Basic level, lot of users seem to be using high
for "high end pc" which they shouldn't.
VuClipFlag hack is only used for SuperVU1 Recompiler, let's avoid enabling it when it's not used.
Previously a console message would be provided stating that "(GameDB) Enabled Gamefix: VuClipFlagHack" even when the user is using the Interpreter (or) MicroVU Recompiler. The following patch prevents such confusions.
Add GIFFIFOHack to NFL Street 2.
Fixes garbage graphics. Close#2857
Add vuClampMode None for Killzone, ShellShock.
Resolves I Reg Clamping / performance impact and yellow graphics in
certain areas.
Add eeRoundMode Positive for Constantine.
Resolves dumpster not being able to be climbed from front in level 2.
Clamp and round mode patches by @MrCK1
This will allow to save hotkey option toggling to the ini which
should fix gui updating with hotkey toggles.
Note: Render hw/sw switch doesn't work.
Also update some options that didn't have hotkey nametag.
Use a fixed size instead. It will avoid DPI scaling issues.
Also adjust the Special Inputs buttons height position so that the
window height remains a reasonable size.
There's no need to have duplicate images that basically do the same
thing. Update the gui to reflect latest changes and use the same images
on both. It will reduce plugin size.
Remove old images and update VS project files.
Hide all ps1 emu options instead of disable. Some options still got
enabled when they shouldn't have so just hide everything. This way we
avoid adding extra code, plus the gui looks cleaner.
Disable ini read/write for Analog ps1 mode, the feature was accidentaly
enabled for pcsx2. By looking at the code it should only be enabled for
ps1 combatibility mode. Also hide the option for pcsx2 as well.
Move around some of the hacks and advanced options to reflect the recent
changes.
1. Allow hrd colclip to also run on the unsupported
cases which should be pretty rare.
2. Remove colclip from high sw blending.
3. Disable the hdr colclip shader which may not be
actually required to run.
Idea by Gregory
* Use GLExtension::Has in cold path
* Throw error at first error
* Remove aniso check, all hardware support it. Bonus add GL4.6 extension support
* Remove viewport array check. We replace the function pointer anyway
Allow to compile on distribution that still ship an older file
The file is only a patchup of the missing 4.3/4.4/4.5/4.6 define
v2: rename the file and add khronos copyright
There are 2 extensions GL_ARB_debug_output (promoted from amd extension)
and GL_KHR_debug (the core extension, promoted from GL_ARB_debug_output)
As we use the callback we could drop the manual query of errors.
And save us the load of the GL_ARB_debug_output extension function pointer.
I used glcorearb.h as input file
Code is limited to core gl + KHR/ARB extension
GL1.X must be handled manually (need only 3 functions)
I think the solution would be to migrate gl.h/glext.h to the
single glcorearb.h. However we might need to update the code to fetch
pointer accordingly
Note: we don't check the null ptr anymore on GSwnd. It isn't important
as we check the extension.
v2: update copyright
v3: update copyright space
v4: update copyright of script
fix copyright
Fixes an issue with the window size and Show/Hide special inputs button
resetting when lilypad was closed and reopened, this was because the
code was executed only when the button was actually clicked.
The values will be properly stored in cache along with the rest already
working properly buttons.
Old presets touched parts such as VU clamping for what seems to be no good reason at all, and applied some rather dodgy combinations of EE cyclerate and cycle skipping. Also added MTVU to presets 3-6.
Upscaling issue with texture shuffle on dx and gl. Also removes shadows
on gl.
Bbox issue on dx.
Dumps from Sly 2 and 3 look fine after the merge.
Also add a crc id BF1739E2 for a prototype Sly2. I don't remember who
game me the dump or if it's official.
Improved handling of frame buffer copy by accounting for fb read on all slots.
- implement before/after draw functions
- defer setting of resources on the api to just before the draw
- use a bitfield to keep track of set/copied resources
- recycle copies after draw
Fixes: RE4 and Tales of Abyss
Assume that driver support is good when GL_ARB_texture_barrier and
GL_ARB_direct_state_access are both supported, disable the log in that
case.
Kaby Lake and above already support the required extensions (windows) so
the log is useless. It should be the same case for Skylake. Mesa driver
should already be good.
Note: SSO is still broken even on latest igpu.
Use a function to check UserHacks for all variables in GSState.cpp
instead of checking each variable individually.
Get rid of UserHacks_HPO local variables in GSRendererOGL/DX and use the
member variable m_userHacks_HPO instead, we don't need duplicates that
do the same thing.
Add ResetStates call at the beginning of GSRendererDX to match gl
behavior.
Pnach had a limit that, while increased at some point to 2048, is still not enough for everyone. This uses a vector to avoid that limit, as there is no reason to keep it and people loading pnach with over 2048 patches most likely know what they are doing.
Inipatch group member was also unused in the whole codebase so I did some cleanup and removed it.
Use value of 1 when upscale multiplier is 0 for ScalingFactor, this is
to avoid doing math with 0 in shader.
It helps custom res be less broken. Still not recommended to use custom
res ofc.
Game reads framebuffer depth as alpha of texture.
However, this is a problem for d3d11 as a shader read on the fb is not allowed.
So let's handle it in a similar fasion to channel shuffle:
- Set depth to slot 4
- Detect when slot 4 matches depth rt
- Copy and send the copy to the shader
Don't enable hack on native res if crc(ntsc only) is below aggressive.
Note for future so I don't forget: This hack can be disabled if depth
hack is also disabled.
We are removing MSAA for the following reasons:
1. It's broken
2. Fixing it would mean it would perform as well as FSAA, which defeats the purpose of having it
3. It's only supported by DX and Windows
4. Reduction in code complexity
Press F to pay respect
255.0f / 128.0f gives us 1.9921875.
128.0f / 255.0f gives us 0.50196078431.
Which are more accurate.
Fixes regression in dbz bt3 where characters appeared darker.
GSC_GodOfWar moved to aggressive state.
GSC_GodOfWar2 some value swere corrected (should fix some regressions)
and hack was moved to partial state because we have an upscaling hack.
Comment out unused variable sLogTable in DplIIdecoder.cpp.
Remove DPLII.h from cmake list, it's unused so don't list it.
Some people suggested to keep the source files even if they are unused
so we can do that. Maybe someone will get the code to work properly.
Idea is to disable multiple features in 1 option to avoid gui clutter.
Unscale Point and Line:
This partially reverts PR #2710 restoring Unscale Point and Line but as a disable option.
It can help Xenosaga games.
GS Memory clearning:
This disables GS memory clearing to be done on the CPU, by default both gpu and cpu do memory clearing
which is more accurate.
It can help Kingdom Hearts games.
The warnings issue should be resolved now thanks to arcum.
Fixes compiling issues on some systems/distros using gcc 8.2+
Idea by turtleli.
Also add -mfxsr flag suggested by Gregory.
Get rid of GetLinearSrAr code, it wasn't used anywhere so I don't see a
reason why to keep it, other than clogging up the code, if someone wants
to work on it they can re add the function in the future.
Hack removed depth effects which are rendered properly. I wasn't able to
trigger a skip on the other hack draw calls, they need to be
investigated further what they actually did.
gcc complained about "Wno-packed-not-aligned" and "Wno-class-memaccess"
flags so I won't bother with it, the warnings can be fixed properly
but for now I'll just revert the previous commit.
A couple of users reported compilation issues using gcc 8.2+ on some
machines/distros on github and discord and adding the -mxsave flag
suggested by turtleli seems to fix the issue.
Fixes#2669
It ensures the code cases are hit properly for all DATE selection cases.
Texture shuffle case with Slow DATE is not yet supported so keep using
the old DATE method.
Some games don't play nice with the option and have huge amounts of
ram/vram spikes that can even lock up the system so it's better to have
the option disabled by default.
Fixes an issue when the plugin detects an opencl ini value for the
render. It used to throw a "GS plugin failed to load" error when opencl
was disabled but the ini value remained the same. The render will
fallback to D3D11 now.
Remove GSCrc.h include in GSRendererHW and GSRendererDX11, file is
already included in GSState.h.
Remove GSRenderer.h include from renderers except Null and CL, file already
included in TextureCache hw/sw.
Remove resource.h include from GSRendererDX11, already included in GSDevice11.
Remove GSOsdManager.h from GSDeviceOGL, already included in GSDevice
Game has upscaling issues so let's only add the hack for upscaling,
also merge the two regions together.
Hack will be disabled on native res if crc is below aggressive, upscaled
is set to partial level.
Purge dbz bt3 crc hack that removed outlines, I don't want to mix it
with the depth effect hack that I also moved to aggressive.
Move depth hacks for ntsc region to aggressive state.
The hack was used when depth emulation was not supported or when depth
is disabled.
It causes graphical glitches with the faces when depth is disabled.
Update CopyOffscreen to accept the ps_shader value when doing StretchRect.
This fixes an issue where it was selecting the wrong PS for depth cache read.
Should (hopefully) fix SMT.
Switch to using opacity since this is how most software works.
Transparency is simply confusing to the average user.
Linux/Windows GUI to be updated in later commits.
Remove DATE shader macro and bit.
Remove useless HasStencil case. If DATE is enabled stencil is also
enabled, this check is useless.
Remove leftover rt and rtCopy code case from d3d9.
Remove traces of rtCopy and sampler in slot 2.
rtcopy
Code was never hit on D3D11. D3D11 uses stencil operations.
Also Remove VS_RTCOPY which was used only by d3d9.
Remove RTCopy Sampler from the shader.
tfx rtcopy
Remove one crc hack for GSC_HauntingGround. It skipped some depth
effects. Correctly rendered now
Remove all crc hacks for GSC_FrontMission5.
Texture shuffle, depth emulation and enabling Preload Frame Data
emulates the effects correctly.
Add a note for GSC_Tenchu for future testing.
And the time has come to say good bye (good riddance?), this build removes Direct3D9 entirely from GSdx. D3D9 is/was holding us back in some D3D11 fixes that we want to further implement.
The last build that supports D3D9 is v1.5.0-dev-2779-g1a61148b0 for anyone still interested.
"Press F to pay respect.
D3D9 will be broken once #2756 is merged so let's disable it to avoid
any potential crashing if the render is selected.
Complete D3D9 purge will shortly follow afterwards.
Dfmt in texture shuffle function already picks the 16 format on slot 2
so it's better to let it call the shader instead of aout.
We can keep old aout code until FbMask emulation is added on d3d11. We
can purge aout along with alpha hack then.
Added fixme note.
Fixes recent regression on Soul Calibur.
It helps isolate psm.depth when it should and shouldn't run even if
sampling isn't supported yet.
Finding Nemo depth issue remains.
People can use the option to disable depth for now on that game.
I'm seeing better results with this skip not included.
So far DBZBT, God of War, Haunting Ground seem better.
Depth sampling is still not yet added.
Also fixes a regression in GT4 when depth was enabled because the skip
function was misplaced. Other games might've been affected as well.
Move texture shuffle (shadows) hack to aggressive state.
Adjust water/hell effect crc hack - don't enable hack on native res if
crc is below aggressive, enable if resolution is higher on dx and gl
state.
Idea is to allot partial support of depth fmt on the new depth convert
format, this way we can utilize channel shuffle on Red, Blue or gXbY
channels with depth shader conversion.
Terminator 3 hits this code path and seems to fix a transparent wall.
Other games will probably benefit from this as well.
Split the code from GSRendererDX to GSRendererDX9 and GSRendererDX11. We
ensure d3d9 doesn't blow up with regressions, add required code to
GSRendererDX11 to properly support channel shuffle.
Note the feature is still not yet complete, copy function needs to be
implemented (suggested by Gregory) but it can be done at a later date,
this still fixes a bunch of issues on various games.
The hack caused glitches to appear on the right side of the screen, the hack was used as a workaround to properly display game ui elements however it is no longer needed on opengl and d3d11. The ui elements are rendered properly with Depth Conversion.
Shadow issues are solved with at least partial level crc hacks.
See https://github.com/PCSX2/pcsx2/issues/2692 for more detailed information.
1) Refactor palette comparison fast path mechanism to avoid using mutable member of Source,
2) Attach palette to texture as soon as needed,
3) Bugfix attach CLUT copy only when pal > 0.
NTSC only.
I don't know what the "impact screen" crc hack did since the dump didn't
show any difference so that may need to be updated as well.
Note: I only tested the JP version.
Add support for dss_write.
Enable writing in depth buffer for dss_write,
when depth conversion is active data will be writen in the depth buffer,
if not then use the old method (don't write).
* spu2-x: Fix warnings regarding initializing with memset/memzero/etc...
* Use fill_n instead, per turtleli's suggestion.
* spu2-x: Comment out StereoOut initialization.
* spu2-x: As requested, remove commented out code.
The game still has a bunch of depth and other issues even on gl and it
doesn't play nice with the blur effect as well. Perhaps the hacks can be
changed to work better but for now enable it on native as well.
Fixes ground corrupt textures caused by the hack on the EU version.
US works fine with skip 5 but not 4. Didn't spot any regressions on both
so far. Might need extra testing by users.
Idea is to allow Alpha Stencil to work with Fast Date.
Let Fast Date run for the supported calls since it's more accurate, let
Alpha Stencil take care of the rest.
This might fix some issues where Alpha Stencil caused some issues making
it a bit more accurate.
It fixes a bunch of shadow/transparency issues.
Fast DATE doesn't rely on the gui option and is always on.
Confirmed fixed issues: Persona 3 shadows on d3d11,
Digital Devil Saga Transparency d3d9/11.
Fast accurate date works the same/similar to OpenGL.
Confirmed fixed issues: DBZ BT3 ground shadows, Fifa Street 1 shadows
on all d3d renders as well.
Also this option doesn't cause other transparency issues like the
Alpha Stencil hack.
Note: If Alpha Stencil is enabled Fast Date and Fast Accurate Date will
be disabled.
Note2: Full Accurate Date is not implemented so the code fallbacks to
Fast mode instead.
Commits:
3ab12cef2f584397a3fd
This will probably be the last feature d3d9 gets before getting purged.
Move Enable User Hacks at the top. Otherwise spacing looks weird.
Large Framebuffer should be next to Allow 8 bit textures.
Move Accurate Date and Accurate Blending at the bottom (similar to windows).
Suggested by Gregory.
Change the checkbox to a drop down list Off, Fast, Full.
Off and Full do the same as before, the Fast option is new. Most of the
time users don't actually need full Accurate Date so why not reduce that
cost and use a fast mode instead, plus it can also be used on a gpu with
a limited driver. Also change the default value to Fast instead of Off.
Always enable unscale point and line hack on upscaled resolutions, and
purge the gui option.
It was discussed in the past with Gregoy that it can be enabled without
causing any issues which will be beneficial to getting rid of 1 less
option and fixing a bunch of fmv issues without relying on a gui toggle.
Fix GSVector4i::compare64 function by adjusting the number of iterations
needed to cover the comparison of all the elements of the input arrays,
where the number of bytes to compare is indicated in the size parameter
of the function.
The function is used only in GSdx-TC to compare CLUT arrays.
On one hand this fix closes the recent #2706 and possibly the color
regressions indicated in #2702 (which were both introduced with the new
PaletteMap mechanism, which partially replaced the GSVector4i::update
logic with the bugged GSVector4i::compare64).
On the other hand this might impact long standing wrong texture cache
lookup when palette was involved with 8-bit palette disabled (to be
verified which ones).
Close#2713Fixes#2706Fixes#2715
Fixes right half screen issue on TalesOfLegendia. UI elements of the
screen are properly emulated with depth emulation on gl (possibly fixed
by
1cc696ab31).
Shadows will be glitchy if crc hack level is below partial level.
I'm not even sure if the hack is useful at all anymore since it
introduces issues now.
Issue #2692
Makes character shadows work properly.
Also remove crc check to make the Russian version work.
Testing was also done by @ivan89el.
US and EU regions only.
gui: Move the Off option to the top instead of bottom for FMV Aspect Ratio Override.
It's not ideal for it to be at the bottom.
Adjust the logic how the button works, there was an issue if both aspect ratios
were the same the aspect ratio chosen was selected to Fill.
Also adjust the code so the button better responds to realtime toggling.
If disabling the button realtime during a fmv then the normal aspect ratio
should be chosen.
There's still an issue left where if the fmv button is changed first and then
the aspect ratio button the button would would not work. Switching it off
seems to reset and make it work again.
Change "Switch to 4:3 aspect ratio when an FMV plays" to
"FMV Aspect Ratio Override" drop down menu.
The option temporarily changes the Aspect Ratio to either
16:9 or 4:3 depending on the option that is selected,
and depending on the Window Aspect ratio that is selected.
Original commit:
8d471e1f16
Co author: lightningterror.
The code was never working properly ( tested by @tadanokojin ) so let's
clean up and remove it. If someone actually wishes to maintain it then
they can re add it and update the code to a functional stage.
Cutie Chinese comments, they were removed in commit
21522e71b2
It's better to have google translated comments than nothing, at least we
have something to go on when doing future testing.
Also ghosting and blur crc hacks might need to be updated as they may
not be necessary on native res only.
List: GSC_Tekken5, GSC_TombRaiderUnderWorld, GSC_XE3, GSC_AceCombat4,
GSC_SoTC, GSC_ResidentEvil4.
Note: I left GSC_ValkyrieProfile2 in there because it might need to be
re enabled for dx, someday will look in to it when I'm up for the task.
This pull request is for the pending reorganization of the folder structure on GSdx,
making it better organized and easier to work with.
Also remove unused GSTextureFX.cpp file.
Enabled caching of clut copies with PaletteMap also in the case 8-bit texture is disabled, which is the default (on #2344 the caching of clut copies and palette textures was done only when 8-bit texture was enabled).
Brings moderate speedups ~10% in the most concitated parts of the ZoE2 Anubis benchmark, but may improve performance in all the cases when there are many Source objects created with clut copies to be stored.
The quality of the comments has been improved to better highlight the mechanics of the caching system.
Removed crc id 0x7D4EA48F and mentions of that id and it's duplicates. The id is from a multiloader when packing images, and not an actual crc id from a game(s).
Currently, none of the EE kernel is viewable from the debugger, which poses issues when debugging code that makes use of syscalls. This PR should allow the memory region 0x80000000 - 0x800FFFFF to have readable disassembly.
This follows the 4th point of #2310.
The idea was to rework the current palette texture management to improve performances with games that uses multiple palettes for the same data texture.
The new management shows small to none performances improvement in almost every game in terms of FPS, and it lowers the GPU BUS usage by some percentage points in games like Baldur's Gate: Dark Alliance (9% to 7%) which uses many palettes.
The hot topic is that the performances in Zone Of The Enders 2 skyrocketed (2x), because of the fact that the game uses many palettes and a small number of textures to render it's effects.
For more detailed information check the PR #2344
Fixed typos, grammatical errors, several inconsistencies with words and terms, changed some words that had a wrong translation or could be improved according to context and translated some untranslated terms.
Some users get confused and change the setting to a recommended option.
This can cause some issues when switching different hw render types.
Most of the time users shouldn't change the option and leave it on
Automatic.
Also remove ICO from crc Aggressive tooltip.
When updating from a higher wx release this change needs to be rechecked. The change was also included on the current 3.1.2 branch https://github.com/wxWidgets/wxWidgets/pull/1000 so this is essentially a backport (to 3.0.2 I believe pcsx2 uses ? ).
Only impacts custom resolution, there used to be a much weaker algorithm
which doens't consider scissor sizes and gives a minor performance boost
in costs of accuracy (which was used when large framebuffer was disabled
in custom resolutions)
I've removed this as the performance tradeoff is rather negligible after
the implementation of #1942 and the older one is no longer necessary.
Also added an extra parameter for considering the horizontal scissor,
I'm not sure where this might be useful so this is disabled in code for
now till I discover a testcase where this helps or run it on random data
ensuring it's working properly.
Also porting this to the general scaling function might help with memory
spikes which are experienced when large framebuffer is enabled.
We can't do a full port because channel shuffle and depth sampling need
to be ported to d3d but at the very least we can do a partial port that
skips the bad draw calls.
This way we can remove all the remaining crc hacks for ICO in GSHwHacks.
This should make things a bit easier for users when picking resolutions.
Native (PS2)
2x Native (~720p)
3x Native (~1080p)
4x Native (~1440p 2K)
5x Native (~1620p 3K)
6x Native (~2160p 4K)
8x Native (~2880p 5K)
Custom (Not Recommended)
Change the code so that some crc hacks on some games that remove
ghosting/blur issues on upscaled resolutions are disabled on native
resolution if crc hack level is below Aggressive state (most of the time).
They aren't needed then so why don't we aim for better accuracy.
Follow up from #2586 which ensures that MAC address is unique on Xlink Kai when using Windows.
Previous build was returning last two bytes as 00:00 rather than last two bytes of host adapter's MAC.
Let's keep the file clean and use 1 type of formatting and not a bunch.
It's easier to read this way and looks tidy.
Also correct some commented out code in Texture Sampler.
Hack will no longer be active on Intel or AMD gpus.
Also remove UserHacks_disable_NV_hack. sprite hack
basically does the same thing so it's kinda useless.
Some values were incorrect, now I'm no expert but looking at the code
and behavior seemed a bit wrong compared to gl.
Improves d3d rendering on Sonic Unleashed, the purple screen is gone
matching it with gl visuals.
If the entry separator (line of dashes) is found, assume the multiline
section end tag is missing or incorrect and stop parsing so that it
doesn't affect subsequent database entries.
Also improve the error messages so it is slightly more clear what the
error is.
dfmt is not supported but we can use the variable to select the
frame buffer format and later disable writting to the alpha channel.
MGS3 sees an improvement, and possibly other games as well.
So far didn't spot any regressions.
Commit:
d29e375f72
Only native res is supported currently, but it's still great progress.
Someone needs to port the ScalingFactor to D3D from commit:
6121677aa1
Credits to KrossX for porting the shader.
With these changes, saveslots will be labeled as either empty or
with the date that the file was last updated on. The menu items
for loading them are also disabled if the slot is empty.
It's possible if you are very fast to access the menu before the
slots change. It updates when the crc changes. When you save a saveslot,
the menu item also changes to show the time you told it to save until the
file is actually done saving.
Also fix an issue with backup saveslots not working properly from the
gui on first load.
This reverts
93d5b52df3f3e78b826755155ca7f1.
Unfortunately wxString stuff is a PITA to deal with. Breaks FreeBSD
compile, but there are probably more issues that just haven't been
reported yet...
__try is used in pthread_cleanup_push when CLEANUP_SEH is used as the
pthread cleanup model. That can't be used in functions with objects
that have destructors, so move it into a separate function.
Fixes a non-release build compile error on Windows. Regression was
introduced in 93d5b52df3.
Adjust gui accross various gui windows.
Adjust naming, positioning of buttons, spacing ...etc.
The different windows should look more similar and not be different.
Also purge IDD_XAUDIO2 window that wasn't used anywhere.
Add a missing crc id for the US version,
, move the crc to DX level - effect is emulated correctly on OpenGL with
depth,
merge the two Yakuza hacks together and reformat it making it easier to
be read.
Skip 3 also seems to work on Yakuza 2.
Related commit:
7f0f19ee02
Reformat the code a bit, ocd satisfaction.
Avoid some function overloads that can accept char*, wxChar* and
wxString as a parameter. wxString can be constructed with either of
those parameters, so the function overloads may actually result in
ambiguity errors. Keep the wxString parameter versions and remove the
rest.
Fixes some compile errors on FreeBSD.
The GameDB multiline section parser is rather flaky as it will not
recognise a closing multiline section tag if there is trailing
whitespace.
Fixes an issue where 136 games are devoured by the parser (9632 -> 9768).
Fixes an issue where the first breakpoint after rebooting a game may
be skipped if the following sequence takes place:
- The first breakpoint after booting the game is triggered once.
- The user hits run to resume the game
- The user reboots the game without any other breakpoint being
triggered.
It doesn't provides much of a performance improvement over directly
using an unordered map. This change also means that if there are
duplicate GameDB entries then they'll be merged together instead of
having only the last entry take effect.
Also increase the unordered map reserve size.
Converting the string to lowercase is unnecessary when the actual entry
is still case sensitive.
Also just use std::hash of std::string and std::wstring instead, which
fixes a FreeBSD compile error (cannot convert to const char*).
There's no need to have a lot of overloads accepting wxChar*, char* cand
const wxString&. Keep only the const wxString& versions and remove the
rest. This fixes an infinite recursion warning on FreeBSD.
Also simplify sectionExists and getSection to avoid unnecessary
conversion to and from wxString.
There's no use for it now that the database editor has been removed.
Also remove the Game_Data POD comment because I don't think it makes
sense and remove an unused variable.
This prevents the dialog from preserving state after it is closed, which
simplifies the logic slightly for reopening the dialog.
Also remove an unused variable.
* Enable logging from new source, PS2 system output
* Enable printf formatting with (up to only 7 currently)
* Fix fallthrough bug in SYSCALL switch/case
* Remove unnecessary memread32 call in sysPrintOut case
It has too many issues:
- It's in an incomplete state. The ListView isn't connected up and I'm
not sure what it was supposed to do.
- Comments are stripped from the database when changes are saved.
- Some key value pairs do not show (EE/VU clamp/rounding and
MemCardFilter).
- It doesn't work well on Linux (though this one seems easy to fix).
Unfortunately it's better to disable this for now, due to problems with
clang-format version mismatches between what devs use and what the
buildbot uses. There's also problems with availability of specific
versions on non-Windows systems.
Re add point sampler to OpenGL. Fixes graphical issues when
Allow 8-bit textures is enabled on AMD gpus.
Issue: https://forums.pcsx2.net/Thread-GSDX-Hardware-mode-Bug-Report-Allow-8-bit-Texture
Adjust the code to be easier to read, and execute the gl code only on amd - suggested by Gregory.
Remove useless ATI_SUCKS define in tfx shader.It wasn't used anywhere outside of the shader.
Enhance the skipdraw hack by allowing skipdraw to skip a range of draw
calls.
For example: When the broken effects are at frames 90-100, the default
skipdraw always skips 0-100, possibly skipping several functioning
effects as well. By enhancing the skipdraw feature, it is now possible
to skip just frames 90-100.
For the example given above set the first box to 90 and the second box
to 100 to skip frames 90-100.
coauthor:turtleli (Linux GUI + tidy/simplify Windows GUI code)
Decrease spacing between Hardware Settings and Texture Filtering
slightly. It was a bit too much before,
Adjusted spacing to be equal between options, some had incorrect
spacing.
Maybe Accurate Date and Blending Unit Accuracy can be swapped.
Fixes a compile error (C2666) on VS2017 15.8 caused by ambiguity issues.
The sstream header uses
constexpr auto _both = ios_base::in | ios_base::out;
Without the extra type restrictions the compiler cannot tell whether to
use the template or the built-in | operator (the const wxSizerFlags &
parameter will accept ints).
Makes all the tabs scrollable, which makes the dialog more usable (the
OK button should always be present unless the screen is absurdly small).
Only checked on GTK3.
Use hexpand instead of expand, and use margin-start instead of
margin-left (margin-left is deprecated in GTK+ 3.12). IMO it looks
better this way.
Also, set the properties using gtk_widget_set_* instead of g_object_set.
Adjust/tidy up the gui to make it more appealing,
some bad positioning has been fixed.
Properly grey out Audio Expansion Mode text when
the option is inactive.
EEClampMode to full.
Fixes material stretching across screen that appears for a split second.
Other regions could probably need the gamefix but need to be tested
first.
Close#1436
Add God of War Demo ntsc,
Add Burnout Takedown E3 Demo ntsc,
Adjust regions for Harry Potter ATCOS/ATPOA,
Add comment for crc 0x7ACF7E03 - multiloader.
Chamber of Secrets/Prisoner of Azkaban: Add gamefix patches to make the
games playable/bootable. Some regions that don't have the patches added
still need testing for verification.
Add some missing regions to the DB for the above two games.
Automatic mipmapping: Harry Potter (Chamber Of Secrets,
Prisoner of Azkaban, Order Of The Phoenix), The Incredible Hulk:
Ultimate Destruction.
Add some missing crc ids for GT4 demo discs.
This PR add an emotion engine rounding fix for Conflict 4 which solve bad character behaviour, 2 VU Xgkick timing adjustment for K-1 World GP 2006 which solve missing colors on the fighters, 1 VU Xgkick timing adjustment for Mahou Sensei Negima! Kagai Jugyou which solve bad rendering, comment adjustment for Socom 2 fixes and a missing entry.
Fixes some issues with opening ini/log files when the path contains
characters that are not present in the current codepage for the
following plugins:
SPU2-X
LilyPad
cdvdGigaherz
Dev9null
USBnull
FWnull
Adds a helper function for converting UTF-8 to UTF-16 on Windows. Also
adds a fopen wrapper function for pathnames that may contain characters
that are not present in the current Windows codepage.
Fixes empty log and ini directory paths being passed to the plugins on
Windows when the pathnames contain characters not present in the current
system codepage.
Fixes the inability to create snapshots when the pathname contains
non-ASCII characters on Linux (Windows requires more pathname handling
fixes).
Adjust Spartan crc hack: Combine/ease the hacks in to one.
Only remove the glow/yellow bloom effect and don't skip any other effects that shouldn't be skipped. UI and some other post processing effects work properly now.
Add crc id CrashBandicootWoC RU.
Add some missing RU crc ids: Onimusha3, ICO, TombRaiderUnderworld, SoulReaver2, LegacyOfKainDefiance.
Removed crc id 7ACF7E03 and mentions of that id and it's duplicates. The id is from a multiloader when packing images, and not an actual crc id from a game(s).
Add FinalFightStreetwise RU, SoulCalibur3 RU. Correcting the wrong id TenchuFS RU (the elf was modified widescreen cheat, sorry). Delite Kunoichi RU (the elf was modified widescreen cheat, the original coincides with the EU).
Remove the EE Timing hack from the Full Spectrum Warrior Series, my tests show that it doesn't do anything.
Disable the mVU Flag Speedhack for Spectrum Warrior: Ten Hammers. This fixes bad graphics in FSW.
Move a hack that removed burning/hot air effect. The effect is rendered properly but causes slowdowns so it's best to move it to aggressive for now.
Add comments explaining what the crc hacks do.
This PR add an Emotion Engine clamping fix for Drakengard 2 (tested by Shadow Lady), and Mvu flag fix for Full Spectrum Warrior (Tested by CK1) along with missing serials entries.
It also adds MemCardFilter for Galaxy Angel II - Mugen Kairou no Kagi to be able to recognize the progression acquired from the first disc.
Ease the crc hack and skip less effects, makes shadows and some other effects work properly.
The game experiences a bit more upscaling issues which can be resolved with Merge Sprite and Wild Arms offset HW hacks.
This PR brings some patches to fix various unplayable games (made by Prafull).
It also adds comments for Savage skies to warn users to use the interpreter + cache, a missing rounding fix for some versions of Shin Megami Tensei 3, and an Emotion Engine timing fix for NBA Shootout 2003 (tested by someother1ne).
In games like ICO where the render and blanks both need to be rounded,
one was prioritized over the other one leading to a truncated value in
the total vsync cycles. This patch fixes it, it's more or less for a
trivial cycle accuracy rather than a signfifcant change which might
influence games. (Not sure, maybe it would?)
Potentially it might be nice to revamp the whole vertical blank
calculation system to make it more readable (discussed about this with
ref), but it's not of much priority right now.
The C spec states that the va_arg argument value is indeterminate after
returning from vfprintf. va_end and va_start must be called before the
variable is reused.
Avoid always setting the dialog to the centre of the screen - the GTK+3
documentation advises against it.
Avoid using a GUI callback - it's unnecessary since the value can just
be retrieved afterwards.
Simplify the GUI construction - a container to handle layout isn't
necessary due to the GUI's lack of complexity.
IOCTL_SCSI_PASS_THROUGH_DIRECT will return success even if the read
fails (I'm not sure when it'll return failure). Assume the read is
successful only when the read length is correct.
This isn't the right fix for this game, the text issue is caused due to a bug on GSdx depth test, and is not a
core issue. These rounding modes for some reason only partially alleviate the issue (https://forums.pcsx2.net/Thread-GSDX-Software-mode-Bug-Report-Teen-Titans-Load-Game-menu-not-displaying-text-where-it-should)
while not fully fixing it, ZeroGS on the other hand doesn't have this issue even without these rounding mode changes.
TL;DR - Issue is on GS, and it's troublesome when a GS issue is masked like this.
This reverts commit 4765770dc8.
Add EE patches for Spyro New Beginning and Eternal Night NTSC/PAL.
Fixes HUD and menu display in hw/sw mode.
Original patches provided by Kozarovv, improved by Refraction.
Purge Hw hack fixes for Spyro New Beginning and Eternal Night that fixed
HUD and menu display.
They will be replaced with EE patches in GameDB that work for both
software and hardware mode. A much better alternative and less GSdx
hacks.
Port from commit b0af54d3
Fixes shadows in Star Ocean 3.
Note: It works properly on native res only just like on GL.
Upscaling will cause some issues.
Only Direct3D10/11 supports it, D3D9 doesn't support integer operations
so we can't reuse the code.
This PR add an Emotion Engine Rounding fix Rayman Revolution (nearest).
- Tested by @atomic83github @prafullpcsx2 and @Helium-4
It also add a missing demo entry along with dedicaced comments for some demo issues.
[skip ci]
Remove disabled patches for GT4 and Wallace & Gromit.
Reformat code (Adjust whitespaces, empty rows, code comments).
It should look much cleaner now, there's still a lot more to be done but
it's a good start.
Revert merge of Spyro Eternal Night / New Beginning hw hack.
Update Spyro New Beginning hack - fixes menu/hud flicker in HW mode.
SW mode still has issues with the menu/hud elements.
Improve #1490
This commit remove the EETimingHack for Vampire Night wich is not anymore needed due to a fix in PCSX2 0.99, add fixes for various Armored core games as well as some code cleanup.
[skip ci]
clang and earlier GCC versions do not provide the _xgetbv intrinsic.
GCC8 does, but unfortunately it's broken.
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85684).
Re-use our _xgetbv implementation to avoid the bug, but rename it to
avoid compilation errors as well.
Add ScarfaceIbitHack gamefix to Scarface The World Is Yours (NTSC-U) SLUS-21111 and SLUS-21492.
Change Scarface Compatibility to 5 to the above two games.
Add code comments to Harry Potter and the Chamber of Secrets (PAL) SLES-51192 and (NTSC-U) SLUS-20576 explaining that they both share the same CRC id.
Update the patch for Dead or Alive 2 Hardcore.
Previously the patch had a side effect of removing all sound effects in
the game, this new patch doesn't have that issue.
The patch was improved by kozarovv.
This patch is for the PAL version SCES-50003.
Add copyright header information to files that didn't
have any. The info is copied from files that already
had copyright information.
Add info for Alessio when he last commited.
Add PCSX2 Dev Team in copyright information.
The following games in the crc list are not used anywhere so
we can clean this list up. If some are needed in the future then
they can be re added.
List of removed games:
CaptainTsubasa,
Dororo,
HarvestMoon,
Jak1,
JamesBondEverythingOrNothing,
NamcoXCapcom,
SDGundamGGeneration,
SeintoSeiya,
SengokuBasara,
SilentHill2,
SilentHill3,
Siren,
TalesofDestiny,
VF4,
VF4EVO.
The crc hack broke graphics ingame, causing flickering/transparent
textures and other similar issues.
On a side note the game experiences upscaling issues that can be fixed
with Half Pixel offset hack.
* GameDB: Minor info-alterations
* CRC removal
* Correction of a regional-code.
* Deleted some incorrect info
* Oops - re-added some info
* Minor alterations.
* A minor alteration.
* Minor alterations.
Update it to the version found at
https://github.com/Microsoft/Windows-classic-samples , which is in an
MIT licensed repo, and add the LICENSE file (edited to remove the SIL
Open Font LICENSE part since that doesn't apply).
Some modifications have been made to reduce the diff/stop git
complaining (not including any file that wasn't in the previous version
and removing the related header includes in streams.h, and fixing some
but not all of the whitespace issues).
Move CRC hacks do DX level.
Hack that fixes shadows:
Shadows/glitchy black ground textures can be fixed with Preload Frame Data.
Hack that removed vertical stripes:
D3D10/11 correctly emulates texture shuffle but also needs depth support.
Don't skip draw calls on Jackie Chan Adv and SVC Chaos,
fixes regressions on Jackie Chan Adv and SVC Chaos.
Gregory: The correct fix would be to trace all textures writes to
be sure of the source. But it is a much bigger work.
This syncs the cheats_ws.zip widescreen patches archive with Devina's
archive from 22.02.2018.
Compared to the previous content of cheats_ws.zip:
- 4 files deleted 9C4BA2CE, 113035B9E, C565E79E and duplicate 1429EB9F (2)
- 142 files modified
- 760 new files
- 2294 files identical to before
- 28 files that were removed from the forum archive that contained hunting/fishing
games have been re added. Separate archive provied by FlatOut.
The zip now has a total of 3200 patch files, compared to 2440 before.
7zip with the Ultra compression method was used to compress the archive.
Remove mention of Crash Tag Team Racing from VU I bit gamefix tooltip.
Not needed since the gamefix has been removed for the game as it causes
more issues.
Revert ScarfaceIbitHack Gamefix.
Regression was introduced in #2326.
Caused hard freezes making the game unplayable and required an emulator
restart without gamefixes enabled.
Without the fix the game experiences short freezes but the game is still
playable.
Purge Sengoku Basara crc hacks. Texture shuffle is emulated correctly on
d3d11/ogl. d3d9 skips the bad draw call.
Move Eternal Poison crc hack to d3d level. Not needed on ogl since
the game is emulated correctly.
Move hack that removes texture shuffle for Demon Stoneback back to ogl level,
half screen bottom issue remains.
Extent CRC hack for The Getaway and The Getaway Black Monday to work on
EU regions.
Move CRC hack that removed shadows to Aggressive, shadows are misaligned
when upscaling - can be fixed with HPO. We can use the hack as a
speedhack for Aggressive state.
Add correct FBP code for Sly 2 E3 Demo. CRC hack should work properly now.
Purge God of War 1/2 CRC hacks that fixed/removed the vertical red lines.
No longer needed since the issue is fixed accross all renders.
Also useless to be kept for speedhacks.
Texture Shuffle changes:
Always Enable Texture shuffle on D3D10/11.
Previously Texture shuffle was enabled if CRC hack
level was below Full, this was kinda not good since
D3D also relies on CRC hacks on Full so you could either
stick with texture shuffle or crc hacks.
Texture shuffle is not supported on D3D9, however we can do a partial
port where instead of vertical lines with the effect we get the effect
on the entire screen. Better than nothing I suppose.
Ported some of the code from OpenGL to D3D
( just a copy - paste job :) ),
part of the code misses a dedicated shader but we can still
use it to fix various issues on many games.
List of affected games tested so far:
The Godfather, Final Fight Streetwise, The Suffering Ties that Bind,
Urban Chaos have their vertical lines issues fixed
(highly possible for other games as well), MGS and Stolen see an improvement
but they are still broken without crc hacks. Other games that suffered
similar issues are probably affected as well.
Channel Shuffle changes:
Update Channel Shuffle detection. A lot of games should see an improvement,
MGS, Urban Chaos, Stolen have their top left corner issues resolved.
Other games should be affected as well that use similar logic.
They still miss a shader so some effects are still broken/show glitches
but it's a nice improvement for D3D users.
Shared changes:
Texture Shuffle and Channel shuffle have been moved to their
own dedicated functions. Should make things a bit cleaner.
Move part of the code for Texture Shuffle to GSRendererHW to be shared
across all HW renderers, should aboid copy paste/duplicate code.
Replace/remove an old crc hack that was used to fix the red vertical
lines issue, the hack is no longer needed. The new hack removes depth
effects on D3D only.
Note: The game has another vertical lines issue that can be fixed with
texture shuffle on D3D.
Add comments to Simple2000Vol114 explaining what the hacks do.
-Removed patches for Drakan - The Ancients' Gates, out of place hack for a hardware renderer issue.
-Added patch for Yoake no Mariko 2nd Act, fixes initial hang.
-Added patch for Batman Vengeance (PAL), fixes hang in certain scenarios.
-Added patch for Weakest Link, fixes game hanging at start.
-Added patch for Crashed, fixes hang at start and ingame.
-Added patch for Titeuf Mega Compet, fixes Sheep screen freeze.
-Added patch for The Spiderwick Chronicles, fixes hang at boot.
-Added patch for Drift Champ, fixes the hang at start of chapter 2.
-Added patch for Ice Age 2 (NTSC-J), fixes intro screen freeze.
-Added patch for Harry Potter and The Chamber of Secrets (NTSC-U - NTSC-J), fixes initial/ingame hang, flickering graphics and speed up loading.
-Added patch for Mafia (NTSC-U), fixes hang before molotov party and a crash in The priest mission.
-Added patch for ESPN - College Hoops 2K5, fixes hang at loading.
-Added patch for Harvest Moon - A Wonderful Life [Special Edition], fixes hang at shipping shed.
-Added patch and EE Timing Hack for Ruff Trigger - Vancore Conspiracy, fixes ingame freeze.
-Added patch for Major League Baseball 2K5 [World Series Edition], fixes hang at start.
-Code reformatting, cleaned up comments/whitespaces.
[skip ci]
Merge identical code for Spyro Games in to one to avoid duplicate code.
Rename hacks name for Jak series from OO_Jak to OO_JakGames since there
are multiple games added.
This follows PR #2330.
Add some missing regions: Tomb Raider Legend JP,
StarWars Force Unleashed EU, SuperMan Returns EU, Valkyrie Profile 2 FR.
Rename GT3/Concept titles, they were incorrect.
Adjust Harley Davidson region id from NoRegion to US.
Add some missing regions to automatic mipmapping:
FIFA 03 US, FIFA 04 EU, FIFA 05 EU.
Reformat a few comments.
Add "Default" nametag for default list options for the hacks: Sprite,
Round Sprite, GL Advanced settings, HPO.
Should help users know which options are the default ones with less
confusion.
Add CRC id for FFXII US, SFEX3 EU,
GT4 CH and GT4 Online Beta US.
Adjust BullyCC region from US to EU.
Add Missing regions for Ratchet & Clank,
Ace Combat, Destroy All Humans and Soul Reaver
series to Automatic Mipmapping.
Instead of binding all checkbox events to an event handler, bind only
the master trace log toggle checkbox event and continue processing the
event after it has been handled. This fixes the non-functional apply
button and is also more efficient.
Avoid enabling the child windows when SetValue is called if the window
is currently disabled.
Also continue processing the checkbox event after it has been handled,
which allows the event to propagate to the parent window.
Fixes performance drops and short freezes in adventure mode.
Alas, there is no Crash Tag Team Wrestling, so I replaced it with the
correct title.
Updates Gamefixes Panel entry of VU I bit Hack.
Closes#1785
Removes GT4/Tourist Trophy CRC hacks. The hack had already been moved to
aggressive due to VRAM spike issues, but is no longer necessary at all
due to the in-game brightness/contrast setting issue being moved to
behind the frame buffer conversion hack for Direct3D and being resolved for OpenGL.
Move hacks that disabled shadows to DX level since OpenGL renders
shadows properly with Depth Emulation.
Some other upscaling issues appear with the disabled hack like a small
black border on the bottom of the screen or some ui elements but those
can be fixed with TC X,Y Offset hack.
EE clamping mode to full fix Max Payne from crashing and freezing. Tested on NTSC-U/Pal-M4
VU clamping mode to extra fix some reflection issues in Klonoa 2. Tested on Pal-M5
OPHflaghack fix the "press start" screen from freezing in Evolution Snowboarding. Tested by MrCK1 on NTSC-U
EE round mode to nearest fix some jumping issue in Mana Khemia. Tested by Schtolteheim (PCSX2 forum) on NTSC-U
Gif fifo hack fix some flag corruptions and characters garbages ingame on Fifa Street 2. Tested on Pal-M6
[skip ci]
If wxWidgets is linked to SDL, check what version it's actually linked
against instead of assuming it's linked to SDL1.2 (which isn't true on
Fedora 27).
I guess the intention of the older logic was to get the truncated part
by comparing with the original value, but that went wrong due to using
the pre-normalized value (before the division) for comparison.
Hence let's just do a modulo for rounding the render and blank.
Previously, the DVD variant NTSC/PAL modes used the horizontal blanking
interval calculation algorithm used by digital video modes, which
shouldn't be used and also rounding error check was neglected.
Added the DVD variant modes to the list in analog video mode finder
subroutine. This should impact timing/vertical synchronization in PSX
games significantly.
Previously, the calculation for the size of data to be loaded was done
based on the rendering target buffer size and scaling multiplier, which
was totally wrong. This led to different resolutions having different
load sizes while the size of the real GS memory is common regardless of
the scaling variancies.
Hence use the default rendering target buffer size for the load size
independent of the scaling values. I've also removed a buffer height saturation
code which seemed unreliable.
Note: The accurate version of the code can be enabled using the macro
provided in config.h (which is more intensive on resources), the current
code goes along with the approach of maintaining a decent performance
level along with a formidable accuracy.
Avoid using the IOCTL_DVD_START_SESSION and IOCTL_DVD_END_SESSION ioctls
- it's not necessary to obtain an Authentication Grant ID (AGID) before
requesting the DVD physical format layer descriptor.
Adjust region id for BT2.
Move the sky texture(depth) hack back to Partial level only for the EU
regions. Effect is still not rendered correctly and causes a half
screen bottom issue.
Add R&C3 EU to Automatic Mipmapping.
Previously the limit was 1000, now 10000 in the GUI. It should help in
some rare cases where a higher number is needed without the need of ini
editing and value reset issues caused by the GUI.
The XPad plugin has been superseded by the LilyPad plugin, and is known
to cause control issues.
The USBqemu plugin is an dead plugin with no functionality.
Close#106Close#2293
This adjusts the copy bytes command format from
5aaaaaaa nnnnnnnn
00000000 bbbbbbbb
to
5aaaaaaa nnnnnnnn
bbbbbbbb 00000000
so that it matches the copy bytes command format used by PS2 cheat
devices (GS/CB/XP/AR2).
Switch to using vector for the dump sector table, and also fix a bug
where memory was not allocated when writing to a v2 format block dump,
causing a null pointer dereference.
Also switch to using the v2 block dump format, which generally produces
smaller dump files (the dumps also seem smaller than the ones generated
by cdvdiso, which seems to repeat sectors).
- Adds tooltip for Convert memory card button in the memory card dialog
- Updates several memory card console writes.
- Adds 2018 copyrights to the updated files
Changes the file extension used by PSX memory cards to the common .mcr
instead of using the same (.ps2) extension used by PS2 memory cards.
Updates the extension listed in Create memory card dialog when a PSX or
PS2 memory card is selected.
Replaces the awkward checkbox for a PSX memory card in the bottom left
of the Create Memory Card dialog with a radio button like the other
memory card types.
Rearranged/updated many GUI elements.
Reduce height of window to make it more appealing for laptop users.
Add OpenGL HW/SW options to Renderer Override.
[skip ci]
Instead of faffing around with strings and having to handle a lot of
edge cases when trying to override the renderer, just let
WritePrivateProfileString do all the hard work for us instead.
The workaround was used to prevent macro substitution occuring on paths
containing "linux", but it's no longer necessary since "linux" is not
set as a predefined macro when a "-std=" option is passed to gcc.
Fixes#2268.
Previously if HW hacks were enabled Merge Sprite was active(if checked) on
native resolution even if the GUI option was disabled, which in result
caused glitches in games on native resolution.
This should address that issue.
Remove Aggressive CRC hacks for SSX 3. Was used to remove the red lines
on older versions but no longer needed since the issue has been fixed.
Offered 1fps or less speed bump but it's not worth keeping for such a
minimal increase.
Merge all FFX CRC hacks in to one. They share the same code so it's
better to have one to avoid duplicate code.
Move CRC hack for Bleach Blade Battlers to Aggressive. It removes the
character shading. It can be used as a speed hack since the gains are
quite good from it. Around 15-30%.
Add missing CRC ids for Soul Calibur 2 and 3.
Move CRC hacks to DX level. They are not needed anymore on OpenGL since
Depth Emulation fixes depth issues (shadows).
I found it might be useful for looking into issues at certain cases
where users provide a screenshot covering the titlebar, so we can easily
identify which video mode is being used.
Especially useful for looking into PCRTC issues.
The assembler was previously assembling instruction "b i" as an alias to "j I".
This caused unexpected behavior when attempting to assemble an
unconditional branch. The previous behavior would cause
position-independent code to fail due to the distinction between
the absolute address of a jump vs. the offset of a branch.
- Added proper clamping/rounding modes for Star Wars Bounty Hunter
- Added VIF FIFO hack for Petz - Horsez 2 to resolve hang at loading screen
- Update to compatibility status of few games
[skip ci]
Move CRC hack to Partial that fix the half screen
bottom issue since the effect is not rendered correctly.
Move CRC hack to Aggressive. These hacks are only
needed when running upscaled resolution. They skip the
blur effect which cause ghosting and some other screen issues.
Side effect is they also remove the channel effect on OpenGL
which is emulated correctly so let's put them on Aggressive.
Comment out a hack, it's unknown what the hack does atm.
If there are new issues then it will be added back.
Added comments what the hacks do.
Partial port for channel shuffle effect to Direct3D for Tekken5.
The effect is skipped and not rendered but now the top left
screen glitch has been resolved.
Note: At least Minimum CRC level is required for this to work.
Add hidden option "UserHacks_DisableNVhack" to disable
the Nvidia hack on Direct3D which added black lines on the right
and bottom of the screen. Could be useful for Intel and AMD GPUs.
A better solution would be to add Vendor Id detection instead,
but this will do for now.
To disable the Nvidia hack add UserHacks_DisableNVhack=1 in GSdx.ini
Fixes memcard access in Final Fantasy VIII, and likely in other PSX
games supporting the Pocketstation peripheral. This makes inserted PSX cards show up as PocketStation devices in the PS2 browser, which is okay for now.
Add python:i386 to gcc 32-bit builds to avoid a strange dependency
issue with the gcc-4.9 and gcc-7 builds.
Remove chrome workaround since it's not needed anymore.
Change 32-bit clang dependency to gcc-7-multilib (no real reason, I just
feel like doing so).
[skip appveyor]
Fixes glitchy water in Rogue Galaxy in Direct3D when the hack is
enabled.
Fixes Test Drive car reflection in Direct3D when the hack is enabled.
OTher games are affected as well.
For some CDs (i.e. Suikoden), trying to read a 2048 byte "cooked" sector
does not work. However, reading the raw sector and then extracting the
required 2048 bytes works fine, so let's do that.
This also makes it easier to port CD/DVD disk reading to operating
systems that don't provide CD/DVD interface conveniences.
doc: Update FAQ document
* Update system requirements to match README.md and remove references to v0.9.6
* Fix formatting issues, add link for DirectX and speed issues
Adds automatic HW mipmapping support.
It relies on CRC ids so if a game does
not have their CRC id but needs mipmapping
it will not work until the id is added.
Add GUI menu and tooltip for Automatic mipmap
"Automatic (Default)"
This option will be default option from now on.
Rename "Very Slow" text option to "Slow" for full mipmap
as it caused the text not to fit properly in the menu.
Credits also go to @RedPanda4552 and @ssakash for helping
with the code.
Rearrange the two columns of HW hacks, new arrangement
is done in alphabetical order on Windows and Linux.
Rename some hacks on Linux to match the windows version.
Some other minor tweaks as well.
The following patch grays out the configure button when there's no
configuration dialog available for the selected codec. What's the use in
clicking it when no dialog pops up? :P (I've been tricked by it lots of
times)
Add HW Hack that enables Framebuffer Conversion on the CPU instead of the GPU.
Can fix broken textures on games but at the cost of slower performance.
List of games: Harry Potter games, FIFA Street games.
Games like Call of Duty, Kung fu Panda might also be affected as well as others
especially on Direct3D.
Add HW Hack GUI option on Windows/Linux for 4-bit and 8-bit Framebuffer conversion hack
named "Frame Buffer Conversion".
It's not really used, and the OSD uses a different API.
The specified calling convention (stdcall) is also incorrect since
variadic functions are caller-clean, not callee-clean. The compilers
ignore the stdcall and just use cdecl (I think), though it does trigger
a -Wcast-calling-convention on clang.
It seems not all DMA channels have the same set of 32 bit registers. Removed
addresses of registers which aren't actually present in the memory
space.
Example: Channel 0/1/2 have address stack registers but the other
channels lack it. According to documents, the remaining memory space of
the channels seems to be reserved. Which means, write access would be
disregarded and read access would return an unknown value.
Credit goes to Gregory and CK1 for notifying me about it, special mention to ssakash for actually pushing the change to github. Also I wasn't the one who introduced the non-existent registers into the code, these registers were present before under a different name.
The wrong comparison was used, so all the relative offsets were
completely wrong. Fixes the wrong track issue in the CD player.
Regression introduced in f314c2a4d9.
Travis CI:
Replace GCC4.9 64-bit with GCC7 64-bit.
Replace GCC5 32-bit with GCC7 32-bit.
Move 64-bit to top of matrix so it gets built first (ccache doesn't work
on the 64-bit build and I don't know why (it works locally), so it takes
the longest to build).
AppVeyor:
Add VS2017 build job.
The macro for address of channel 9 was wrongly having the address of
channel 8, fixed it. (Luckily MADR and QWC were unused so we should be
safe)
Thanks to Fireboyd78 for notifying us about this. (Closes#2091)
Also fixed some inconsistencies where some of the DMA channel register
addresses weren't defined for all the bitfields.
Regression was introduced in #1954
GSdx caused the emulator to crash when the renderer was restarted.
It may have affected older gpus from nvidia/amd
with older OpenGL support as well.
If emulation is paused and resumed, vsync may become enabled even if the
frame limiter is currently disabled. This state persists until the
settings are changed or the hotkeys are used.
Fix the inconsistent framelimiter/vsync behaviour so that vsync isn't
enabled whenever the framelimiter is disabled, which matches the
behaviour in the rest of the code.
The swap interval function must be called on the same thread that
rendering takes place on. This fixes an issue where the turbo speed and
frame limiter hotkeys fail to disable vsync when the OpenGL renderer is
used.
Using range loops where possible (correctly).
Using auto where possible (minimize code changes whenever it's decided to change back to a std container).
Use more efficient erase pattern (where possible).
Minor code tweaks.
PCSX2 sends a negative value (-1) to GSdx when adaptive mode is
specified for Vsync, this mode is exclusive to OpenGL at the moment
and is unimplemented on the D3D11 renderer. Also the present function
of swapchain only accepts values from 0 to 4 as parameter, hence
passing negative values to the function is undefined behavior.
So let's fallback to standard synchronization method on D3D11 when
PCSX2 requests for adaptive mode.
* Remove redundant mention of MTVU hack speedhack.
(It's grayed out at safest preset)
* Change ``Note 1/2`` into a single notes header with
multiple lists, also modified the "is in active development"
part as it's no longer the case.
[skip ci]
The safest preset should ideally try to provide
the highest accuracy and stability when emulating the
PS2, allowing the manipulation of the MTVU hack could
just destroy both of these things, hence the following patch
force disables the hack on safest preset.
v2: allow all combinations of framelimiter and vsync options
v3:
* disable vsync when the user disable framelimiter with F4
* Use g_Conf->EmuOptions instead of EmuConfig
Fix CRC hacks on PAL version.
PAL version will no longer experience very high brightness/contrast
issues on stages in hw mode caused by an incorrect CRC hack.
Moved a CRC hack back to OpenGL mode only for the PAL version
because texture shuffling does not work properly on PAL games.
The scalar limit value was updated only during any turbo/slowmotion
toggle, let's also update it properly after any change in the emulation
settings.
This prevents the need of toggling from turbo/slowmotion to update to
your requested frame rate percentage.
Kung Fu Panda becomes stuck at an autosave warning screen since it
cannot detect button presses correctly. This fixes the issue, though
potentially it may negatively affect some other games (see #1831,
unfortunately no game titles weren't mentioned).
The issue was introduced in commit 3075ec2203Closes#1965.
Forgot to replace `IDC_TEXT` with `IDC_VALUE` macros, due to this the
text containing the name of the options was being updated with the
current value of the option instead of updating the text designated for
holding the values.
DBY isn't an offset to the frame memory but rather an offset to read
output circuit inside the frame memory, hence the top offset should also
be calculated for the total height of the frame memory. Fixes software
mode regression in Beyond Good and Evil.
Also handle cases when GetFrameRect() is called without any paramerer to
avoid an illegal value access violation on the DISP register.
Current behavior - The tilebar isn't updated when the user enters full screen mode and when the user returns back to windowed mode they have the older title bar values for a brief second, this sort of behavior is undesirable just in the cost of saving some overhead for updating title. (which is really negligent)
Hence reverting the code back to how it has been for the past 7 years (Yes, I did my research), I'm doing it only for the windows side at the moment as a code comment describes of some sort of Linux specific issue on wxWidgets side.
output 1 strip of 2 triangles instead of 2 strips of 1 triangle.
Potentially it would reduce the geometry shader overhead. And it
might avoid a middle line in sprite in some AMD GPU/driver/OS
bad combination
SDL doc:
"Mappings not belonging to the current platform or with no platform
field specified will be ignored (i.e. mappings for Linux will be ignored
in Windows, etc)."
Issue #1978
GSdx-ogl: Console messages v2
Follow up to
commit/ec63b04719fd9c05a6aeeacb55dc1c54f5ef145b
Add intel broken driver wiki link message in console (OpenGL).
Print intel / amd buggy driver message once in console (OpenGL).
Pring texture barrier and viewpoint array info once in console (OpenGL).
GameDB: Add fixes to various games
Add fix for R&C2 Going Commando
- fixes cinematic and crash
Add fix for Metal Gear Solid 3: Subsistence
- fixes screen artifacts
Add multiple fixes for Max Payne
Add / correct fix for Mercenaries 2
- Corrected incorrect title and added timing fix
Add fixes for Scarface
Add missing games to DB
Enables character outlines to partially work on Full CRC.
DX9 has a small issue where a small black line at the bottom shakes when outlines are enabled.
You can either use Aggressive crc or x,y offset to fix the issue.
Removed unnecessary crc hack that caused shadows on stationary objects (trees) to move on Direct3D in a weird
motion blur type way when the player moved slightly.
* Cast return value of IsEof() to bool. (Avoids int -> bool performance
warning error)
* Cast field and index to the required parameter type of AppendRawData.
The default 12 is rather low and won't suffice for most cases, updating
it to 20 to give some extra space for additional ISOs. Incrementing it
to an even higher value might not be so good as it consumes lots of
vertical space, not a nice idea for people with smaller screens.
The sprite geometry shader was still being used even if the sprites were
converted on the CPUs.
Convert all sprites using the GPU - the fix isn't ideal, but it'll
likely have to do unless someone feels like porting over more of the
OpenGL changes to the D3D11 renderer.
Closes#1921.
Class member variables are initialised in order of declaration in the
class definition. Move native_buffer to the top of the class definition
to avoid initialising m_width and m_height to random values.
Move the custom resolution scaling code to a separate subroutine and
allow future RT buffer resize calls when the buffer size isn't enough.
(Example: when a game's CRTC/Framebuffer size changes. The older code
didn't consider such cases)
Added a more robust buffer size calculation mechanism for custom
resolutions. Improves performance in higher resolutions for games
which don't need a big buffer. There's a great boost in performance
at GS limited scenarios.
I don't even feel there's a need for the large framebuffer option right
now, For future - I plan on making the large framebuffer enabled version
as the default as the overhead is there only at situations when it's
necessary. Until then keeping the original code just to be on the safe
side in case any issue pops up.
An EOF only occurs after attempting to read past the end of the file.
Account for this correctly, which fixes a potential infinite loop when
reading back an xz compressed GS dump.
Add the bitfield structure of the undocumented SYNCV register,
potentially might be useful in proper height determination of the output
circuit for some weird games which still get it wrong but still haven't
figured out how it might be useful. Maybe some sort of black magic
formula with the vertical synchronization values?
The differential phase value seems to closely resemble the display
height value of the video modes (480 for NTSC, 576 for PAL) but after
some investigating into the differential phase, I have no clue on how
they might be even related. Hopefully the mystery will be unveiled in
the near future.
Reduce disk space. Easy to share.
It would be nice to port the code to Windows.
libzma code was taken from https://git.tukaani.org/xz.git
Note: only short dumps are supported so far. Big dump will freeze the interface during the compression.
Or will suck all the RAM.
Note2: a multithreaded encoder would badly impact the compression ratio
Thanks to Turtleli for all review comments
Null plugins are sad and lonely, put them with the others later
Minor tweaks, force remove Plugins folder because it can prevent $INSTDIR from being deleted (assuming we're doing a standard uninstall)
Rewrite version detection to search for 0.9.8 to 1.4.0 as well as future builds.
Remove offending whitespace
Typo ;)
Remove XPStyle parameter. It isn't needed anymore
Updated copyright, added ManifestDPIAware for rich folks, removed IDOK true and Cheats folder from $INSTDIR as Turtleli suggested, formatting adjustments.
Gitignore: remove now unused NSIS directories
Fixed a nasty regression I introduced after a registry pointer was assumed to be incorrect. It contained UserMode data generated by the First Time Wizard. This was causing conflicts and the FTW to fail randomly when running PCSX2 after a reinstall due to old configuration data being read.
I added clarifcation below the original comment to reduce confusion in the future.
Move version check to own file
Split main installer into own script. Integrated changes for portable/standard installation.
Forgot to remove a message box
Forgot to add SharedRedtape changes to last commit
Remove unused SVN templates
Compile the installer to the NSIS folder so that the user doesn't need to worry about the output folder missing; and wonder why the installer won't compile ;)
Minor tweaks for SharedBase and SharedRedTape:
-Updated ${APP_VERSION} to 1.6.0 and tweaked uninstall_log for functionality with uninstall script in pcsx2_full_install.nsi
-Added !define for installer icon
-Replaced obsolete function with RMDir functionality, uninstaller speed improved marginally
-Added filepath for $DOCUMENTS to be removed if empty
Main installer tweaks/enhancements:
-Tested installer functions in NSIS 3.01
-Implemented uninstall script for future version detection. If an older or equivalent PCSX2 version is detected, the user is prompted to silently uninstall/overwrite or abort the installer. (The function is not compatible with any current stable releases because they lack the registry string required for version detection.)
-Added a new installer function so that we can launch PCSX2 directly from the installer.
-Supressed some errors related to unused plugins in MakeNSIS.
-Replaced File with CreateDirectory function (for Cheats only) because it can't be used on an empty folder and will cause MakeNSIS to fail.
-Removed unused /oname parameter that was leftover from SVN builds.
-Added option to install additional languages for those who desire to save 2MB of space.
-Condensed DirectX Packages into SectionGroup for neatness
Issue: wait of the semaphore timedout. However semaphore was properly posted
counter is 1.
To workaround the issue, only throw an error if semaphore counter is 0.
Note: I reduced the timeout to 100ms by threads to avoid huge startup delay
Close#1939
* replace gtk_table by gtk_grid
=> it still misses some paddings
* Use 3.22 monitor API to query screen size
=> need to be tested
* directly add scrolled windows into a container without bothering with
the viewport.
Code compile fine but wasn't tested.
v2: disable the code until I (or someone) get a chance to test and fix it.
Thanks to @colepcsx2 (https://github.com/PCSX2/pcsx2/pull/1896#commitcomment-21858717) for pointing it out!
I also updated the prefix in the inferior video mode detection of GSdx, I'm not even sure why we need the videomode info on the plugin side, might be useful someday.
The title bar will display "progressive" for 1-2 seconds when booting an interlaced game at some cases, it's due to an uninitialized SMODE2 register, so let's wait till the rendering starts to allow time for the
SMODE2 init and get the proper values from games.
The shadeboost options text (Contrast, Brightness, Saturation) were not
grayed out when shadeboost was disabled, it was sort of inconsistent
compared to the behavior of external shader, so added grayouts to them
when shadeboost is disabled.
Also changed "OpenGL Very Advanced Custom Settings" to "OpenGL Advanced
Settings", the verbosity didn't help much in my opinion.
Initial plan was to allow to remap the logical (SDL) key.
Unfortunately I feel some issues with the current enum.
* button/axis overlap
* trigger/axis must be handled differently
Nevertheless, code is easier this way
SDL_GAMECONTROLLERCONFIG is nice but limited to a single entry. (Note it can still be used)
Option name is SDL2. Here an example
SDL2 = 03000000a306000020f6000011010000,PS2700 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
My guess is that GCC reports an warning because of the default case.
I don't think we support yet __builtin_unreachable on Linux
Nevertheless it will still be an issue in non-release build
Split code in 2 parts
* Base class (GSWndEGL) that implement the core EGL and GL context
* Derived class (GSWndEGL_X11/GSWndEGL_WL) that implement the backend to handle native resources
Note: Most backend code is only useful for GSopen1/PS1 mode. GSopen2 only requires
the AttachNativeWindow implementation
Code is based around EGL_EXT_platform extension that allow to select the platform at runtime.
Note: I think the extension was integrated in EGL 1.5
The X11 backend was mostly converted to XCB
The wayland backend is only a placeholder for future code
I don't know if MS windows is/could be supported with EGL_EXT_platform API
Code validated on Mesa. Proprietary drivers aren't yet tested.
This reverts commit 99180f5afb.
Unfortunately Mint/Arch got segmentation fault in Xlib mutex locking...
Sadly Xlib will be back to thread-unsafe mode.
I'm cooking another solution based on EGL
* prefix remaining member with m_
* Use array for m_effect_id
* Properly Destroy/Close Haptic/Joystick/Game Controller
(except on older SDL versions which are buggy)
Initialise pointers to nullptr, move the LoadLibrary code into the try
block (where it should have been in the first place), and use Close()
to cleanup if an exception occurs. Also initialise/destroy the critical
section in the base class constructor/destructor.
This should avoid resource leaks if an exception occurs.
Instead of creating a separate message function, just reuse what() and
pass the string to the std::runtime_error constructor instead.
Also catch a reference to a std::runtime_error instead, since it'll
allow for simpler cleanup.
Moved a CRC hack to Aggressive that can cause or fix VRAM and RAM spikes.
This way people can switch between each config if they experience problems with either.
Varies on userconfig , game version and maybe hardware.
Added missing CRC game version for GT4 pal.
Note: The issue might be the same on GT3 and GTConcept , the code might
need to be removed for those games as well.
X11 isn't thread safe by default. It make sense in 1990 but it is ugly nowadays.
The trick is that is must called before any X11 function. So the only
safe place is at the start of the main. Pcsx2App::OnInit() is the
sooner that I've found.
Hack was used to remove garbage data rectangles from popping up on screen when objects and characters were added to or removed from the world.
This issue is now being handled by OI_DoubleHalfClear in GSRendererHW.cpp, so the hack is no longe necessary and has been removed.
Moves Resident Evil 4 hack to Aggressive level as it is no longer
required to fix any issues, but does offer a decent speed boost.
Moves The Getaway & The Getaway Black Monday CRC hack to Full level, as the issue can be resolved
when using the OpenGL Hardware renderer.
Fixes an issue where the game will either boot the wrong CDVD source or
fail to boot if the current CDVD option doesn't match the option
specified in the command line.
The legacy version is the version 1.3
The new version is the version 2.0. It would be based on SDL2 only
Distribution information.
If you link wxWidget with SDL, you will need to be sure it is SDL2 or upgrade.
You can build wxWidget with SDL2 with the following trick
export SDL_CONFIG=/usr/bin/sdl2-config
./configure --with-sdl .....
Improved the video mode detection code by also detecting the DVD variant video modes of NTSC & PAL, PSX mode actually make use of these specific variants, as well as the BIOS. Previously, I just had them as a single bios video mode due to laziness. (I know, my bad)
After further research, it seems that these DVD variant modes have their own individual VSync timing values similar to the standard NTSC & PAL video modes, dealing with those timer codes might be essential in getting timing accuracy of the PSX mode games. (I kept it to default NTSC/PAL values for now, interested people can mess with it later)
I had planned to do this before but there some were concerns that two different video modes make use of 0x73 gate in SetGsCrt, which was rather weird (how the heck could two video modes be used in a single param value?)
0x73- DVDPAL ( 720 x 480 @ ??.???Hz)
0x73- DVD480P ( 720 x 480 @ ??.???Hz)
Hence, we had decided to use the CMOD bit from SMODE1 (AKA color subcarrier frequency) to detect whether it's an analog or digital video mode and update the necessary timing values but seems like it's no longer necessary, after further discussions from some PS2 developers, we've come to the conclusion that only DVDPAL is possible via 0x73 in SetGsCrt. (So I assume the DVD480p init possibility was fake info from Blue and those other GSM guys who were reverse engineering the PS2)
* Windows behavior must be checked
* remove glsl_source.h
v2: fix missing include
Big thanks to Turtleli
v3:
fix indentation in gsdx-res.xml
add dependency in cmake
remove old res/glsl/fxaa.fx symlink
add tfx.cl for OpenCL support on Linux
v4, v5
fix cmake indentation
It is done automatically on Linux. Strings are much
better with this NULL char ;)
All credits go to turtleli
v2: increase resize instead of push_back NULL char
add checkboxes for the 2 "new" hacks
Wrap gs memory & merge postprocessing sprite
add tooltip for OpenGL options
v2: based on turtleli feedback
use gtk_scrolled_window_set_propagate_natural_height on GTK 3.22+
use the nicer GTK_CHECK_VERSION macro
Move GL_ARB_copy_image to optional for OpenGL SW render.
It will allow Ivy Bridge to work with OpenGL SW as it's not required.
Sandy Bridge is not yet tested , would be nice if someone could test.
Clip Control is only used for the HW renderer.
It will help Nvidia DX10 GPU on Windows. Potentially old AMD GPU too.
Unfortunately Ivy bridge still misses texture copy
Note on Linux, you can use the free Mesa driver.
Otherwise, it is time to save money for a future upgrade :)
Adds merge sprite hack to GSDx hacks dialog
And ports merge sprite hack to Direct3D renderers.
Special thanks to my keyboards Ctrl, c and v buttons for all their hard
work in porting this hack.
Ports the "Unscale Point and Line" hack to the Direct3D11 Hardware renderer.
And enables the "Unscale Point and Line" hack for Custom Resolutions with Direct3D11 and OpenGL.
Adds Windows GUI elements of the split texture filtering options.
Bilinear Texture Filtering is moved to the top section of the main GSdx window,
and Trilinear Filtering is moved to Hacks.
Adds Texture Filtering Of Display option to the Shader dialog window Windows UI.
Updates the layouts of the Shader and OSD dialog windows to more closely resemble the Linux GUI.
Reorganizes Hacks dialog window.
Adds UI elements for the Memory Wrapping and HPO v2/Special commits
Adds advanced OpenGL functions "Geometry Shader" and "Image Load Store" to the Windows UI.
Renames "Configure Hacks" to "Advanced Settings and Hacks", to more closely resemble the Linux GUI.
Adds GS Memory Wrapping hack to Windows. Enabling the hack will fix cut-off cutscenes in Wallace & Gromit: The Curse of the Were-Rabbit and Thrillville.
Update compatibility info for 2 games based on compatibility reports I
made earlier.
Fixes title for the PAL and NTSC-U releases of Tokyo Xtreme Racer Drift 2.
And adds a fix for Sled Storm(confirmed to be required for both the PAL(SLES-50683) and NTSC-U(SLUS-20363) versions).
Remove full path from every plugin binding and only add it to the
preceding "Loading Plugins..." line.
Instead the revision date and version number are printed for each plugin
to make it easier to identify issues with plugin versions.
Ace Combat 4 CRC hack removes clouds for a good speed boost, which removes both 3D clouds(invisible with Hardware renderers, but cause slowdown) and 2D background clouds.
Removes blur from player airplane.
This hack also removes rockets, shows explosions(invisible without CRC hack) as garbage data, causes flickering issues with the HUD, and in some (night) missions removes the HUD altogether.
The CRC hack has been moved to the aggressive level.
Aggressive is misspeled several times in the file, this has been adressed.
Changes to the dependencies of the generated logo files did not trigger
a rebuild of the files. Use add_custom_command instead of
execute_process so build dependencies can be specified.
Also prevent the generated files from polluting the source directory.
The pixdata format loader has been removed from recent versions of
gdk2-pixbuf, so the logo doesn't load. Avoid preprocessing the data and
leave the logo as an embedded bitmap file.
Allow the output circuit saturation to take place at cases where one of the output circuit is enabled with frame mode rendering, I'm not sure it would be safe to allow saturations when both of the output circuits are enabled with frame mode rendering. Unlike field mode rendering, frame mode doesn't use identical rectangles at same co-ordinates for output in two alternating fields and potentially they could use a much bigger output size when both of the output circuits are enabled and are separated without any intersection. So let's limit the saturation to only the cases where we detect a single output circuit for frame mode rendering.
Fixes a regression in Devil May Cry 3 and Sky Gunner.
If a user switches renderer they also have to remember to change the CRC
hack level for the best user experience with the selected renderer.
This commit adds a new automatic CRC level that autoselects the
recommended CRC level for the selected renderer, so that a user doesn't
have to make the change manually.
coauthor: turtleli
If OpenGL software is the saved ini renderer and F9 is pressed to toggle
to the hardware renderer, depth emulation will be disabled. This fixes
that issue.
GSdx ogl: SSO Workaround for AMD buggy drivers
All 2017 drivers are now blacklisted.
The BSOD/crash issue is still there so don't set Blending Accuracy to None!
Shortened the message in the console making it more appealing.
-1 is only returned when there is an encoding error, and the va_list
argument is indeterminate after being passed to vsnprintf.
Use the return value to determine the buffer length, and call va_end and
then va_start before vsnprintf is called again.
Some general fixes and UI improvements.
Adds Reset Configuration to Input/Force Feedback configuration screens that resets the configuration for the selected control(s).
Adds Restore Defaults button to the General tab that deletes all LilyPad
Settings and bindings and resets to the default settings.
Adds double-click functionality to the PAD list on the General tab,
which will now send the user straight to the corresponding PAD tab.
Fixes issue where losing focus after pressing alt-tab would end up
blocking the F4 button (which is used for turning the PCSX2 FrameLimiter
on and off).
Fixes: https://github.com/PCSX2/pcsx2/issues/1797
Adds quick setup that allows for quickly setting up all the default pad
buttons without having to click on each one separately.
Hides special inputs(inputs that aren't available on a PS(2) controller) by default.
ICO uses a depth of field effect for the fog. Depth is extracted
into the alpha channel of a texture. And then used as blending factor.
You need a 1:1 texture/pixel mapping otherwise you will line at boundaries.
In order to extract the DoF, ICO moves the depth buffer around the GS
memory. Memory moves are implemented in the not-scaled world. It means
that we can't have the above 1:1 ratio. And we don't know anymore that
data are coming from the current depth buffer.
The solution: I reused an HLE channel shader to read the depth buffer directly.
This way I have the guarantee that pixel/depth are aligned.
Close#1816
Otherwise you have a write before read typical race condition. It works
most of the time because textures are stored in temporary buffers (aka
texture cache). So the race condition requires texture invalidation in the mix.
I hope the perf impact will be small enough.
Fix#1691
Blood Will Tell: gray scale effect description
Frame is renderer in 0x700
Sync 0x700 (RT will be used as input)
Foreach page of frame
// The missing Sync was this one. You can't copy new data to 0x2800
// until you finish the rendering that use 0x2800 as input texture
// (AKA end of this foreach loop)
Sync 0x2800 (not the first iteration, texture will be used as a RT)
Copy page from 0x700+offset to 0x2800
Sync 0x2800 (RT will be used as input)
Render Effect line1 from 0x2800 to 0x700
Alpha test should only be disabled when writes to all of the alpha bits in the Framebuffer are masked. Fixes a regression in Dragon Ball Z: Budokai 3 scouter image rendering.
It allow to do the division before the size multiplication
It avoid a float overflow if T is too big.
Old behavior: (T * size) / Q
New behavior: (T / Q) * size
Performance Note:
* Rcp was replaced by a slow division (more accurate)
* At least we avoid a 2nd loop on the vertex buffer
It helps on Pro Soccer Club and Galerians Ash rendering
Tric Note:
SPRITE must be handled differently because the 'q' of first vertex could
be invalid
Bilinear applies to all renderer
* Common code done in GSVertexTrace
* Extend it with forced but sprite (trade-off between linear/upscale glitches)
* Linux GUI option was moved at the top with the renderer selection
Trilinear is moved to OGL hack
close#1837
Thanks to Flatout for the review and feedback.
It will take care to update the Window GUI :)
The previous placement of the screenshots were inconsistent and they were just arbitrarily placed in different sections of the ReadMe file, moving them to a separate "Screenshot" section to make them look more organized.
Fixes "project out of date" issue for wx_config on VS2017.
Fixes whole program optimisation possibly not being applied on release
builds for USBqemu (it may have been applied, but I can't actually tell,
and now it at least shows properly in the VS property editor).
Typical bug, missing/wrong texture on the SW renderer but working fine on the HW renderer
Debugged on ATV Quad Power Racing 2 but I suspect couple of game are impacted
Bug description:
GSdx flatten the Q value of sprite. So m_vt.m_eq.q is true when Q(2N+1) are the same.
Q(2N) values could be random. The fix replaces Q0 by Q1 for the uniform Q value.
Previously, the OSD neglected to mention any sort of message when the savestate load is failed, the following patch now also prints a message on OSD when detecting such cases of loading an incomplete/corrupt savestate.
Previously, the NTSC saturation was also applied for double scan mode (Interlaced and Frame) where the developers send double the height to the DISP registers, saturation shouldn't be performed at such cases as the developers could send a value of 780 while the real size of the output would be 390 due to double scan mode. Doing the saturation later after identifying the real size also seems a bit counter-intuitive as we haven't discovered any cases where double scan games require the NTSC saturation hack. So let's just apply the saturation only for Interlaced (Field) Mode and omit the saturation step for other modes.
Isolate all the hacks into a separate subroutine and properly document about them, should make it easier for people to understand the display rectangle setup code, the hacks were totally messing up the readability of the function earlier.
This prevents the internal state of the objects from becoming
inconsistent, which causes inflate() to fail with recent zlib versions
(1.2.9 and later).
The buffer contains extra room to avoid a segmentation fault due to an overflow.
Unfortunately the end of the buffer wasn't initialized which can lead to unexpected behavior.
Based on issue #1806 it could impact Guilty Gear X2
Mesa AMD was updated :)
all drivers[1] that support GL_ARB_shader_image_load_store got GL_ARB_clear_texture
[1] Intel driver misses others extensions to run GSdx
Rendering will be corrupted (for advance effects) if the driver doesn't support it.
However it allow to run with Mesa software emulation (or inside a virtual machine)
Note: mesa still requires an override of the buffer storage extension
MESA_EXTENSION_OVERRIDE=GL_ARB_buffer_storage
Previously, the combobox will reach an indeterminate state whenever it's passed with a value out of range via ComboBoxInit(). To avoid such cases, let's initialize the current selection of the combobox with the front element of the settings vector whenever we detect an out of range value which is not declared in the vector.
To reproduce the issue, set "Renderer" to some sort of crazy value like 50 in the GSdx.ini file and it'll mess up the whole GSdx plugin dialog really bad. This patch prevents such undesirable behavior by simply selecting the front element in the vector when we read an unsupported value.
EE interpeter: remove unused argument
rdd is neither used, nor needed. It appears it was there to pass the _Rd_ word to write to, but the writing was moved to PHMSBH() to have one "if (_Rd_)".
Add a note on undefined behavior
Previously, the auto output circuit selection of the GSdx wasn't good, it simply defaulted to the second output circuit even when the first output circuit is also enabled. The new algorithm for auto selecting returns the merged rectangle dimensions when both of the output circuits are enabled and if the condition for merge is not satisfied then it returns the bigger output circuit.
The "L3 Toggles Turbo" hack has been removed and been replaced by a
bindable Turbo button on the Pad tabs. The Turbo function in the input
configuration has been renamed Rapid Fire.
Removes Ignore Key(hasn't functioned since LilyPad 0.9.9 (PCSX2 0.9.6)),
and "Send escape on window close" hack (unnecessary for PCSX2 and caused
issues with other emulators).
This new option on the pad tabs disables an input so it will be ignored
when trying to bind another input. This is helpful when binding controls
for a device with an input that's difficult to center like an
accelerator, or just always active like a faulty button or analog stick.
I didn't fix all the warnings (purpose was to realign code with "recent" update)
Linux note: only miss 2 major items
* res/tfx.cl loading
* device descriptor
* And various bug fixes ;)
Previously, when F8 was triggered multiple times in a single second, the latest captured image would replace the previous captured one as it has the same name as the previous image.
The following patch detects such cases and adds a number along with the filename when new image capture is requested under the same time as the previous capture.
The ring buffer is composed of severals read/write by transaction.
Atomic operations are only required at the start/end of the full
transaction. In the middle, you can use normal variable (optimization
opportunity for the compiler)
Use acquire/release semantics on isBusy and vuCycles to remain 100% safe
(relaxed might be doable but better be safe than sorry)
Use dedicated cache line for atomic variable to avoid any conflict between CPU
The struct is copied in various ring buffer (hot path)
We only need the return status of the function so use a reference instead of
a state variable
Side note: if we align the struct to 16B maybe the compiler can use SSE to copy it.
Warning: it breaks save state compatibility
This reverts commit
d6383e6c21
It created a regression in Everybody's Golf 4/Hot Shots Golf 4, breaking the renderering when depth emulation is disabled/when using a Direct3D Hardware renderer.
The code is now a mirror of the ::add. So 1 insert == 1 erase
This way it won't crash on future update. And it will support future GS
memory wrapping improvement.
ZoE2:
RemoveAt overhead plummet to 0.5%. It was 17% !
However insertion is a bit slower. Due to the begin() after the push_front
v2: use std:: for lists and arrays
Removes Alpine Racer 3 hack. Issue has been resolved.
Moves NanoBreaker hack. Issue has been resolved for OpenGL and hack has
been moved to DX only.
Moves Tri-Ace games hacks. Hacks are also necessary for OpenGL with "Partial" CRC Hack Level to prevent massive slowdown.
Move Tales Of Legendia hack back as it's also necessary for OpenGL with "Partial" CRC Hack Level to prevent graphical issues.
Close: https://github.com/PCSX2/pcsx2/issues/1698
Added PAL and NTSC-U CRC's for Ar tonelico II.
Unfortunately it requires at least GCC6. If a nice guy can check the generated code on GCC6.
I don't know clang status.
Here the only example, I have found on the web
https://developers.redhat.com/blog/2016/02/25/new-asm-flags-feature-for-x86-in-gcc-6/
Current generated code in GSTextureCache::SourceMap::Add
38b3: bsf eax,esi
38b6: add esp,0x10
38b9: test esi,esi
38bb: jne 387e <GSTextureCache::SourceMap::Add(GSTextureCache::Source*, GIFRegTEX0 const&, GSOffset*)+0x6e>
BSF already set the Z flag when input (esi) is 0. So it would be better
to not put a silly add before the jump and to skip the test operation.
OMG, Zone of Ender got a speed boost from 11 fps to 45 fps
Seriously, the goal is to allow benchmarking GSdx without too much overhead of the main renderer draw call
Note: unlike the null renderer, texture/vertex uploading, 2D draw, texture conversions are still done.
* move the post-processing frame into the OSD tab
* Rename Global Settings to Renderer Settings
* put monitor and indicator check box on the same line
At least we have a similar number of options by tab
This reverts commit f77c1900fa.
Conflicts:
plugins/GSdx/GSTextureCache.cpp
Another fix was done later for Jak cut scene (or FMV). One game got a regression (don't remember which)
It's only ever updated after the queue is updated, so its state will
always lag slightly behind it. It's sufficient to just use empty().
This seems to fix some caching issues that were noticeable on Skylake
CPUs (#998).
In the previous code, the worker thread would notify the MTGS thread
while the mutex is still locked, which could cause the MTGS thread to
wake up and immediately go back to sleep again since it can't lock the
mutex.
Use a separate mutex for waiting, which avoids the issue.
Some PSX games seem to store image data of the drawing results in an undeterminate area out of range from the current context buffer. At such cases, calculate the height of both the frame memory rectangles combined.
What happens on "Crash bash" -
* At first draw, scissoring is limited to SCAY0- 0 & SCAY1- 255
* At second draw, scissoring is limited to SCAY0- 255 & SCAY0-511
Previously, we limited the height to the value of one single output texture, so instead of that let's calculate the total height of both the two buffers combined to prevent such issues.
Previously, we only calculated the width of a single output circuit which lead to missing a single pixel from the other output circuit which in turn causes offset issues in Persona games, I have customized GetDisplayRect() to now also calculate the dimensions of the merged rectangle when both the output circuits are enabled through the PMODE register, so this hack is no longer needed. :)
TL;DR - The above commit of mine accurately handles the offset issues by calculating union of the rects, removing this stupid hack. (not insulting any other developers, this stupid hack was mine :)
Passes the merged output circuit as the base size for texture cache scaling code. Helps fixing scaling issues where games use both of the output circuits for rendering.
Future Note: Alter the behavior of IsEnabled() check always preferring the second output circuit for some weird reason. I plan on changing it to a better auto-output circuit selection mechanism but that could probably be done some time in the future.
* Upgrade the counter to signed 32 bits. 16 bits is too small to contains the 64K value.
* Read ThreadProc/m_count when the mutex is locked
* Use old value of the fetch instead to read back the new value
Hopefully this translates well to slower systems :)
Tekken Tag:
Before: 79-81fps
After: 82-84fps
Front Mission 4 intro (as it pans over the roofs)
Before: 158-159fps
After: 165-166fps
Previously, the seconds variable of the RTC was updated on progressive modes after every 50 Vsyncs, which was obviously wrong. The code has been adjusted to update the RTC with respect to the vertical frequencies of various other video modes.
Avoid reading past the end of the disk.
Avoid waiting when there are prefetches remaining.
Fix the maths so that the first prefetch after a request attempts to
read the next block of sectors and not the block of sectors that was
just read (which will just be skipped anyway because the data has just
been cached).
Avoid potential prefetch after disk is swapped (though disc swap doesn't
work properly if you just eject and insert a different disk).
Stop prefetching on disk read failure (Suikoden hits this case - 2048
byte reads are requested, but only 2352 byte reads will succeed).
Also reduce the read retry count to 2.
16B alignment is now useless for nVifBlock (no more SSE)
However update the alignment of bucket to 64B. It will reduce cache miss
probability in the find loop
It avoids memory stalls and greatly reduces the overhead of the dVifUnpack function
Here a vtune summary of this branch (done on SotC init)
dVifUnpack<1> was 14.5% of effective VU thread time
dVifUnpack<1> is now 3.8% of effective VU thread time
I hope it will translate to better fps
Delete() deletes the menu item but keeps the sub menu. Remove() doesn't
delete the menu item.
Also use AppendSubMenu - using Append on a submenu is deprecated.
It allow to compare only 8B in the lookup so SSE could be replaced with general instruction
As a bonus, it allow to compute the hash key with a mov rather than modulo (which was an 'and')
Inline the execution part
Add a num parameter to dVifsetVUptr
Use a local variable for the nVifBlock instead of a global struct state
The goal is to ease future update of the nVifBlock struct
Previous implementation saved the both the chain pointer and the chain size
Rational: size is useful to add new element and to detect the end of the chain
Vif cache is rarely miss. So 'add' is barely called and the end of a chain is
barely reached.
New implementation will add a null cell at the end of the chain. As a
cell contains a x86 pointer, if is null you could conclude that you
reach the end of the chain.
The 'add' function will traverse the chain to get the current size. It is
a cold path besides the chain is often short (< 4).
The 'find' function only need to check the startPtr bytes to detect the end
of the loop.
Note: SizeChain was replaced with a std::array
Safety:
* check remaining space before compilation
* clear hash if recompiler is reset
Perf:
* don't research the hash after a miss
* reduce branching in Unpack/ExecuteUnpack
Note: a potential speed optimization for dVifsetVUptr
Precompute the length and store in the cache. However it need 2B on the
nVifBlock struct. Maybe we can compact cl/wl. Or merge aligned with upkType
(if some bits are useless)
I misses some early return in my first tentative. Now VTune shows me
properly the time in VU recompiler.
Note: It seem some block overlap (likely due to the branching mess). But it is still way better than no data
GS_Packet constructor calls memset which is quite slow and useless as data is overwritten
Vtune overhead of Gif_Unit::Execute goes from 5.8% to 3.0% (EE thread)
Several PSX titles lack a backslash in the elf path, which made the disc
serial contain 'cdrom:', this caused savestate issues in those ganes.
Solves: https://github.com/PCSX2/pcsx2/issues/1692
Use a reinterpret_cast instead of casting the function pointer address
to a void** and dereferencing it.
Also remove an unnecessary (void) and avoid including stdafx.h.
Don't adjust 'image' and just use an additional offset.
'success' was kinda unnecessary when true or false could just be
directly returned.
Move 'compression' clamping out to GSPng::Save instead.
And throw in a whole bunch of const for good measure.
wchar_t is 16-bits on Windows, which can't actually properly fit all
Unicode characters.
Use the wx3.0.x wxTextWrapper approach of using iterators that increment
by actual characters to fix the issue, and also switch to using the
std::string style functions in wxString.
Previously the boot menu items always displayed "Boot CDVD" regardless of the current source medium, this behavior has been fixed to properly adjust the text when source medium is changed. Now it'll display Boot CDVD/ISO/BIOS with respect to the current source medium.
v2: Some instances of "Iso" have been changed to "ISO" for consistency.
v3: Remove the unnecessary "Reboot" on menu item labels, saves some string translations.
v4: Add a new shortcut key for the primary boot menu item.
There is already a dedicated bind event to handle the gray out of the menu item, so let's just gray it out initially and let the bind event handler do it's thing.
The previous behavior would only gray out the menu item when all the plugins are in a non-active state which didn't seem ideal as the plugins were shutdown only when closing PCSX2 (or) switching plugins.
Adds a device select option that hides bindings and disables binding new
inputs from all non-selected devices on the bindings list. This also
avoids input conflict issues when one controller is recognized as
several devices through different APIs.
Updates the UI by reducing the height of the plugin window. This has
been achieved by removing some buttons below the diagnostics and
bindings list and incorporating those functions into the
lists(accessible by right-clicking in the list). The binding
configurations on the Pad tabs have been moved to a separate page, like
the Forcefeedback bindings, to separate the configuration from the
bindings.
Adds a skip deadzone option to the Pad tabs.
With the normal deadzone, if the control input value is below the
deadzone threshold, the input is ignored.
However, some controllers also benefit from shortening the input range
by skipping a deadzone.
JMMT uses a bigger display height on NTSC progressive scan mode, which is not really unusual hence adjust the saturation hack to only take effect on interlaced NTSC mode.
However, the whole double screen issue on FMV still exists. As a bit of information, this game has the second output disabled but seems to have some valid data inside of it, maybe the second output data is leaked into the first one? most likely a bug in the frambuffer data management rather than a CRTC issue (needs to be investigated)
in the top-level source directory. The build folder should NOT be
transferred between computers when PGO is used, though I don't
see why anyone would be doing so anyway.
Also adds support for PGO and LTO to the build.sh script.
The purpose is to stop vtune profiling in a predictable way. It allows
to compare multiple runs.
ERET is called every syscall/interrupt return so it is proportional to
the EE program execution.
Mapping the full buffer is killer on Vtune (either crash or requires a huge processing time).
Instead keep the same ID for code in the same buffers.
I think all buffers are correctly mapped now but I still miss the frame pointer
for VU code.
Cons:
* requires ~180MB of physical memory (virtual memory is the same so it
doesn't impact the 4GB limit)
From steam: 98.81% got at least 2GB of RAM. 83.62% got at least 4GB of RAM.
That being said, it might not really increase RAM requirements as OS could put the
new allocation in the swap.
Pro:
* code is much easier
* remove at least half of the signal listener
* last but not least, it is way easier for profiler/debugger
Previously, the height of the frame offset was also considered for the total height of the texture which was obviously wrong as the portion before the offset value isn't part of the frame memory.
In the previous code, the threads were created and destroyed in the base
class constructor and destructor, so the threads could potentially be
active while the object is in a partially constructed or destroyed state.
The thread however, relies on a virtual function to process the queue
items, and the vtable might not be in the desired state when the object
is partially constructed or destroyed.
This probably only matters during object destruction - no items are in
the queue during object construction so the virtual function won't be
called, but items may still be queued up when the destructor is called,
so the virtual function can be called. It wasn't an issue because all
uses of the thread explicitly waited for the queues to be empty before
invoking the destructor.
Adjust the constructor to take a std::function parameter, which the
thread will use instead to process queue items, and avoid inheriting
from the GSJobQueue class. This will also eliminate the need to
explicitly wait for all jobs to finish (unless there are other external
factors, of course), which would probably make future code safer.
Upstream commit 713c3f9d1b10ac25fb3c4a1ff115e23c035851dba from the wx
master branch (3.1.x).
Fixes the crash when the current language is Korean and the Change
Language dialog is accessed.
Previously, the code used a lot of "bitwise AND" to get specific bitfields of the interrupt mask control register, which makes the code look a bit hacky, also it's even more hard for normal people to calculate the value when hexadecimal values are used for the bitwise operations where the register is totally binary. Instead of dealing with all those mess, let's just get the bitfield values from the already implemented nice union of the IMR register. FWIW it also makes the code more readable.
The previous implementation of HPO adds an offset on vertex position. It
doesn't always work beside it moves the rendering window.
The new implementation will add a texture offset so that instead to sample
the middle of the GS texel, we will sample the middle of the real texture texel.
It must be manually enabled with
* UserHacks_HalfPixelOffset_New = 1 (keep a small offset as intended by GS effect)
* UserHacks_HalfPixelOffset_New = 2 (no offset)
v2: always apply a 0.5 offset in case of float coordinates (Tales of Abyss)
Might break other games but few of them uses float coordinates to read
back the target
Doesn't fully work yet
* Unknown stack frame
* Outside any known module
Potential root cause:
* Nvidia driver
* VU code as ebp is required for emulation so likely no frame
Fixes missing geometry in EA Sports team games.
All NTSC-J and the Madden NFL PAL versions unconfirmed, but extremely
unlikely to act any different.
And adds The Simpsons: Hit & Run lens flar fix (see issue
https://github.com/PCSX2/pcsx2/issues/1670)
Fixed title for NCAA College Football 2K3, game is not in compatibility
list.
* Use POD type to avoid SSE/AVX compilation dependency
* global object to reduce cache miss
* dynamically object so give a chance to allocate below 2GB (allow x64
optimization)
A FreeBSD 10.3 user (meowthink) reported to me that games were not
working properly on their system. After some investigation, it was
discovered that aio was buggy on their setup. There's also bug reports
for other applications that involve aio too.
Workaround the issue by using a normal read and disabling the use of aio
on FreeBSD 10.3 and earlier. It'll remain enabled on FreeBSD 11.0 in the
hope that the aio issue has since been fixed.
Fixes Coverity CID 127721: Program hangs
Change the sleep to a condition variable wait, which has the added
benefit of allowing the plugin to close ever so slightly faster if
there's no disc in the drive.
tex address is a3
vm address is a1
Could help to avoid REX prefix
Reduce prologue/epilogue register copy
Byte code size 41893 => 38912 (on my testcase)
* bin2hex.h is removed
* vptest/vpblendvb YMM support integrated upsteam
* better support of rip for 64 bits
* AVX512 support (only miss the CPU now)
Local change: add BSD3 clause
It will requires a generic (register naming) linear interpolation to use it properly
Gather instruction requires an extra mask register therefore all registers name will be shuffled
Perf wise, initial haswell implementation seems to be microcode emulated.
Based on Gabest's work.
* Miss mipmap
Note: dithering info
It is a bit tricky as a2 on linux was rdx register which overlap with fzm (dh/dl)
It might require dedicated windows code
Static size is better aligned but it consumes too much space on the GUI
Besides, if a string (translation) is bigger that the static size it will be cut off.
VU/EE min sized are the same to keep a proper alignment
GetBestWrappedSize (hence the BestSize) computes the size of
the wrapped text based on box side minus padding.
So the width of the widget is already the good size for text wrapping
../pcsx2/gui/MessageBoxes.cpp:62:1: warning: base class ‘class pxActionEvent’ should be explicitly initialized in the copy constructor [-Wextra]
BaseMessageBoxEvent::BaseMessageBoxEvent( const BaseMessageBoxEvent& event )
The main FindMinMax methods is perf critical so instead I created a separate function
to ensure the constness of the depth
Fix letter regression on Xenosaga3
Also refactor the default drive selection and GUI code so optical drive
detection is shared.
Note: This breaks the current config, but there's only one setting
anyway.
Don't use a RAW_READ_INFO struct when only the LARGE_INTEGER member is
used. Use SetFilePointerEx which is slightly simpler and doesn't require
checking GetLastError() in some circumstances to check whether the read
has actually failed.
Also use a mutex to prevent simultaneous access from both the read
thread and the keepalive thread to prevent overlapping SetFilePointerEx
calls from causing the wrong data to be read.
And print error messages should a failure occur.
Also set the max drive speed to 4x DVD and 24xCD (down from 8x DVD and
36x CD) - it seems to reduce pausing slightly since the drive doesn't
require as much time to spin up to the desired speed.
Also set the disc speed at the correct time - CDROM SET SPEED only stays
in effect till the disc is removed.
Also fix a memleak in CDVDopen when the drive cannot be accessed.
It's rather unnecessary to use the same ioctls multiple times per disc
when the info returned doesn't change. Just use each ioctl once and
read/calculate all the necessary info all at onace.
This also fixes an issue where the IOCTL_DVD_START_SESSION ioctl is
repeatedly used if the returned session ID is 0. The previous code
assumed that 0 was not a valid session ID and would repeatedly use the
ioctl to obtain a non-zero session ID. However, 0 is a valid session ID,
and it seems IOCTL_DVD_START_SESSION can repeatedly return a 0 session
ID even if the corresponding IOCTL_DVD_END_SESSION has not been called.
In our case, a DVD session is only necessary for DVD detection and
reading the physical format information. This fix seems to alter drive
speed behaviour.
There doesn't seem to be any issues calling CreateFile with
GENERIC_WRITE access (which is necessary for SPTI) on a standard user
account, so the SPTI code should work in all cases.
Adds separate bindings for each of the pad types (DualShock2,
Guitar,Pop'n Music). This allows the user to change the button
configuration to better suit the Guitar and Pop'n Music pads without
messing up the bindings already setup for the DS2.
Close#1576.
Previously the video mode was initialized using the info fetched from SetGsCrt Syscall though unfortunately, it doesn't seem to work with PSX games as they don't use the SetGsCrt syscall. At such cases, we get the video mode info from the SMODE2 colorburst to properly maintain the timing as per the video mode. Might help some cases on PSX games where PAL/NTSC video mode was improperly set to a wrong limit instead of it's actual vertical frequency limit.
* Explicitly cast w_pages and h_pages into uint32.
* Prevent signed/unsigned comparison by converting lod into unsigned integer, honestly how coud a mipmapping level be negative?
Previously the dedicated custom resolution scaling equation was ignored for the second SetScale() call, generalizing the equations will also fix the DMC scaling issue on custom resolution. Also remove unnecessary checks for null on scale factors. The possibility for having a null scale factor value only exists on custom resolution and it will only happen on cases where the output circuit isn't ready yet. So the ideal way would be to handle all the required conditions of output circuit on "m_renderer->CanUpscale()" itself.
Cost ought to remain small. Worst case is 2 extra "and" operation by group of pixels in scanline renderer
I think PixelAddressN functions are mostly call in the init.
CloseThread is called in the GSJobQueue destructor, so don't call it
again in the GSThread destructor.
Fixes#392, which was caused by a use after free.
Also prevents pthread_join() from being called twice for each thread
on non-Windows operating systems, which is undefined behaviour.
Code can be enabled with "wrap_gs_mem = 1". Code only allow a single shared memory but
I don't think we need more anyway.
Linux only, Kernel panic expected with the HW renderer.
Fix FMV on Silent Hill 3 with the SW renderer
Hardcode location of interface to the location 0. If I understand the
spec correctly (unlikely), variable in interface will get successive
location.
Goal is to reduce driver work. Instead to compute some location based on
name matching approach (and silly validation), the driver can now use
static allocation.
Tests on future Mesa 13 are welcome
Just clear the buffer. The generic solution will be a copy from buffer A
to buffer B But it requires
1/ a big buffer A (otherwise it would overflow)
2/ a line width rescaling (+ the upscaling mess support)
* Add full PMODE register to replace slbg/mmod
* Add full EXTBUF register (will allow to emulate write feedback)
* Add a third source (which will actually be the destination of the
write feedback)
mipmap option 3. Actually maybe a separate tri-linear option will be better
m_mipmap == 2 => use manual PS2 trilinear/mipmap
Otherwise
m_filter == 3 => always use full automatic trilinear interpolation
m_filter == 4 => use automatic trilinear interpolation when PS2 uses mipmap
m_filter == 5 => like 4 but force bilinear interpolation inside layer
A multi sector raw disk sector read that reads data from two tracks of
different types will not complete successfully. Reading the sectors one
at a time should fix the issue.
Fixes black textures on characters in Tiger Woods PGA Tour 2004, 2005,
and 06 through 10.
Known to fix the issue for the following serials: SLES-51887, SLUS-21877, SLES-52509, SLES-54253, SLUS-21483, SLUS-21002
Presumed to also fix the issue for serials(known to suffer from the exact same issue and use the same engine as the other games, so the fix should be the same): SLUS-20757, SLES-53541, SLUS-21264, SLUS-21646, SLUS-21772, SLPM-66191, SLES-54253, SLPM-66674
Fix Berserk #1526 Well done guys but we're more clever than you ;)
So instead to mask the color channels as any guy that RTFM, they decided to use the illegal 8H frame format
WMS/WMT 2 is the region clamping mode.
Hw unit can't emulate it right so it can give you bad filtering (Fix#1025)
Note: I only did the fix because I wanted to remove the TEXA hack. Otherwise
it is still recommended to use openGL
It must work fine without it now.
From the google code comments:
It would be nice to test those games
* Ar Tonelico 2 (line in sprite regression?)
* breath of fire dragon quarter (overlayed user interface in the game)
v2: update Dx code to use the good format
* As sw renderer, don't bother to bypass it when it is ATST_ALWAYS
* Don't update the ATE register value
=> It is a really bad idea. Next draw call will be wrong if TEST register isn't written.
The TryAlphaTest context could have been updated
Newer wxWidgets versions call SetThreadUILanguage() on Windows, which
somehow causes our recursive mutex implementation to take ~1ms when
recursive locking occurs. So when a game boots up and the debugger is
loading the symbol map which can easily have 15000+ symbols, the GUI
locks up for 15+ seconds.
Switching to C++11 recursive mutexes seems to work around the issue. It
should be safe here since there's no direct interaction with the GUI.
Note: There is still a 1-2 second GUI lockup when booting a game on
Windows (it has existed for quite a while, and is more noticeable with
fast boot). It doesn't seem to affect Linux (or maybe it's harder to
detect).
GS really uses an invalid texture located at 0.
Improve the rounding for R&C. The idea is to avoid the corner case were only
the corner of the triangle touch the 7/16 edge.
* Always do +1 before the draw call
* Prefix texture name with i (as input) to keep them before the FB
Goal is to ensure that all renderers share the same draw call value.
Game: harley davidson
* write tex0 ctx0
* write tex0 ctx1
* draw ctx 0
Previous GSdx behavior will load the clut every write of TEX0. In the
above case the draw will take the wrong clut.
To be honest, it could be a wrong emulation on the EE core emulation.
The hardware likely got a single clut (1KB cache is quite expensive)
So clut loading must be skipped if the context is wrong.
Next draw will use the ctx1 clut so I apply TEX0 when the context is switched
Please test harley davidson :)
v2: detect context switch from UpdateContext function
V3: always set m_env.CTXT[i].offset.tex, avoid crash (Thanks to FlatOutPS2 that spot the issue)
V4: move bad psm correction code (rebase put it in the wrong place)
Free bt
3 0xe676d194 in ~Source ../plugins/GSdx/GSTextureCache.cpp:1526
4 0xe676d194 in GSTextureCache::SourceMap::RemoveAt(GSTextureCache::Source*) ../plugins/GSdx/GSTextureCache.cpp:1990
5 0xe676f0fe in GSTextureCache::IncAge() ../plugins/GSdx/GSTextureCache.cpp:1022
Use bt
0 0xe6772a83 in GSTextureCache::LookupSource(GIFRegTEX0 const&, GIFRegTEXA const&, GSVector4i const&) ../plugins/GSdx/GSTextureCache.cpp:204
1 0xe66b0c9f in GSRendererHW::Draw() ../plugins/GSdx/GSRendererHW.cpp:579
2 0xe66fb43e in GSState::FlushPrim() ../plugins/GSdx/GSState.cpp:1509
Hypothesis the m_map array of list contains an invalid pointer
It is populated GSTextureCache::SourceMap::Add based on the coverage. The coverage is based on the offset.
So offset is potentially wrong. As mipmap code hack the offset value. It would be a nice culprit.
This commit avoids a potential bad transition between MIPMAP (which
overwrite the "offset") and the base layer (which wrongly keep an old "offset")
Conclusion, pray for my soul as it is very hard to reproduce
PCSX2 rudimentary supports PlayStation 1 games now. Many thanks to user Wisi on the assemblergames.com forums. He researched and wrote the essential missing piece; The PGIF device!
Note: To use this in any form, SPU2-X needs to be fixed. ZeroSPU2 can be used to boot games for now, but without sound.
Ratchet & Clank (the third) uses an address of 0 for invalid mipmap.
It would be very awkward to put the middle layer of texture in start of
memory. So let's use this information to correct the lod.
It make the game more robust on the lod rounding
- include a small game exe detection so pcsx2 doesn't believe it's running the bios
- cdrom.cpp has a hack to account for pcsx2's wrong iop dma timing when mixing mdec and cdrom dmas. This should be properly fixed for the benefit of all ps2 / psx software!
- dmasif2 is disabled since pgpu already handles it
* Use texraw for the unconverted texture (keep index fmt)
=> avoid bad filename order with the multiple texture layers
* add the real mipmap address
* Use a nice string format
The SPTI code is unused, and it's simpler to just use the Windows
ioctls/API if they work (only raw disk sector reading is an issue and
the SPTI workaround is already in place).
This reverts commit 07d54587 except for the updates of SCUS-97150 (Formula
One 2001 NTSC-U) - where we have a record of compatibility 5, and also
there's an agreement that the patch is not required anymore since ad61503 .
The reverted compatibility values are because we don't have any kind of
records to support them, no one tested them, and they also don't appear at
our online compatibility list.
It doesn't support dual layer ISO images, and the ini has to be edited
manually so it loads an ISO image ("$" has to be prepended to the ISO
path as well). The PCSX2 internal ISO file reader is probably better in
most/all aspects and I don't think it's worth copying the logic from
PCSX2 into the plugin.
gsdx ogl: only use geometry shader to convert big enough draw call
The purpose of geometry shader is to reduce bandwidth (72 bytes by sprite)
and CPU load.
Unfortunately it increases CPU load due to extra shader validations.
So geometry shader will only be enabled for draw call with more than
16 sprites (arbitrarily, smallest number before shadow hearts plummet)
v2: don't disable geometry shader in replayer.
It is easier to spot sprite rendering and to manually read vertex info.
Travis CI now takes into account the environment variables when
generating the cache hash. So the workaround of appending random unique
stuff to "compiler" is now unnecessary.
EE Interpreter: Link Unconditionally on Branch and Link instructions
-Link instructions used to store the return address if the branch was
taken, but the correct behaviour is to store the return address whether
or not the branch is taken.
Customisations:
/: remove all non directories
/builds: Only windows/ftdebug.c retained, custom project added
/objs: Removed (custom project doesn't use the directory)
/docs: Only licence files retained.
/devel: Removed (unused)
Warning can be reenabled on GCC
A warning isn't fixed as potentially the code is wrong
../pcsx2/gui/MemoryCardFolder.cpp: In member function ‘void FolderMemoryCard::FlushFileEntries(u32, u32, const wxString&, MemoryCardFileMetadataReference*)’:
../pcsx2/gui/MemoryCardFolder.cpp:1027:10: warning: unused variable ‘filenameCleaned’ [-Wunused-variable]
bool filenameCleaned = FileAccessHelper::CleanMemcardFilename( cleanName );
Strangely the game uses large texture to handle texture buffer.
I think it plays with WMS/WMT. I'm not sure texture shuffling is 100%
correct here. But without it, it's completely broken.
* 0x9C712FF0, Jak1, EU
* 0x472E7699, Jak1, US
* 0x2479F4A9, Jak2, EU
* 0x12804727, Jak3, EU
* 0xDF659E77, JakX, EU
Please report me the CRC of the US version too so I can add them.
Please test the shadows rendering (openGL HW + accurate blending at least basic)
The game sets the framebuffer as an input texture. So I did the same for
openGL. Code is protected with a CRC. It is working because the game want to sample
pixels.
For the record, I tested it GTA too, it doesn't work as expected because
the game will resize the framebuffer to a smaller one. So you don't have
the guarantee that pixel will be read before a data write.
Note: it requires at least accurate blending set on basic
Note: I need CRC of all Jak games that suffers of this issue. Thanks you :)
Default copy-constructor is eight 32 bits move
GSRendererOGL::Lines2Sprites code shrinks from 510B to 398B
(loop of the function 296B => 181B). Hopefully it will reduce the cost
to convert line to sprite on the CPU (i.e. when geometry shader is disabled)
It impacts all renderers. It ought to fix issue in GTA radiosity,
Shadows in Jak series. (note shadows will suck in upscaling)
Implementation is really brutal. Expect a massive slow down, but at least we can test the effect
easily.
Normally perf impact will remain reasonable if the game doesn't use a Read-Write effect
Performances number are welcomes (my guess is really awful in HW mode, slow in SW mode).
You can enable it with "UserHacks_AutoFlush = 1"
GS memory is only 4MB but rendering is allowed to be 2048x2048
with 32 bits format (so 16MB). Technically the frame/depth buffer can start
at the end of the GS memory. Let's not waste too much memory.
Fix crash with BASARAX
(game draws a 2048x1664 32 bits area)
The hack only fix the HW renderer but not the SW renderer. However I'm not sure
the issue is from GSdx.
The hack will disable alpha test that used to generate empty draw call.
CID 146985 (#1 of 1): Uninitialized pointer field (UNINIT_CTOR)8.
uninit_member: Non-static class member vuxy is not initialized in this
constructor nor in any functions that it calls
CID 168623 (#1 of 1): Missing break in switch
(MISSING_BREAK)unterminated_case: The case for value
GS_VideoMode::Unknown is not terminated by a 'break' statement.
Manual gives all setup to upload a palette from the host. But nothing forbid to render
directly in the palette buffer. (GS rule nb 1, there is no rule ^^)
Fix Virtua Fighter 2 dark colors
However I'm not sure we can fix HW renderer. Rendering is done on the GPU but palette
handling is done on the CPU... So we need to read back data (ouch, and slow). A quick
test didn't get the expected results. Potentially there are others bugs (aka not gonna
happen on the HW renderer)
IOCTL_CDROM_RAW_READ apparently does not work for some read modes on
some optical drives, which makes some CD-ROM games unplayable from the
disc.
Work around the issue by using SPTI to retrieve the raw sector data. The
old reading method has been retained in case SPTI cannot be used (if the
device could not be opened with write access).
Fix motocross mania missing texture. Close#1319
As far as I understand, transfer is initialized in DIR. But the real
write only occured later so the blit buffer could have been overwritten
by a new value.
BLIT 0 13700
TREG 40 40
DIR 0 0
BLIT 0 13f00 <=== the bad guy
Write! ... => 0x3f00 W:1 F:C_32 (DIR 00), dPos(0 0) size(64 64)
v2: set a value in m_tr.m_blit for load state
It creates a regression on game that uses a small temporary target to
upload textures of various sizes. Inital code was done to handle direct
frame write (background, FMV) so big target
Purpose is to control the filtering when final image is displayed on the screen
Could improve the sharpness of the output in some games (ofc, it will be pixelated)
When depth primitive is constant and depth test is greater or equal, we can
execute the depth write after color (depth status will only depends on the initial
value)
New case for RGB_ONLY ate:
If the blending equation uses a fixed alpha or a source alpha. We can postpone the alpha write
in a 2nd pass.
If depth can also be postponed, we can guarantee the order of correctness of the value.
1st pass => do RGB
2nd pass => do Alpha & Depth
It fixed Stuntman letter rendering :) Remaining of the game is still broken :(
PCSX2: IPU end of video freeze fixes
Fixes end of video freeze in Enthusia - Professional Racing.
Fixes end of video freeze with IPU Normal error in games like Enter The Matrix(#1494), Rygar, Freestyle Metal X, etc. Also fixes The Incredible Hulk and Bolt (thanks to @prafullpcsx2 for testing).
My reasoning was off. The -m flag does avoid the clang-tidy startup
cost (which isn't large), but it also increases tail latency because it
allows a straggler command to run much longer. Suppose that many heavy
.cpp files are bundled into one clang-tidy invocation.
Bench from Greg
with -m
./build.sh --dbg --clean --no-simd --clang-tidy 3886.45s user 12.04s system 1066% cpu 6:05.71 total
without
./build.sh --dbg --clean --no-simd --clang-tidy 4297.51s user 41.70s system 1497% cpu 4:49.86 total
* More accurate to PS2 behavior and avoids an useless SMODE write function, it makes sense to also move this as video mode specific colorburst detection was already moved to SetGsCrt.
The vast majority of PCSX2 files use tabs for indentations, and all new
commits also use tabs for indents and not spaces. Therefore, having space
.editorConfig makes it extremely hard to work on PCSX2 files with editors
which support this config file.
There were some concerns that github will make things harder for us
with tabs at .editorConfig, and if that indeed becomes an issue then
we'll have to address it somehow. For now, let's hope it won't.
Also, commented out the line which automatically removes trailing
spaces, since it affects the entire file and therefore makes changes
which the committer did not intend to make at places unrelated to the
commit.
At higher resolutions it takes too much time to save a screenshot at the
maximum compression level. So let's allow the user to set the
compression level.
This re-uses the png_compression_level setting. The default compression
level is 1 for speed, but if the user wishes to increase the compression
level (without using an external tool) and doesn't mind if the
screenshot takes more time to save then they can increase the
compression level up to a maximum of 9 (which can take quite a while).
Fixes#1527.
1. All POSIX shells support $(...) syntax [1], including /bin/sh. shellcheck
warns about it.
2. [[ won't work in /bin/sh [2], so use [ everywhere. I wonder why it worked
now, perhaps the test was running on a system where /bin/sh -> /bin/bash.
3. In POSIX sh, string indexing is undefined. [SC2039]. Unfortunately, this
means we require a subprocess: https://wiki.ubuntu.com/DashAsBinSh. Very
ugly.
4. In POSIX sh, arrays are undefined. We seem to use $flags as an array
after constructing it by string concatenation. I tried to verify that
this has the same effect as just passing the quoted string in bash:
bash-3.2$ flags="-DCMAKE_GOOK"
bash-3.2$ flags="$flags -DCMAKE_MOARMA"
bash-3.2$ flags="$flags -DCMAKE_URURURUR"
bash-3.2$ ./argv $flags
0: ./argv
1: -DCMAKE_GOOK
2: -DCMAKE_MOARMA
3: -DCMAKE_URURURUR
bash-3.2$ ./argv "${flags[@]}"
0: ./argv
1: -DCMAKE_GOOK -DCMAKE_MOARMA -DCMAKE_URURURUR
bash-3.2$ ./argv "$flags"
0: ./argv
1: -DCMAKE_GOOK -DCMAKE_MOARMA -DCMAKE_URURURUR
bash-3.2$
5. Enable exit on unknown variable (-u). All variables should be known,
otherwise we have an error in the script. shellcheck doesn't warn so I
think it's fine.
Apart from shellcheck(1), I also ran checkbashisms(1). The latter only
reported that "command -v" might not be available in other shells.
Apparently only ash(1) doesn't understand it.
NOTE: Why are we even trying to support pre-Mavericks (Darwin < 13) OSX? We
don't even support the most modern OSX (El Capitan) fully yet. OSX upgrades
are free and generally don't leave old machines behind. Most machines made
after 2009 can upgrade to El Capitan, AFAIK. I also believe that systems
that have all the utilities and libraries necessary to build PCSX2 will have
/bin/bash >= 3.x.
NOTE 2: Does cmake/ninja generate the same type of output in
compile_commands.json?
[1]: http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03
[2]: http://serverfault.com/a/52050
Quick benchmark. GCC debug mode
Full build: 6 second better, it can 2 additional cores :)
make : ./build.sh --dbg --clean 213.25s user 22.35s system 881% cpu 26.739 total
ninja: ./build.sh --dbg --clean 203.94s user 18.31s system 1085% cpu 20.474 total
No change build:: 1 second better :)
make -C build_dbg -j 16 install 1.51s user 0.34s system 206% cpu 0.898 total
ninja -C build_dbg -j 16 install 0.05s user 0.02s system 98% cpu 0.074 total
If the dev/verbose logging option is enabled and the game requires
automatic gamefixes, the console log will always scroll to the bottom
when the scrollbar is released since a new log message will be output
when emulation unpauses.
This could be quite annoying when checking a log while the game is
running. The behaviour doesn't seem to be all that useful anymore
(previously it was useful to work around a GUI bug where the automatic
gamefixes/widescreen patches/cheats menu options didn't apply
immediately) and only works on Windows, so let's remove it.
MIPSAnalyst.cpp:124:9: warning: ‘takeBranch’ may be used uninitialized in this function [-Wmaybe-uninitialized]
else if (sure && !takeBranch)
False positive as sure will be false but safer this way
Templace is nicer but give a hard time to compiler.
New version compile in both gcc&clang without hack
v2: add an uptr cast too for VS2013 sigh...
v3: use an ugly function pointer cast to please VS2013
PNG_LIBRARIES adds both libpng and zlib to the command line.
PNG_LIBRARY only adds libpng to the linker command line, and the cmake
documentation also suggests not to use it.
Value seems wrongly rounded and you can't distinguish 0xFFFF from 0xFFFE
Instead check that depth is constant for the draw call and the value from the vertex buffer
Fix recent regression on GTA (and likely various games)
In FB_ONLY mode the alpha test impacts (discard) only the depth value.
If there is no depth buffer, we don't care about depth write. So alpha
test is useless and we can do the draw with a single draw call and no program
switch
Various distribution still ship the true old shell to win 1 second at startup.
Besides, bash syntax is no way better
Not fully tested, some bashism might remain for some options but at least you can
do a standard build
Extend GSVector to support float move
Initial code likely used integer move for performance reason. However due to
the nan correction, register is now in float domain.
It is done too late.
CID 168625 (#1 of 1): Dereference before null check (REVERSE_INULL)
check_after_deref: Null-checking this->cpu suggests that it may be null, but it has already been dereferenced on all paths leading to the check.
I hope it wasn't done on purpose.
CID 168624 (#1 of 1): Missing break in switch (MISSING_BREAK)
unterminated_case: The case for value CMD_CONFIG_MODE is not terminated by a 'break' statement.
CID 168626 (#1 of 1): Uninitialized scalar field
uninit_member: Non-static class member m_end_block is not initialized in this constructor nor in any functions that it calls.
Add a .clang-format example file. Might need minor tuning. If people doesn't like the syntax
Add a basic script to validate current change is compliant with clang-format
* on master it will test last 20 commits
* on branch it will test all commits of the branch
Idea is to plug it into travis (might require clang 3.8). Everything is blacklisted. Use "ALL" parameters
to test all standard directories.
Add 3 new warnings (first one must be fixed I think)
pcsx2/gui/MessageBoxes.cpp: In copy constructor ‘BaseMessageBoxEvent::BaseMessageBoxEvent(const BaseMessageBoxEvent&)’:
pcsx2/gui/MessageBoxes.cpp:62:1: warning: base class ‘class pxActionEvent’ should be explicitly initialized in the copy constructor [-Wextra]
BaseMessageBoxEvent::BaseMessageBoxEvent( const BaseMessageBoxEvent& event )
plugins/GSdx/GSPng.cpp: In function ‘bool GSPng::SaveFile(const string&, GSPng::Format, uint8*, uint8*, int, int, int, int, bool, bool)’:
/home/gregory/playstation/emulateur/pcsx2_merge/plugins/GSdx/GSPng.cpp:64:14: warning: variable ‘success’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
bool success = false;
^
plugins/GSdx/GSPng.cpp:44:58: warning: argument ‘image’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
bool SaveFile(const string& file, Format fmt, uint8* image, uint8* row,
MemCardFilter for Grandia III NTSC-U Disc 2 was applied to the wrong
game. The serials for Disc 1 and 2 are SLUS-21334 and SLUS-21345,
respectively - I assume someone fatfingered when issuing the serials.
Fix rendering issue on letters on Kengo/burnout 3/...
Default algo will execute the alpha test in 2 passes. However due to blending
you can't handle accurately the color.
Fortunately for us, the rendering uses an always pass depth test so you
can execute first all the color rendering (which doesn't depends on the alpha test)
And then the depth part which depends on the alpha test.
* Code was factorized a bit with the help of max_z
* Add an extra optimization if test is ZTST_GEQUAL and min z value is
the biggest value. Z test will always be pass.
Note: due to float rounding (23 bits mantissa vs 24 bits depth) the test
is done against 0xFF_FFFE and not 0xFF_FFFF. It is wrong but GPU will
also use float so impact will be null.
CreateEvent and CreateThread return NULL on failure, not
INVALID_HANDLE_VALUE. This should have been done in
0477e03965, I didn't check thoroughly
enough.
* Only use dark green color for the default cycle rate. using a different color just for a single value (previously for -1) might be confusing for users.
* Use a constant RGB form of dark sea green color instead of the regular dark green color. these new RGB values have been *tuned* for perf...err perfection!
This syncs the cheats_ws.zip widescreen patches archive with Devina's
archive from 2016-08-07.
The zip file is the zipped content of folder cheats_ws at the archive,
after removing the following 10 known WIP patches: 00000000 1771BFE4
C77AF2CA DA3DD765 07652DD9 FDA1CBF6 CC96CE93 2545CA71 1CE1DA8A CD787D68
Compared to the previous content of cheats_ws.zip:
- 6 files deleted (07652DD9 1CE1DA8A 44D23E5F CC96CE93 CD787D68 FDA1CBF6)
- 49 modified files
- 452 new files (w00t!)
- 1939 files identical to before
The zip now has a total of 2440 patch files, compared to 1994 before.
No functional changes done, the current commit helps us to pass vertical frequency values of individual video modes to GUI code for accurate percentage calculation on titlebar. (which is done on the succeeding commit)
The solution files are unused and for ancient Visual Studio versions -
GSDumpGUI has its own solution file, and bin2cpp is included in the main
solution file.
The property sheets have either fallen out of use or were never used in
the first place.
Fixes a regression introduced by 46ba9aa117,
where the Linux GS replayer would always use the options in inis/GSdx.ini
(or use the default options if that doesn't exist) to replay the dump,
instead of using the GSdx.ini from the specified ini folder.
Update done on f712c5c6d0
Previous code use the size of the draw to compute latest block. I
don't know why I use .x/.y which are the origin offset so the start of the block.
Updated/synced from the online compatibility list.
- Update summary:
Not at dbf (and added): 1
Not at csv (but have compat info at the dbf): 258
Unchanged: 2560
Better compat: 23
Worse compat: 0
- Status before:
Imported entries: 9706
Compatibility 1: 7 games
Compatibility 2: 31 games
Compatibility 3: 48 games
Compatibility 4: 70 games
Compatibility 5: 2665 games
- Status after:
Imported entries: 9707
Compatibility 1: 7 games
Compatibility 2: 29 games
Compatibility 3: 48 games
Compatibility 4: 71 games
Compatibility 5: 2687 games
Check the instruction set first in GPUinit, GPUconfigure and GPUtext
to prevent unsupported vector instructions from being executed.
Move the vector initialisation in GPUinit to a separate function - it
avoids a vzeroupper instruction.
This is a regression from 6db18446 , which, due to correctly applying
the patches when the bios starts, also updated the console title (which
happens at the same function).
So when updating the settings and loading the patches, only update the
console title if we're already outside of the bios.
If the dev/verbose console source is enabled then there's no change.
If it's not enabled (i.e. most users), then:
- Don't show patch info messages twice on boot (regression from 27e7ecce).
- Show patch info messages when loading a saved state (never worked).
- Don't show patch info messages for the bios.
It still doesn't print the info when patches/fixes/etc are enabled or
disabled while a game is running, because such actions while a game is
running can have unexpected effects regardless (for instance, it's
technically impossible to unapply a patch).
If one really wants to follow the exact timing and info about patch
loading, just enable the dev/verbose console source at the console menu.
Also slightly modify the textual description of the other underclock items.
All previous values available at the slider are still there, but since
the new value is now the mildest (slider == -1), it "pushes" the previous
-1 and -2 values one notch down.
This restores the mildest value to be identical to how it behaved before
90b11b2f , which is measured as about 75% speed.
Because the "balanced" preset uses the -1 slider value, it means this
restored mild value is now also used by the balanced preset.
As a note, while the message for the mildest value was always "reduce by
about 33%", before 90b11b2f it was actually about 25% reduction (75% speed,
like with this commit now), and after that commit it was about 40% reduction
(60% speed).
Also, since we add new value to the slider only on one side, the "0"
(default) slider position is now not at the exact middle. That's fine,
but maybe we could also add a milder overclock value on the other side
to have that symetric again.
The ee cyclerate percentage values at the slider text were inaccurate,
and sometimes wildely so.
Add some code to measure the actual speed at runtime (disabled by default)
and update the (static) slider text values according to the measurements.
Also change the description from increase/reduce "by AA %" to "to BB %".
This makes it slightly easier to grasp. E.g. "reduce speed to 10%" is
easier to grasp than "reduce speed by 90%", and similarly, "increase
speed to 300%" is easier to grasp than "increase speed by 200%".
While c782b62 added much more reliable game game startup detection, the
settings system did not yet gain that knowledge, but typically that's OK.
Typically the settings (and patches) are loaded according to the current
CRC, which happens once on bios boot (with general settings) and then again
when the game starts, which includes game-specific fixes, patches, etc.
However, if the setting are changed (and therefore also applied) after
the game CRC is known but before the game starts, such as if the user
presses Tab to change framelimiter while at the bios, then until now it
was accidentally applying the game's settings while still at the bios.
This commit makes the settings routine know whether or not the game actually
started, and apply the generic/game settings accordingly.
Commit 330704a added code which applies the patches before recompiling the
elf entry block, but because at that stage the patches for the current
CRC were not yet loaded, effectively it did nothing.
Now it actually loads the patches before applying them.
As a result, it should now be possible for patches (with place=0) to be
effective before the elf is executed.
This is a hack, because the emulation loads the patches while it's not
paused. It works, but it's not great. A better way would be to pause the
emulation once the entry point is detected, then make the setting get
applied normally (which also loads the patches normally), and then resume
the emulation.
This _should_ properly fix#627 (the test case works as expected now).
vector push_back causes a SIGILL signal on a Nehalem (SSE4.2) QEMU VM
when compiled with GCC 6.1.1.
However, an empty constructor causes illegal instruction exceptions to be
generated on a Windows VM.
So here's an inbetween that looks stupid but works on what I've tested.
patches and cheats are exactly the same (pnach style patch line) but we
stored two sets of them depending on their source: "patches" for
GameIndex.dbf patches, and "cheats" for all the rest (cheats, widescreen,
etc).
Unify patches and cheats and keep only "patches", cleanup and rename the
public API at Patch.h, and add documentation.
Also: add some console messages on invalid "place" value, and when we skip
searching cheats_ws.zip because a pnach file was found at cheats_ws dir.
Also: removed checks before applying different kinds of patches/cheats
because we don't need them (we didn't have disabled patches loaded anyway).
The checks removal _shouldn't_ have any effect, except that the checks were
wrong and accidentally prevented loading widescreen hacks which have a place
value of 0. No one probably noticed it since all the widescreen patches
which I looked at have a place value of 1. So now ws patches with place=0
would load correctly too. If we'll ever have such.
This commit doesn't change any behavior, but documents the "places" value
of the patch structure ("place" is 1 in patch=1,... and 0 in patch=0,...)
and also uses an enum to make its use explicit.
If cheats are enabled and loaded (pnatch files from the cheats folder, or
from the cheats_ws folder, or from cheats_ws.zip), then they were still
applied for some time while rebooting the emulation after a game is already
loaded (e.g. start pcsx2, boot fast, play, boot full). This could cause
the reboot to fail if some patches were applied (e.g. widescreen patches).
It seems that the offending application of the cheats happens at
SysCoreThread::VsyncInThread(), which possibly runs before the config
change event is handled (and re-load the cheats for the current crc).
So reset/invalidate the cheats when the VM is reset.
This should improve issue #851, but ultimately not fully fix it, since
the patches (from games db) are not reset yet with this commit, and we
don't have a function to do so. For now the non-cheats patches are only
reset/reloaded when a configuration change is being handled.
It would probably be a good thing if we can unify patches/cheats.
Not tested
* rumble
Save/load state will be implemented in the next commit
v2:
* Print current deteced pad mode
* fix dpad button tranmission
close#366
Fix#1457 (GTA)
The game uses a depth format for a pure color buffer (cokes do ravage
in gaming industry)
However I'm really afraid that it migth break another effect in other games.
==18373== Conditional jump or move depends on uninitialised value(s)
==18373== at 0x825CC9B: CtrlMemView::render(wxDC&) (CtrlMemView.cpp:277)
==18373== by 0x825DA19: CtrlMemView::paintEvent(wxPaintEvent&) (CtrlMemView.cpp:138)
==18373== by 0x81F3A5F: Pcsx2App::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&), wxEvent&) (AppMain.cpp:614)
==18373== by 0x40BC50B: wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const (in /usr/lib/i386-linux-gnu/libwx_baseu-3.0.so.0.2.0)
==18373== by 0x426C654: wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (in /usr/lib/i386-linux-gnu/libwx_baseu-3.0.so.0.2.0)
==18373== by 0x426C752: wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) (in /usr/lib/i386-linux-gnu/libwx_baseu-3.0.so.0.2.0)
Reported by gcc too
Fix valgrind issue:
==3560== Conditional jump or move depends on uninitialised value(s)
==3560== at 0x81F7949: CtrlRegisterList::OnDraw(wxDC&) (CtrlRegisterList.cpp:291)
==3560== by 0x47826DE: wxAnyScrollHelperBase::HandleOnPaint(wxPaintEvent&) (in /usr/lib/i386-linux-gnu/libwx_gtk2u_core-3.0.so.0.2.0)
==3560== by 0x4785969: wxScrollHelperEvtHandler::ProcessEvent(wxEvent&) (in /usr/lib/i386-linux-gnu/libwx_gtk2u_core-3.0.so.0.2.0)
==3560== by 0x426CA0E: wxEvtHandler::SafelyProcessEvent(wxEvent&) (in /usr/lib/i386-linux-gnu/libwx_baseu-3.0.so.0.2.0)
==3560== by 0x4710BAE: wxWindowBase::HandleWindowEvent(wxEvent&) const (in /usr/lib/i386-linux-gnu/libwx_gtk2u_core-3.0.so.0.2.0)
==3560== by 0x44EF67D: wxWindow::GTKSendPaintEvents(_GdkRegion const*) (in /usr/lib/i386-linux-gnu/libwx_gtk2u_core-3.0.so.0.2.0)
Use portaudio devel build for devel config - it fixes a warning that
occurs due to incompatible linker settings (incremental vs whole program
optimisation)
Also add 64-bit configurations.
I'm not sure to understand why Valgrind reports it as we populate the buffer
during the ReadAsync. Maybe Valgrind doesn't like async IO from the kernel.
In doubt, the init will avoid those warnings
==19897== Thread 6 EE Core:
==19897== Conditional jump or move depends on uninitialised value(s)
==19897== at 0x80FE9E1: BlockdumpFileReader::DetectBlockdump(AsyncFileReader*) (BlockdumpFileReader.cpp:40)
==19897== by 0x8109EE5: InputIsoFile::Open(wxString const&, bool) (InputIsoFile.cpp:229)
==19897== by 0x810939E: ISOopen(char const*) (CDVDisoReader.cpp:57)
==19897== by 0x810194E: DoCDVDopen() (CDVDaccess.cpp:359)
==19897== by 0x80B651C: SysCorePlugins::OpenPlugin_CDVD() (PluginManager.cpp:1219)
It is a pseudo leak as it is a global object. Nevertheless it pollutes
the valgrind log.
v2:
* use an array of unique pointer
* use ArraySize instead of a constant
Group common properties. This removes some of the optimisation
properties, which aren't really essential since bin2cpp is only used as
a tool to convert images to header files.
Add 64-bit configurations.
Combine all the different configurations together so the project files
are more generic and maintainable.
Also standardise the layout so all the project files will be similar and
all have the same standard elements (even if empty).
Add 64-bit configurations.
Additional specifics:
spu2-x: FLOAT_SAMPLES preprocessor definition removed since it's unused.
Combine all the different configurations together so the project files
are more generic and maintainable.
Also standardise the layout so all the project files will be similar and
all have the same standard elements (even if empty).
Add 64-bit configurations.
Combine all the different configurations together so the project files
are more generic and maintainable.
Also standardise the layout so all the project files will be similar and
all have the same standard elements (even if empty).
Add 64-bit configurations.
Additional specifics:
wxWidgets: Common stuff into the property sheets.
pthreads: Fixes the LNK4068 warning.
portaudio: Devel config added.
libjpeg: Non-existent file removed.
Side note: libjpeg is barely used - wxWidgets uses it but doesn't have
to, ZeroGS uses it but we don't develop that anymore.
Don't use "-dbg" target suffix - both Devel and Debug builds use the
property sheet, so it's incorrect.
Also don't set optimise references to false - it's incompatible with
incremental linking and causes compile failures.
Write pointer can be relaxed-read from the EE thread
Read pointer can be relaxed-read from the VU thread
Warning: AtomicExchange calls were replaced by release-store
However AtomicExchange generates a memory barrier (at least on linux)
So either it is useless and it will be faster, or it will explode ;)
* Avoid the generation of memory barrier (mfence)
* Based on the fact that it used to work on previous code without any
barrier
v2:
* keep basic code in reset path
* use relaxed access for isBusy. The variable doesn't carry load/store
dependency but is instead an hint to optimize semaphore post
Read pointer is only written by the MTGS thread so it can be relaxed-read
by the MTGS thread
Write pointer is only written by the EE thread so it can be relaxed-read
by the EE thread
Remove volatile stuff
* Avoid the generation of memory barrier (mfence)
* Based on the fact that it used to work on previous code without any
barrier
v2:
* keep "slow" and safe atomic on reset path
* use relaxed atomic for m_RingBufferIsBusy
The signal doesn't carry dependency with others load/store. Instead it is used
as an hint to awake the semaphore
As a side, there is a potential thread bug
T1 do
* wait sema
* busy = true;
* while (!queue.empty) do work...
* busy = false;
* go back to wait sema
T2 do
* post sema even if busy is false
If T1 stop after the while queue but before the busy, T2 won't post the
event. When T1 will wake up, it will block on the semaphore
Use a relaxed atomic to read the exit variable in the hot path
Wait that exit is deasserted in the destructor, so we are sure the
thread will "soon" return
Value could range from 1 to 9. Default is 4 and it is potentially the
best option. Feel free to test some values on your system, behavior
might depends on the core number and thread number
Value is exponential so 4 is 2 times more pixels than 3.
Small value increased thread overhead, big value increase wait/sync latency
memory overhead by thead is only 256KB
However it will reduce the probability to block the push thread to nearly 0
I tested a couple of dumps and only manage 4000 element with 1 extrathread.
Add a factor 2 on the VRAM to get the quantity of available memory for the textures.
The driver is allowed to put some textures in RAM. Of course it is bad for performance
but it won't crash.
Due to the 4GB by process limit, I keep a (reasonable) maximum of 3.8GB.
In order to avoid a crash when memory is too low an exception will be risen
with no guarantee on rendering and big performance impact. In this situation
you ought to reduce upscaling/disable large framebuffer.
* Fixes a bug where NTSC VideoMode was automatically used when videomode is uninitialized. the bug was only temporary till the SMODE register was written.
Technically there's no term called "RegionMode" and the values obtained through the SMODE1 register is actually used for identifying the video mode of the game not any region modes.
* Convert "GS_VideoMode" into an enum class
* Does the first vsync (start counter) after the sleep
* Dump data after the rendering, avoid to count extra destructor,sleep time
* Dump data into a basic csv file (if people want nice graph)
There is only a single event queue, so you need to detect the pad based
on the configuration
Mouse/Wiimote is limited to first pad
Related to issue #1441
In file included from GSRenderer.cpp:23:0:
GSRenderer.h: In constructor ‘GSRenderer::GSRenderer()’:
GSRenderer.h:58:12: warning: ‘GSRenderer::m_dev’ will be initialized after [-Wreorder]
GSDevice* m_dev;
^
GSRenderer.h:52:13: warning: ‘GSVector2i GSRenderer::m_real_size’ [-Wreorder]
GSVector2i m_real_size;
^
GSRenderer.cpp:32:1: warning: when initialized here [-Wreorder]
Grouping bytes in debugger memory window, following pointers and history
Goto in register view
Printing strings in pointer registers
Memory view can be resized correctly by ctrl+wheel
Improvement in function 5900DebugInterface::isValidAddress
usb-kbd: Remove unused variable.
usb-ohci: Add proper casts for the variables.
vl: Add proper casts for the variables.
USB: Add proper casts for the variables.
GLLoader: cast passed parameters to required type.
GSDeviceOGL: cast variables to required type and silence warnings.
GSRendererOGL: cast variables to required type and silence warnings.
x86emitter : Convert variable type from u8 to bool.
recVTLB: Cast "sign" to bool to prevent a warning.
R5900OpcodeImpl: Cast all the values in array to u64 instead of s64.
It creates some slowdowns for unknown reason. My best hypothesis is
that stencil will be cleared too which is slow.
Let's keep the code for the future when stencil will be dropped.
Fix#1420
If baseline and display rectangle offsets differ by small values then consider the status of frame memory offsets, prevents blurring on Tenchu: Fatal Shadows, Worms 3D, ProStroke Golf, Vexx
* Improve frame buffer height management on custom resolution. Width seems to be fine with the same size as scaled image output.
* Prevent offset issues on Persona 3 based on the data from merge circuit.
Note: Fixes custom resolution upscaling on ICO 50Hz/60Hz mode when large frame buffer is enabled. previously 60Hz mode only displayed half of the screen and 50Hz mode only worked due to the scissor hack.
The TLS buffers used by the FastFormatUnicode and FastFormatAscii
classes seem to be responsible for PCSX2 not terminating properly on
Windows under certain conditions (using MTVU before commit
1111e03901, using CDVDgigaherz without a
disc, possibly other conditions).
When PCSX2 shut downs and the FastFormatBuffers are being cleaned up,
the call to pthread_key_delete() would end up calling
WaitForSingleObject(e, INFINITE) and waiting indefinitely for an event
to trigger. It never does get triggered (for reasons unknown) and
therefore PCSX2 doesn't terminate properly.
Remove the usage of TLS buffers in the FastFormatString classes - it
fixes the termination issue on Windows and doesn't seem to have much
effect on performance.
* Ignore Frame memory offsets for calculating dimensions value of display rectangle.
* Remove hack which limited scaling size based on the scissor value.
Note: With the following commit, SilentHill 2 now properly outputs the desired resolution by the users on custom resolution. Previously if we set 1024 x 1024 , it'll output a lower height value which was caused by the hack removed on this commit.
Force VU round mode set to Extra+preserve sign in The Lord of the Rings: The Two Towers : Shiny weapons will no more show as white texture in-game. For all PAL/NTSC/NTSC-J releases of the game. Fix the name of a japanese release and add the chinese release of the game to the database.
Fixes regression introduced by the pop'n music controller support PR.
When modifying the axis direction combo box in the Configure Binding
group, the modified binding's info would get deleted and replaced by the
next binding's info. This results in incorrect info being passed to
BindCommand().
This commit reverts the incorrect code so the binding info is backed up
before deletion takes place, therefore ensuring the correct info is
passed to BindCommand().
It ought to be the same in performance but code will be easier this way
v2: print the sync status
v3: use a performance print so it doesn't spam the console
Force Round Mode to Nearest on Guitar Hero 3 & Aerosmith version by default : Fix the random crash on PCSX2 while playing and fix all graphics issues in Software Mode.
For all PAL/NTSC/NTSC-J versions.
* Support Mesa Nouveau IR (free driver for Nvidia's GPU)
=> Print intermediate representation + final shader
=> Dump GPR usage
* Move dumped shader in /tmp/GSdx_Shader/<sub_dir>
=> Avoid the landing of 3 thousands of files in $PWD ^^
* Use function instead of macro
The layout of the buttons is improved to more closely resemble a modern analog controller/DualShock configuration, and the Device column of the list view has been reduced slighty so by default the horizontal scroll bar isn't visible.
Revert "PCSX2-Counters: Some Changes to Video mode counter stuffs"
Problem: New timings for HDTV modes make games run too slow. VSyncInfoCalc() needs to be checked first.
Adding shortcuts to all the menu options, that only some of the options
in the Config tab already had.
Also update translations so menus are still localised (well, mostly).
Using __declspec(dllexport) causes duplicate export warnings to be
generated when compiling 64-bit builds. Name mangling also occurs on
functions that are exported this way, so it doesn't actually work with
the plugin system, which uses unmangled names.
The module definition file exports the functions without name mangling
and is sufficient on its own.
I accidentally removed it in a previous commit. It probably didn't
affect anyone though (you'd need to be using a DS3 via libusb, most
people will be using other methods).
Increase the performance on the free driver (Nouveau)
Currently the driver validates all UBO when only 1 is updated. It
is clearly a bad idea to put all UBO in a single common headers.
* The detected values using the SMODE registers were for the video modes and not the region of the game, changed the variable naming to video modes to prevent any confusions.
* Fix a bug where 1080I was reported as progressive
* Convert GS_VideMode into an enum class
* Move VideoMode init code from _gsSMODEwrite to SYSCALL
* PCSX2 will now correctly report whether the video mode is NTSC/PAL/VESA/480p/576p/720p/1080i/1080p
-SYNC.L should be called before this command forcing the cache to writeback to memory, but that would be slow to do every time, so we will do it on this command.
This reverts commit 8a61c7d336.
The plan is to support both XAudio2 2.7 and 2.8+. This file will only be
used for 2.7, so let's remove the ifdefs and rename the class and vars.
find . -name *.vcxproj -exec sed -i -e '/user.props/d' {} \;
Microsoft recommends against using .user files. From
https://msdn.microsoft.com/en-us/library/669zx6zc.aspx :
"The best practice is to delete the reference to them in Property
Manager to ensure that your projects operate independently of any
per-user, per-computer settings. This is important to ensure correct
behaviour in a SCC (source code control) environment."
If you cannot compile SPU2-X after this commit (since that still relies
on the old DirectX SDK), you'll need to fix your build environment.
Legacy GPU:
Older driver will be broken.
Still supported GPU:
Please upgrade to the latest AMD driver 16.5.2 or 16.5.3 (and prey that future driver will still work)
Potential issue
* miss a default value
* Renderer is DX9 again on windows
* Case issue
* Same default for all code paths
* overload of GetConfig
v2: separate specific OS option
Windows Vista onwards provides application specific volume controls, and
the local volume feature only interferes with it. Any volume adjusting
stuff probably belongs in SPU2-X.
Closes#629
The code wasn't used, and generally low level hooks should be avoided
since they affect the responsiveness of all applications. On Windows 7
and later, the hooks may also be silently removed if they timeout, which
could be possible under heavy load.
The close hacks don't work with PCSX2 - the WM_CLOSE message can't
actually be triggered for the rendering window. The hacks were also
designed as a workaround for some PSX emulator close window bugs, which
don't affect us.
Enable it to ensure correct rendering (FMV)
Disable it to reduce GPU/memory requirement
Option will likely be removed when the perf impact will be reduced.
It's more portable.
Use _mm_shuffle_epi32 instead of _mm_movehl_ps - I think it avoids
data bypass delays going from integer to float domains on older
processors, and Agner's tables indicate that the instruction has the
same latency and occasionally has higher throughput (depending on cpu).
And switch the _mm_xor_si128 and _mm_unpacklo_epi8 around so the same
constant can be used for both C bias and alpha.
* Fast accurate DATE is always enabled, it was faster than standard DATE
* The less fast version is always enabled too. It is likely barely used
so perf impact will be small on few game that could hit this path.
Nice rendering has a higher priority
* The "slow" path will depends on the date option.
Note normally it isn't too slow (-10%) if GL_ARB_shader_image_load_store
is supported but AMD crimson is an epic fail.
Fixes games like Time Crisis 2/3, which use two half-width display
rectangles placed side by side in split screen mode by using different
DISPLAY.DX values.
Issue1: Depth buffer is wrongly invalidated only the first page is detected.
Issue2: First page seems to be partially written. Could be a GSdx transfer bug.
Anyway, invalidation only support a page granularity.
So here a quick workaround that will clear depth buffer in case of very small partial write.
Might worth to check regression on nocturne/digital saga
Also make the build noisier to prevent some build failures when download
speeds are slow from whatever repository.
Note: The 64-bit devel build currently doesn't benefit from ccache for
whatever reason.
[skip appveyor]
It would requires some texture dynamic width convert shaders.
So as a quick solution, let's add a new CRC hack.
For issue #1362 (granted the CRC is correct)
Faster :) Reduce further the cost of accurate date
The optimization will clear the stencil to 1. So all pixels will have a
single sample that pass both the depth & stencil test. No primitive
overlaps So the destination alpha test can be done directly in the
shader.
Game often uses date to allow a single pixel pass. If this
use case is detected, stencil buffer will be cleared after first pixels
that pass both depth&stencil test.
It seems to reduce the load on the GPU.
Note: with the help of texture barriere, maybe we could implement the algo
with a single pass.
If a color buffer is still attached and is smaller than depth buffer,
the latter won't be fully cleared.
As a faster alternative, use GL4.4 clear texture function. Avoid to fiddle with
framebuffer and pixel tests.
Fix #1362x Ar Tolenico 2 map clip
Avoid crash on some systems switching HW><SW in fullscreen aspect
ratio's with FMV Software switch.
Replaces previous zoom adjusting fix with a more efficent one.
Squashed a small improvement into commit.
Fixes#1353
DebuggerLists:
Select does not ensure the item is visible if selecting
Went with existing convention of Select and Focus.
CtrlRegisterList:
Added ensureVisible, called whenever the current row selection is
changed
So just reuse GT hle shader :) Acid stage is now correct. However it might need
some tuning for others stages.
Still look awful with uspcaled resolution (note internal game framebuffer is around 160x128)
The old config settings were wrongly used when determining whether to
load patches, cheats and widescreen hacks. These settings needed to be
applied twice to actually take effect if they were changed while a game
is running.
Use the incoming settings so the settings only need to be applied once.
Until AMD release the driver with a fix, I can't use 2nd blending source with SSO.
So let's use the first source. Blending/Alpha will be wrong. But it is likely better
than an uninitialized alpha value.
On Windows, it seems that if you resize the columns in the size event
handler when the scrollbar disappears, the listview contents may decide
to disappear as well. So let's avoid the resize for this case.
"Enable Hardware Depth" removed from main dialog.
"Disable Depth Emulation" and "Fast Texture Invalidation" added to Hacks
dialog.
And fix lots of whitespace issues.
GSDX: Improvements to the config interface.
- GSDX: Add new logos to dialog
- GSDX: Remove all the extra null renderers
- GSDX: Changes to renderer combobox
- Sort all the renderers in ascending order. (the fact that D3D11 was
above D3D9 really annoyed me >_<)
- Properly display usage of D3D10/D3D11 on the combobox.
- Use highest available version of DX by default.
- GSDX: gray out upscaling hacks at native resolution
- GSDX-PSX: Modifications to the dialog
- Add new logos
- Remove SDL renderer from combobox since it was removed long ago.
GSOffset is already based on a lookup of PSM/BP/BW. Coverage only adds
the size parameters (so only 256 possibilities)
It replaces the hash lookup with a free array access.
Will use integral coordinate to avoid any rescaling.
Bilinear interpolation isn't supported. I don't think it is allowed to
filter a depth texture anyway.
The hypothesis is that game will use a depth (aka Z32/Z24/Z16/Z16S)
format when sampling depth texture as color. Technically one could use
a standard color format but block/pixel order won't be the same.
(otherwise I'm screwed)
=> Hypothesis invalid on GoW. They just do a scrambled rendering...
Lookup info:
* The first searched list is the depth pool as we search a depth
texture.
* 2nd one is the render target pool (if a depth was converted to a
render target already)
To avoid any CPU overhead, the source will be a pointer to the real texture
* Conversion (if float texture) will be done on the fly by the shader (GPU).
* Relative rescaling won't be supported. Texture must be fetched with
integral coordinate
Cache page coverage of texture into a hash map
Test done on Champion of Norrath (paltex + DisablePartialInvalidation)
Profiler:
Self of GSTextureCache::SourceMap::Add 5.39% => 0.23%
Self of GSTextureCache::LookupSource 15.27% => 10.82%
Hard to measure on CoN as it depends on memory transfer. Seem to be 5-10 fps faster.
They're not really needed, and some of the exported functions don't
actually match what PCSX2 currently expects (i.e. PADgsDriverInfo,
GSgetDriverInfo).
Although it can be fixed up, it's simpler to just remove them.
This reverts commit 53690cf9d0.
Quoting user:
For aliasing, the option allow of reduce a little but always very
visible compared with DX11 even with anisotropic OFF, , furthermore
many textures bug added with option activated (predictable but not see
on DX11 with anisotropic ON).
TL;DR doesn't worth it.
Note: it seem to work on DX because DX uses HW texturing in clamp region
mode (and others invalid case). OpenGL uses SW texturing to ensure accuracy
* keep a reference of program/pipeline created to ease the deletion
* extend a bit the API to support multiple pipeline
Final goal will be to use a pre link pipeline for SW shaders. And uses
the default pipeline for HW shaders.
By default, anisotropic filtering was disabled when textures aren't countinuous.
This hack allows to force it. It can help to reduce aliasing but it would create
unexpected effect on texture boundaries.
Again, someone ought to add the option on Windows too
Someone ought to add the Windows option too (and DisablePartialInvalidation too)
It might break a couple of games but most of them run better with depth enabled.
Always show number of loaded widescreen hacks/cheats in console title
if the respective options are enabled (even if none are loaded).
Always print the number of loaded widescreen hacks to the console if
the option is enabled (even if none are loaded).
Fixes an issue with the D3D backends crashing if the configure dialog
is accessed and ok is pressed. The D3Dcompiler dll is freed and a null
pointer is dereferenced.
It might break gsdxgui but GSshutdown really should not be called unless
GSdx is shutting down. GSDumpGUI on Windows provides the same (or
better) functionality.
* Silent Hill 2 doesn't need the CRC hack
* GSRenderer: no need to explicitly set bottom value for r.
* Texture Cache: Removed a check which couldn't possibly enter true
branch.
For some reason some Windows 7 systems (most are unaffected) cannot cope
with LoadLibraryEx and return error code 87 - "The parameter is
incorrect".
Switch to using LoadLibrary instead for any case where Windows 7 is
expected to successfully load the requested dll. Potentially Windows
Vista is also affected.
So let's increase the height. It will increase the memory requirement on some games
v2: try to do it automatically
(not sure it will useful as most game will requires it)
v3: let's back to an hardcoded 1280 size. It generates too much issue
Try to avoid random black screen frame
v2: don't force the preload hack on the frame
It creates a ghost image over FMV
v3: support offset within a frame
The long story:
Game blits FMV far aways of the RT which is actually the input of the RO texture...
Currently GSdx suffers of 2 bugs.
1/ RT is too small
2/ texture isn't properly updated with the rendered value. Texture is invalidated
but it reads back the pixels from the GS memory whereas the correct
value is located on the GPU.
This commit will replace the standard draw by a manual blit. Therefore it avoid
size issue and bad upscaling issue.
v2:
* Use various copy to be more compatible with dx api
* Move all part of the hack info the BlitFMV function
v3: add log message
It often happens the game try to upload the FMV directly which typically
gave a black screen.
Commit fix rules of roses and I hope various black screen FMV
Performance impact must be tested, and I'm afraid of strange texture cache behavior.
V2: check the size of the transfer too
V3: add support of 16 bits format
V4: avoid division by 0
This prevents desync between what is assumed to be the active filter and
what is actually the active filter, fixing errors like #1179 where the
memory cards are closed and reopened for whatever reason.
Using D3DX11 requires the end user to install the DirectX redist files.
Switch to using D3DCompile, and distribute D3DCompiler_47.dll for
Windows Vista, 7 and 8 users (Windows 8.1 onwards supplies
D3DCompiler_47.dll with the OS).
The french version of Oni will be playable, no more stuck in a black screen after the intro videos. Added also the PAL-S and PAL-I Oni entries to the list.
Set VU0/1 to Nearest by default in order to fix the graphics and avoid a PCSX2 crash to Tony Hawk's games. Corrected the name of a Tony Hawk's Underground (PAL) release. And Jak X (PAL/NTSC) will now boot correclty, avoiding a black screen by default.
The DVD layer 0 sector count is stored in the Volume Space Size field of
the Primary Volume Descriptor on DVD layer 0. This value is the same as
the total sector count for a single layer DVD and the first layer 1 LSN
of a dual layer DVD.
Let's use that to determine the layer 1 start LSN instead of using the
brute force approach. Since this approach is much faster than the
previous approach, the layer break is no longer cached.
It actually removes the previous hack that read the full target.
Unfortunately snowblind engine game uses big target so the read is very big too (1280x448)
which is killer for the perf. Whereas the game requires only 24x12 texels
Give a 2x speed boost on Champion of Norrath !!!
Set VU0/1 to Nearest by default to Tony Hawk's Downhill Jam in order to fix the graphics (like other Tony Hawk's episodes using the engine by Neversoft).
Set VU0/1 to Nearest by default to Tony Hawk's Proving Ground in order to fix the graphics (like other Tony Hawk's episodes using the engine by Neversoft).
Games uses very special texture with a lots of repeating.
It is much faster to send the full texture rather than trying to partially invalidate it.
On my gs dump:
FPS: 29 => 68 !
Persona 4 cheats file and the cheats folder a redundant, as the
installer doesn't use this folder, but creates a seperate cheats folder
in My Documents/PCSX2 and the Binary release creates a cheats folder the
first time you start up PCSX2.
ReadFile reports that the DVD is reading from the end of file when
attempting to read any layer 1 sectors.
Use the FSCTL_ALLOW_EXTENDED_DASD_IO ioctl to prevent the file system
driver from carrying out boundary checks.
cdvdgigaherz only determines whether there is no disc, a CD, a single
layer DVD or dual layer DVD in the drive. It does not detect whether a
CD/DVD is a PS2 CD/DVD or not.
Fix the missing TOCs.
The calculated size values were off by one for single layer DVDs, off by
two for dual layer PTP DVDs, and just wrong for OTP DVDs.
Usually the IOCTL_DISK_GET_LENGTH_INFO ioctl will have succeeded already.
Only 1 IOCTL_DVD_READ_STRUCTURE ioctl call is necessary for determining
the DVD media type and layer break address. All the necessary
information is already present in the layer 0 physical descriptor.
For dual layer DVDs, CDVDgetDualInfo() should return the first layer 1
LSN, not the last layer 0 LSN, which is what GetLayerBreakAddress()
returns. This matches what the internal ISO reader returns.
Also, PTP DVDs should return a value of 1 for the media type, not 2.
Finally, adjust the CDVDgetDualInfo() return value so PCSX2 correctly
recognises dual layer DVDs.
Basically I ran
find . -name "*.vcxproj" -exec sed -i -e 's/_xp//' {} \;
This will likely break XP, but it paves the way on Windows for a PCSX2
that does not require the DirectX redistributables to be installed for
Windows 8, 8.1 and 10 users. Windows Vista and 7 users will still require
the DirectX redistributable files for XInput and XAudio, though PCSX2
should still be capable of running if a user does not actually use either
of them.
All GL4 extensions supported by DX10 class GPU will be soon mandatory
Namely:
* GL_ARB_copy_image
* GL_ARB_texture_barrier
* GL_ARB_clip_control
* GL_ARB_direct_state_access
* GL_ARB_separate_shader_objects
* GL_ARB_buffer_storage
There are likely few games (RE4) which constantly change the FBW register value causing the framebuffer width to be updated at every interval. Adding a safe limit (512) similar to frame buffer height would prevent such constant changes of the framebuffer width when FBW changes once again to an even lower value.
isBreakpointNeeded returns if breakpoints are needed for any combination
of the current pc and delay slot.
dynarecCheckBreakpoint checks conditions for each breakpoint slot.
Valid values for png_compression_level are from 0 (no compression) to 9
(max compression). The default is 1.
v2: Use zlib Z_BEST_SPEED (1) and Z_BEST_COMPRESSION (9) defines.
v2: use an explicit int type for clang
// multiple conversions from switch condition type
// 'std::atomic<ExecutionMode>' to an integral or enumeration type
v3/v4: use .load to read variable (clang 3.7)
v5: add back 'std::atomic<ExecutionMode>' now that .load is used everywhere
So let's not specify it as a build dependency.
Also remove some unnecessary manual library linkage and remove the
wsWidgets GUI property sheet, which does nothing useful.
Feedback fix, when more than two gamepad are used simultaneously.
Change all 'this->' by 'm_'
fix on the hack sixaxis pressure
Modification of the size (1000x760 -> 1000x730)
Can set all buttons. Buttons labels are not printed correctly in spite of update and refresh
The cause of this problem come from the while in the config_key function which monopolise ressources
Add arrow pictures implementation
OnePad : bug fixed (assert failure)
Modification of copyright
WS_POPUP causes fullscreen tearing when using OpenGL and the GSPanel
rendering area exactly covers the full screen. (always affects stretch
mode, but most people have 16:9 monitors, so in general the widescreen
16:9 mode is also affected).
Fixes#1075
It's been available since XP and it's not special like XInput (where we
might have SCP in the middle) so let's have the linker resolve the
functions at link time.
The following patch uses the height value of the display rectangle rather than make an estimation of the Frame buffer height when the game uses a non-referenceable height (or) width.
Removed some unneeded explicit calls of the enable function and also corrected the placement of braces on a function. ( do note that only the specific function at the file used a different placement of the braces)
Also fix the grayout behavior of SuperVU recompiler option when DISABLE_SVU is defined. (thanks to turtleli)
Pretty big translation update. It is now 100% complete, but I'll go on using it to see if I forgot some things.
Pretty big translation update. It is now 100% complete, but I'll go on using it to see if I forgot some things.
Localization update #2
3rd edit (and the last, hopefully)
4th edit
5th edit (the last, for sure)
Fixed a string that was too long and didn't fit
This is a combination of 2 commits.
Don't lookup a depth buffer if depth test is always pass without write
Boost performance on Tekken5 when depth emulation is enabled in openGL
(Tekken5 sets same address for both the RT and the depth but depth is disabled)
v2:
Keep ds if DATE is enabled (some implementation uses a stencil buffer)
Be more aggressive to avoid an useless depth lookup
Texture coordinate could be dummy/float/int integral/int normalized.
Old behavior:
* VS was in charge to select the texture coordinate
* int integral format wasn't supported
New behavior:
* Always compute all formats
* FS will be in charge to select the good format
Impact:
* VS will be slightly slower but it reduces shaders permutation from
little to 0 (won't be bad for CPU)
* FS speed isn't impacted as 2 separate code paths were already required
to support both format
* Rasterizer will be 33% slower but unlikely to be the limited factor of
the GPU
* In future we could directly use the integral format in the FS.
V2: remove useless PSin_t
It would be on by default. Unsafe & fast path.
The hack is a security if someone encounters any issue
v2: update Windows gui file
v3: fix typo in tooltip and linux gui
Fixes an issue where the Enable all/Disable all/Restore Default menu
items in the Console Log Sources menu do not immediately enable/disable
CDVD log output.
Buttons done, configuration initialization done.
Still need to add Gamepad and Joysticks configuration frames.
Require png file for the moment (the embedded picture will be fixed after).
New Onepad GUI based on wxWidget (Main frame almost finish)
Background picture is now embedded
Button binding works
Loading and saving works
Need to add feedback and gamepad, joysticks configuration frame
Modification of the onepad CMakeList.txt
Automatic generation of images headers using perl script
Modification of the test feedback function
Changed the word "Playstation" to the proper "PlayStation" in the About
dialog and the Command Line Options dialog.
Add a space between PlayStation and 2.
memory copy will be done in SSE or X86 only. It is very unlikely that
it was used anyway (need 64 bits transfer and no XMM register available)
Remove the now useless _allocMMXreg and _getFreeMMXreg too
Code need to be enabled with a define (NO_MMX 1)
Code was tested with ps2autotest but it need more tests. I need to check
alignement issue too.
Globally code is potentially a little slower than SSE.
The trick is that we need to shift only the 64 lsb whereas SSE will
shift the full 128 bits register.
Current implementation flush the lsb and drop the full register. It is
unlikely that next intruction will be done in SSE anyway.
Note: it would be easier in x64 arch
Visual Studio Find and Replace can only be trusted if all the files are
included in the project. I suppose it's time to add any missing files
to the relevant projects...
pcsx2/Dump.cpp: In function 'void iDumpBlock(u32, u32, uptr, u32)':
pcsx2/Dump.cpp:258:4: error: cannot convert 'wxString' to 'const char*' for argument '1' to 'int system(const char*)'
pcsx2/x86/iR3000A.cpp: In function 'void iIopDumpBlock(int, u8*)':
pcsx2/x86/iR3000A.cpp:285:45: error: cannot convert 'wxString' to 'const char*' for argument '1' to 'int system(const char*)'
The original file name is given by
SampleProf.cp
However this is not the file we could find in any Code or Directory of PCSX2, rather it should be:
SamplProf.cpp
Previously the text box for "Frames to Draw" and "Frames to Skip" got failed to grey out properly and only the text and arrows got greyed out, The following patch properly greys out the elements.
To be noted that the issue wasn't present on 1.2.1 , I guess this was some regression along with WX 3.0 ?
v2: Fix Indentation
Add a nop between instruction
Dump mips instruction
Add pretty print support
Note: it would be nicer to plug pretty print in the system command directly
Note: CL = 0 behaviour is still not completely accurate, the first vector is incorrect, but will look at that another day, need a game that does it first really so we can see if it helps :)
Previously the Enable all / Disable all / Restore defaults menu options ignored the status of Dev/verbose and CDVD reads. The following commit makes them to also impact the other two menu items.
Fixes Issue #1092 , don't remember the display size when the log window is maximized since the display size gets too big and the next time you open PCSX2 you'll see a gigantic log window ;)
V2: Fix a wrong indentation.
Irx module will be loaded at the end of the ROM (limited
at 256KB)
At the execution of the boot the list of module addresses are
hacked to add the new module.
For #1130
Fix redundancy and change wording of a few things
Make Vista with Service Pack 2 the minimum requirement so we don't have
to deal with the horrid mess that was launch Vista.
[skip ci]
The old implementation saved the current value of a GSSetting as uint in
a field called 'id'. The implementation of GSSettings suggests that
GSSettings could be saved in a database with id as primary key. This
would require a translation look up from id to value but could have all
advantages of a database. However the interface to GSSetting was never
implemented like that.
In the new implementation GSSetting has a 'value' field that stores an
int representative value of the desired state. Additionally the
constructor is 'overloaded' as template to reduce casting in the
consumer code. However all consumer values need to be castable to int.
Accordingly combobox initialization was adjusted.
Fixed italic links not being clickable on GitHub
Added some updated info about requirements
Merged some notes
Fixed some incorrect grammar and typos
Updated formatting a little
[skip ci]
Overclock is now positive and underclock is now negative (it used to be
the other way round), so the range check should reflect that.
Coverity CID 156245 Bad bit shift operation(BAD SHIFT)
Using a memcpy to copy non-POD classes with virtual methods is undefined
behaviour. clang was warning that the vtable was being overwritten.
Replace the SafeArray with std::array.
Code needs to work with xAddressReg however the x32 inheritance doesn't
exits anymore on 64 bits.
Note: it might be possible to uses some kind of autoconversion with
xRegister32or64. Could be a future improvement.
Note: displacement are never 8B. The max is 4B which is sign extended to 8B.
So we can't store a pointer into it anymore.
Add xRegisterLong that will be x64 on 64 bits and x32 on 32 bits
Math is correct but a shift of 64 bits is illegal in x86 because the cl register is masked
From the x86 spec:
The destination operand can be a register or a memory location. The count operand can be an immediate value or
the CL register. The count is masked to 5 bits (or 6 bits if in 64-bit mode and REX.W is used). The count range is
limited to 0 to 31 (or 63 if 64-bit mode and REX.W is used). A special opcode encoding is provided for a count of 1.
SuperVU wasn't converted (unlikely to be ported to 64 bits)
A couple of calls weren't converted because they require extra work
but there are not mandatory (debug/MTVU/...)
* Rework a bit MVU to support xScopedStackFrame. Potentially
stack frame can be optimized (save 5 instructions)
* I removed the recompiler stack check. Address sanitizer is more efficient anyway
V2:
* Add various option to handle the different frame
* Basic x86-64 port (untested so likely completely broken)
v3:
Create an templated xImpl_FastCall object
v4:
clang compilation fix
Basically it creates a /tmp/perf-`pid`.map file which will contains
a mapping of the x86 code with the EE/IOP/VU code
* You need to enable the profiler with a define
* You can split the profiling by block (inside a recomp buffer)
v2: add new file to VS xml files
v3: remove useless include
Give both EE and x86 code.
Don't rely on global variable. The dump still dump the content of the register.
Of course value will be wrong if you don't dump it at the start of the block.
It help to detect register/memory access
the cpu struct address is also printed to easily postprocess the x86 memory pointer
(see next commit)
It misses jump & FPU. Jump need to be handled manually.
Syntax isn't perfect yet because of various casts. But it will allow to have a
single emitter syntax and rely on type safety on the future.
Conflicts:
pcsx2/x86/iR3000Atables.cpp
pcsx2/x86/ix86-32/iR5900-32.cpp
Added the wiki link and better description.
Fix broken link of 'todo'.
Formatted 'Coding Style' to 'Code Formatting Guidelines' for consistency.
Added the Commenting Etiquette link as well.
Initially it was free to do the SW blending because safe fbmask
will already do a sw blending.
Unsafe version uses a fast path with a limited blending. Therefore
SW blending isn't free anymore.
Improve the speed of the previous speed hack (xenosaga 1)
The hack relies on the undefined behavior of the hardware so it can
potentially generate rendering corruption.
This new hack drops the cache flusing when only the alpha channel is masked.
Alpha is a direct copy of the fragment. Normally masked bits will be constant
everywhere (RT, FS output, texture cache) so it would likely work.
Just in case, code is only enabled with the new shiny hack
* [General Documentation And Coding Strategies](#general-documentation-and-coding-strategies)
* [Tasks](#tasks)
## Just Starting Out
* If you're unfamilar with git, check out this [brief introduction to Git](https://github.com/PCSX2/pcsx2/wiki/Git-survival-guide)
* [How to build PCSX2 for Windows](https://github.com/PCSX2/pcsx2/wiki/Setting-up-the-PCSX2-repository-on-Windows-\(WIP---maybe-more-useful-as-a-manpage-instead%3F\))
* [How to build PCSX2 for Linux](https://github.com/PCSX2/pcsx2/wiki/Installing-on-Linux)
## Issue Reporting
* [How to write a useful issue](https://github.com/PCSX2/pcsx2/wiki/How-to-create-useful-and-valid-issues)
## Pull Request Guidelines
The following is a list of *general* style recommendations that will make reviewing and merging easier:
* Commit Messages
* Please try to prefix your commit message, indicating what area of the project was modified.
* For example `gs: message...`.
* Looking at the project's commit history will help with keeping prefixes consistent overtime, *there is no strictly enforced list*.
* Try to keep messages brief and informative
* Remove unnecessary commits and squash commits together when appropriate.
* If you are not familiar with rebasing with git, check out the following resources:
* [Consult the style guide](https://github.com/tadanokojin/pcsx2/blob/coding-guide/pcsx2/Docs/Coding_Guidelines.md)
* Run `clang-format` using the configuration file in the root of the repository
* Visual Studio Setup - https://devblogs.microsoft.com/cppblog/clangformat-support-in-visual-studio-2017-15-7-preview-1/
* IMPORTANT - if you are running `clang-format` on unrelated changes (ie. formatting an entire file), please do so in a separate commit.
* If you cannot scope your `clang-format` to just your changes and do not want to format unrelated code. Try your best to stick with the existing formatting already established in the file in question.
Please do not make support requests on GitHub. Our issue tracker is for tracking bugs and feature requests only
If you need help configuring the emulator please make a request on our forums or contact us on discord
If you are unsure, start with [discord](https://discord.com/invite/TCz3t9k) or the [forums](https://forums.pcsx2.net/index.php)
Please make an effort to make sure your issue isn't already reported
### Please Avoid Issues Pertaining to the Following:
- We are **not** accepting bug reports for **PSX mode** at this time
- If you are interested in helping contribute to PSX mode please do so on the forums. Otherwise our recommendation is that you use a [proper PSX emulator](https://emulation.gametechwiki.com/index.php/PlayStation_emulators)
- We do **not** accept issues relating to **upscaling** at this time
- We are aware of the various problems with upscaling. The issue spans many games and having hundreds of issues for the same fundamental issues isn't particularly helpful. There are several workarounds for graphical problems that come as a result of upscaling
- Please try your game at native resolution before creating an issue
- If your bug is the result of upscaling please use the forums or discord for assistance with various upscaling workarounds. Additionally, the unofficial PCSX2 [Wiki](https://wiki.pcsx2.net/Main_Page) often lists various fixes for upscaling issues
- type:textarea
id:desc
attributes:
label:Describe the Bug
description:"A clear and concise description of what the bug is"
validations:
required:true
- type:textarea
id:repro
attributes:
label:Reproduction Steps
description:"Steps to reproduce the behavior"
validations:
required:true
- type:textarea
id:expect
attributes:
label:Expected Behavior
description:"A clear and concise description of what you expected to happen"
validations:
required:false
- type:markdown
attributes:
value:|
## System Info
Please make sure your system meets our requirements for OS version, CPU and GPU
We are **not** accepting issues related to the **libretro** core. The libretro core is being maintained separately at this time
- type:input
id:rev
attributes:
label:PCSX2 Revision
description:"We only accept bug reports for the latest dev version. Please try upgrading before making an issue."
placeholder:"Example: dev-525"
validations:
required:true
- type:dropdown
id:os
attributes:
label:Operating System
options:
- Windows 10 (32bit)
- Windows 10 (64bit)
- Windows 8.1 (32bit)
- Windows 8.1 (64bit)
- Linux (32bit) - Specify Distro Below
- Linux (64bit) - Specify Distro Below
- macOS (Monteray)
- macOS (BigSur)
- macOS (Catalina)
- macOS (Mojave)
validations:
required:true
- type:input
id:os-distro
attributes:
label:If Linux - Specify Distro
placeholder:"Example: Arch"
validations:
required:false
- type:input
id:cpu
attributes:
label:CPU
placeholder:"Example: i5-7600"
validations:
required:true
- type:input
id:gpu
attributes:
label:GPU
placeholder:"Example: GTX 1070"
validations:
required:true
- type:textarea
id:gsSettings
attributes:
label:GS Settings
description:"Any **non-default** settings for GS. If you don't want to list them out, please provide screenshots of your configuration window (including hw hacks if enabled)."
validations:
required:false
- type:textarea
id:emuSettings
attributes:
label:Emulation Settings
description:|
Any non-default core settings. If you don't want to list them out, please provide screenshots of your configuration window
Please note that the safe preset works for most games. MTVU can have some compatibility issues so please disable it before making a report
If you need to modify the settings manually because a game requires you to do so to work, please state that explicitly
validations:
required:false
- type:textarea
id:gsScreens
attributes:
label:GS Window Screenshots
description:"If your issue is graphical in nature and you think screenshots will help illustrate your issue, you may do that here."
validations:
required:false
- type:textarea
id:logsDumps
attributes:
label:"Logs & Dumps"
description:|
Please feel free to attach any logs, block dumps, GSdump, etc here
If your problem is graphical in nature it is highly recommended that you provide a GSdump. [GSdump Guide](https://forums.pcsx2.net/Thread-How-to-create-a-proper-GS-dump)
# Runs steps to triage an incoming Pull Request, for example - applying labels.
name:🤔 Pull Request Triage
on:pull_request_target
jobs:
triage:
if:github.repository == 'PCSX2/pcsx2'
runs-on:ubuntu-latest
steps:
- uses:actions/labeler@main
with:
repo-token:${{ secrets.GITHUB_TOKEN }}
- uses:xTVaser/first-interaction@v1.2.4
with:
repo-token:${{ secrets.GITHUB_TOKEN }}
debug-mode:false
pr-message:|-
## Thank you for submitting a contribution to PCSX2
As this is your first pull request, [please be aware of the contributing guidelines](https://github.com/PCSX2/pcsx2/blob/master/.github/CONTRIBUTING.md).
Additionally, as per recent changes in GitHub Actions, your pull request will need to be approved by a maintainer before GitHub Actions can run against it. [You can find more information about this change here.](https://github.blog/2021-04-22-github-actions-update-helping-maintainers-combat-bad-actors/)
Please be patient until this happens. In the meantime if you'd like to confirm the builds are passing, you have the option of opening a PR on your own fork, just make sure your fork's master branch is up to date!
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.