Commit Graph

328 Commits

Author SHA1 Message Date
Gregory Hainaut 6df9eb8dab gsdx: Allow to save and restore drawing context
Purpose is to allow edition of the context for current draw call
2019-02-20 13:49:57 +01:00
lightningterror 12b622c9c1 gsdx: Cleanup/update Wild Arms offset hack.
Don't use integer for the variable, option has only on and off states.
Use member variable names and adjust some checks.
2019-02-13 10:28:07 +01:00
lightningterror b9df1e643b gsdx-hw: Adjust/cleanup hw hacks variable calls.
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.
2019-01-23 12:24:12 +01:00
FlatOutPS2 1498f538dd gsdx:hw: Enable skipdraw hack to skip a range of draw calls
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)
2018-08-20 23:35:01 +01:00
Jonathan Li 0cde534e30 gsdx: Prefix std:: to min and max 2017-09-08 09:56:28 +02:00
Jonathan Li d57b812f36 gsdx: Prefix std:: to string and to_string 2017-09-08 09:56:28 +02:00
Akash c3ff1074bb GSdx: Rework framebuffer height calculation
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.
2017-07-13 17:53:29 +02:00
Gregory Hainaut 802f1029e9 gsdx: dump gsdump in xz format directly
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
2017-05-21 23:45:35 +02:00
Akash 984fcfda2e Counters: Update videomode enum with proper prefix
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.
2017-05-11 11:23:10 +02:00
Akash 38c2de3ae3 GSdx-PCRTC: Minor modification to NTSC saturation
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.
2017-03-29 19:37:44 +02:00
willkuer a18d624bcb gsdx: Add an automatic CRC hack level
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
2017-03-28 23:05:24 +02:00
Gregory Hainaut 91f805675b gsdx: dump xyoffset register 2017-03-05 22:16:01 +01:00
Akash 500d2e076d GSdx-PCRTC: Apply saturation only for field mode
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.
2017-02-21 10:54:28 +01:00
Akash 17b33afd64 GSdx-PCRTC: Move hacks away from GetDisplayRect()
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.
2017-02-21 10:54:28 +01:00
Akash ff89619b09 GSdx: Add an Enumeration for CRC Hack level 2017-02-21 10:54:03 +01:00
Akash bf10873405 GSdx: Remove useless check and add debug messages
IsEnabled() check is already done in GetDisplayRect, so it's pointless to do it here. Also updated a debug message in the GetFrameRect() function.
2017-01-30 15:29:28 +01:00
Akash a2cdcb4e4d GSdx-PCRTC: Improve output circuit selection
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.
2017-01-30 15:29:28 +01:00
lightningterror 0b93aa5d12 Revert "Update Copyright notices/disclaimers 2017"
This reverts commit fc5bdb771f.
2017-01-26 17:12:13 +01:00
lightningterror 3d4e1c1246 Update Copyright notices/disclaimers 2017
Update all Copyright notices/disclaimers in scripts to 2017
2017-01-26 17:12:13 +01:00
Akash 09c72375ab GSDX: Pass total height of framebuffer on GetOutput()
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.
2017-01-04 22:17:26 +05:30
Akash b56ff3fce7 GSDX-TC: Pass merged output size for scaling
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.
2017-01-02 14:42:32 +05:30
Akash 61a6fe9cd9 GSDX: Apply saturation only to interlaced video mode
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)
2016-12-10 11:29:10 +01:00
Gregory Hainaut 43b4cfc215 gsdx: separate dump directory for 32/64 bits 2016-11-19 17:00:32 +01:00
Gregory Hainaut 49d5c4260f gsdx state: post fix depth tracing
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
2016-11-11 23:39:34 +01:00
Gregory Hainaut ed3052dea5 gsdx: remove various assertion
Useless or wrong assertion
2016-11-08 18:58:10 +01:00
Akash 58ed49f3c9 GSDX: Clean up warnings on MSVC
* 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?
2016-11-05 10:28:04 +01:00
Akash 437afbbbf3 GSDX-PCRTC: Move Saturation hack to displayrect()
Fixes custom resolution scaling on Tribes aerial assault.
2016-11-01 17:54:46 +01:00
Gregory Hainaut defdd27987 gsdx: set m_nativeres to true in replayer
Otherwise you can't compare draw call between native and upscaled
2016-10-16 16:48:23 +02:00
Gregory Hainaut 24684033ca gsdx: enable clut_load_before_draw option on Harley Davidson (CRC hack)
At least the game is good until we find how the HW really behave
2016-10-14 20:47:18 +02:00
Gregory Hainaut fbf7ccbdda gsdx: by default new will throw std::bad_alloc
So catch/use it and don't bother with GSDXErrorOOM
2016-10-13 20:44:59 +02:00
Gregory Hainaut c2777ff989 gsdx state: split IsMipmapActive in 2 pieces
This way we can test if a draw call requires a triliner filtering.
It will be used in next commit to implement automatic trilinear
2016-10-13 20:16:38 +02:00
Gregory Hainaut b695e0065a gsdx mipmap: use a 3 state option 2016-10-13 20:16:38 +02:00
Gregory Hainaut c66004bbb2 gsdx: hidden option to better support dual context clut
Option is on by default. Just a safety net in case of regression

Fix clut issue on virtua fighter (SW) and harley davidson (SW/HW).
2016-10-06 19:08:21 +02:00
Gregory Hainaut 9cd4984f7c gsdx debug: more log 2016-10-06 18:56:31 +02:00
Gregory Hainaut d827497403 gsdx: let's handle illegal 4 bits format too
In doubt if some games use them.
2016-10-05 22:07:49 +02:00
Gregory Hainaut 9b93c07339 gsdx: Handle illegal 8 bits format. Found the most silly GS dev trick
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
2016-10-05 22:07:43 +02:00
Gregory Hainaut 6fd46eb36a gsdx: move the validation of the texture format before the draw call
Avoid false positive when game write dummy stuff
2016-10-05 22:07:23 +02:00
Gregory Hainaut 677f890c5c gsdx debug: static GSState::s_n
This way you can access the current draw call anywhere. Very useful for debug.
2016-10-05 09:43:24 +02:00
Gregory Hainaut 61333ecb40 gsdx debug: trace register access
I didn't include high frequency register such as vertex stuff

main goal is to give the possibility to trace the texture/clut update
2016-10-05 09:43:24 +02:00
Gregory Hainaut cf13cccb1e gsdx: avoid useless spamming of INVALID PSM in release build 2016-10-02 18:21:41 +02:00
Gregory Hainaut c5f086b385 gsdx ate: separate the code that depends on TEST.AFAIL
Easier to read and allow a switch optimization

Add a shortcut for the common ATST_ALWAYS case
2016-10-01 19:20:38 +02:00
Gregory Hainaut 8d4fadb3c8 Revert "gsdx state: TEX0 write behavior might depends on the context"
This reverts commit b34243fa7b.

Unfortunately we have a regression on GT4. I'm doomed
2016-09-28 20:00:56 +02:00
Gregory Hainaut adb8be3287 gsdx: add/update comment
Need to investigate why the number of vertex is different in upscaled resolution
2016-09-28 19:41:12 +02:00
Gregory Hainaut 749037346c gsdx: report an error if PSM is invalid 2016-09-28 19:41:12 +02:00
Gregory Hainaut 97172f5e51 gsdx debug: count draw call in a different way
* 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.
2016-09-28 19:41:11 +02:00
Gregory Hainaut b34243fa7b gsdx state: TEX0 write behavior might depends on the context
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)
2016-09-27 10:04:09 +02:00
Gregory Hainaut be9995bd1e gsdx mipmap: improve robustness to avoid potential crash 2016-09-26 09:27:03 +02:00
Gregory Hainaut 78b2848622 gsdx: factorize the TEX0 generation for mipmap 2016-09-25 11:51:48 +02:00
Gregory Hainaut d89b09427f gsdx: gl logging is only available in MTGS thread
Fix crash in debug build
2016-09-22 17:54:44 +02:00
Gregory Hainaut 6966e08306 gsdx: move alpha test optimization in base class
One code for all renderers :)
2016-09-19 08:48:32 +02:00