Commit Graph

224 Commits

Author SHA1 Message Date
Gregory Hainaut 5ef2d538a0 gsdx hw: only keep a single half clear implementation 2016-09-18 13:16:59 +02:00
Gregory Hainaut a0c1719695 gsdx hw: DoC takes 3
Add support for 16 bits format too. Fix shadows.
2016-09-17 12:06:43 +02:00
Gregory Hainaut 3546d54e3b gsdx hw: improve the vertical half clear for DoC
Previous assumption that crazyness was used to clear the buffer is wrong.

It was also used to write a constant color to the buffer.
2016-09-17 10:34:35 +02:00
Gregory Hainaut 7b9654f164 gsdx hw: CRC based solution to solve half screen issue on FFVII Dirge Of Cerberus
The trick is that the depth buffer is actually the right of the frame buffer
2016-09-17 00:02:32 +02:00
Gregory Hainaut c638e5ec87 gsdx debug: use a pretty format name when dumping texture
Much faster to read the format on the file name :)

+ remove a couple of useless ifdef
2016-09-07 08:34:24 +02:00
Gregory Hainaut cedc4f241d gsdx hw: add a crc hack for Dragon Quest & Final Fantasy in Itadaki Street
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.
2016-09-04 19:41:31 +02:00
Jonathan Li 2b2042e1c2 gsdx: Allow screenshot compression level to be changed
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.
2016-08-20 14:01:24 +01:00
Gregory Hainaut d6b834e8af gsdx hw: don't execute blit fmv with target
Avoid invalid operation due to depth buffer
2016-08-20 12:56:30 +02:00
Gregory Hainaut 2e7fab7813 gsdx sw: avoid aliasing issue, clear function was wrong anyway
Value must be un-normalized. Function is only used with 0.0 so
API was updated to only use the 0 case.
2016-08-14 21:01:09 +02:00
Gregory Hainaut dc2864ad7a gsdx hw: avoid a null deferenced false-positive in coverity
It is a false positive because it supposes that PRIM->TME is both true and false.

It is the first Schrodinger's variable ;)
2016-08-12 23:02:06 +02:00
Gregory Hainaut 1a09712f89 gsdx: init m_custom_width/height to a default value
Avoid useless warning on coverity
2016-08-12 22:48:20 +02:00
Gregory Hainaut e9e1b33884 gsdx: log a nice string instead of the hex format of PSM 2016-08-03 18:07:54 +02:00
Gregory Hainaut 27f313ee16 gsdx hw: limit OI_GsMemClear to large clear
Help to reduce the speed impact
2016-08-03 11:23:23 +02:00
ramapcsx2 c592ccb3e5 Merge pull request #1435 from ssakash/Custom_TextureCache
GSDX: Improve scaling of custom resolution
2016-07-26 14:07:19 +02:00
Gregory Hainaut 25bc2dff07 gsdx: dump and log EE texture read
It gives a visual opportunity to detect a bad read of the texture cache
2016-07-14 19:45:06 +02:00
Akash 309a8283b2 GSDX-TextureCache: Don't allow RT size below default value
Fixes upscaling issues on Burnout dominator where setting custom resolution of 640x448 looks way worse than the native resolution.
2016-07-05 19:15:23 +05:30
Akash a5671f016a GSDX-TextureCache: Add proper scaling for custom resolution
* 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.
2016-06-30 00:35:10 +05:30
ramapcsx2 dce67351f9 Merge pull request #1416 from ssakash/Real_IR
GSDX: Add proper detection of internal resolution
2016-06-21 18:05:46 +02:00
Akash e05e7bee82 GSDX: Add proper detection of internal resolution 2016-06-19 17:10:03 +05:30
Akash ab1ab7b6f1 GSDX: Remove redundant "Null" string from GS Frame title bar (#1409)
* GSDX: Remove redundant "Null" string

* GSDX: Convert "GetConfigI" into "GetConfigB"
2016-06-17 14:25:09 +01:00
Gregory Hainaut 2b2412ca20 gsdx hw: disable OI_GsMemClear when framebuffer writes are masked. 2016-06-01 22:34:14 +02:00
Gregory Hainaut a9c18c57e4 gsdx option: use the new GetConfig* function
v2:
add PSX stuff
ssakash review
2016-05-28 10:07:27 +02:00
Gregory Hainaut 60e0f3b9b5 Merge pull request #1234 from PCSX2-Alpha/Time_Crisis
GSDX: Improve CRTC width detection
2016-05-25 17:51:07 +02:00
Gregory Hainaut 0c3324b6ef gsdx hw: create a large_framebuffer option
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.
2016-05-23 19:38:44 +02:00
Gregory Hainaut 1f4439a89e gsdx: add some notes of potential optimization 2016-05-23 19:38:44 +02:00
Akash 2166980f91 GSDX: Calculate dimensions of rectangle after merge
* Properly display rectangle size after passing through merge circuit on
GS Dumps and GS Frame titlebar.
2016-05-19 15:53:49 +05:30
Gregory Hainaut 14fa797235 gsdx hw: always uses a big RT on snowblind engine game
Avoid headack to avoid conflict between 1280x1024 and 640x1280 resolution
2016-05-17 20:01:00 +02:00
Gregory Hainaut 08f7bd2dc3 gsdx: add crc hack for Ar tonelico 2
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)
2016-05-16 10:55:02 +02:00
Gregory Hainaut 4effc70792 gsdx hw: Fix regression on align sprite
The hack also updates position of not texture mapped sprite.

Unlike the 2nd hack (round sprite) which can be skipped if TME is disabled
2016-05-09 09:45:34 +02:00
Gregory Hainaut e890ce989c gsdx: throw oom exception + error
Texture can't be NULL anymore, so we can remove a couples of check
2016-05-05 18:53:51 +02:00
Gregory Hainaut d58b71688b gsdx debug: auto GL_POP
Nicer and exception safe

V2: miss definition of vs/ps
2016-05-05 18:53:32 +02:00
Gregory Hainaut c8dddfed06 gsdx hack: move m_skip and m_userhacks_skipdraw to GSState level
Avoid to push argument to call IsBadFrame
2016-05-05 16:22:14 +02:00
Gregory Hainaut f712c5c6d0 gsdx tc: use GSLocalMemory::m_psm instead of hardcoded value 2016-05-05 12:19:25 +02:00
Gregory Hainaut 642cc50ac4 gsdx hw: reduce verbosity of channel skip log 2016-05-05 12:19:19 +02:00
Gregory Hainaut b8b0a0d662 gsdx hw: remove dead code 2016-05-04 18:08:34 +02:00
Gregory Hainaut e0581ee771 gsdx ogl: Finalize the urban chaos workaround
Rendering must be nice now
2016-04-30 14:52:53 +02:00
Gregory Hainaut b4c7d32741 gsdx ogl: avoid to wrongly detect a channel shuffle 2016-04-30 14:52:43 +02:00
Gregory Hainaut 1011a757a8 gsdx hw: factorize redundant code 2016-04-30 14:52:43 +02:00
Gregory Hainaut b78c772a14 gsdx: improve detection of channel shuffle
Improve rendering on Prince Of Persia (requires preload data hack)

Worth to re-test: MTGS2/3

Urban Chaos is a bit better but there still a bad overlay
2016-04-30 14:52:43 +02:00
Gregory Hainaut e45f90fac3 gsdx: fix a gcc warning 2016-04-29 17:34:17 +02:00
Gregory Hainaut eaa4fd41e2 gsdx ogl: improve logging of special effect 2016-04-28 22:56:38 +02:00
Gregory Hainaut f946f38f26 gsdx hw: keep the debug counter in sync
Otherwise I'm screwed :p
2016-04-28 20:03:53 +02:00
Gregory Hainaut 04a578495f gsdx hw: disable channel shuffle effect
Greatly reduce memory requirement for target
MGS3 at 4x: from 2680MB to 160MB

Remove a couple of (slow) draw calls
2016-04-28 19:46:26 +02:00
Gregory Hainaut 45bfe2ad58 gsdx hw: trace some special post processing effect
* Double downscale is done in GTA
* Channel Shuffle is the top-left corner issue

So far nothing is emulated
2016-04-28 19:39:57 +02:00
Gregory Hainaut 5b04f4dab9 gsdx: add optimization note for the future 2016-04-28 18:01:21 +02:00
Gregory Hainaut de38963904 gsdx ogl: plug the new depth sampling in the renderer
Note:
When source format is depth, integral texture coordinate must be used => depth_fmt 1/2/3
2016-04-24 22:18:26 +02:00
Gregory Hainaut 67e955919f gsdx: keep dump code enabled in dev release too 2016-04-23 18:29:56 +02:00
Gregory Hainaut a149d6b26f gsdx: use psm.bpp flag to improve code reading 2016-04-23 18:29:39 +02:00
Gregory Hainaut 59ef668fd2 Merge pull request #1222 from PCSX2/gsdx-black-fmv
Gsdx black fmv
2016-04-21 09:25:36 +02:00
refractionpcsx2 dcb676765e GSdx: Clean up some warning under windows (#1289) 2016-04-14 11:00:58 +01:00
Gregory Hainaut 8a7184be3f gsdx: fix hack logic 2016-04-12 11:36:24 +02:00
Gregory Hainaut 6a09fa56fb gsdx: disable nocturne CRC hack
Yeah one less !
2016-04-11 22:41:19 +02:00
Gregory Hainaut 8943a9db4a gsdx hw: GS can draw 2 frames in a single framebuffer
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
2016-04-04 21:30:40 +02:00
Gregory Hainaut 063d2e568a gsdx tc: re-implement frame lookup
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
2016-04-04 21:30:37 +02:00
Gregory Hainaut eec74fd963 gsdx hw: Add an alternate draw call for FMV rendering
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
2016-04-04 21:29:32 +02:00
Gregory Hainaut 9aea76b0e8 gsdx tc: store a hint on the target size
The hint is based on the rendering
2016-04-04 21:29:31 +02:00
Gregory Hainaut cc1756b8e5 gsdx: disable dump in release build 2016-04-02 00:56:41 +02:00
Gregory Hainaut f6ee94589f gsdx hw: OI_GSMemClear supports various frame formats
Could help #1267
2016-03-28 10:47:42 +02:00
Gregory Hainaut a99750ae87 gsdx hw: only enable OI_GsMemClear when both depth/alpha test are disabled
Fix #1262
2016-03-26 11:28:28 +01:00
Gregory Hainaut 8e5e770fd1 gsdx hw: Ensure GS memory is always cleared properly
It will fix some issues on FMV

Previous behavior can be restored with the hack "UserHacks_DisableGsMemClear"

Fix #768
And maybe #855
2016-03-21 18:26:22 +01:00
Gregory Hainaut a3788c4e98 Merge pull request #1225 from PCSX2-Alpha/scaling_fix
GSDX: set a safe limit to Framebuffer width
2016-03-12 15:42:18 +01:00
Akash 997f0535f5 GSDX: Set a safe limit to Framebuffer width
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.
2016-03-11 07:28:05 +05:30
Gregory Hainaut ec57f1305a gsdx: detect rendering outside of the framebuffer
Could help to detect rendering issue (for example missing fmv)
2016-03-10 19:03:39 +01:00
Jonathan Li 6b950d0408 gsdx: Allow dump and capture PNG compression to be changed
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.
2016-03-02 22:58:45 +00:00
Gregory Hainaut edef3ad8c3 Merge pull request #1170 from PCSX2-Alpha/TC_Scaling
GSDX: Detect RT size based on display and frame registers.
2016-03-02 13:51:28 +01:00
Akash b07b06a9fb GSDX-Texture Cache: Rework scaling function
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.
2016-02-24 09:14:01 +05:30
Gregory Hainaut 1853d0d16d gsdx: no depth lookup optimization
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
2016-02-18 20:35:50 +01:00
Gregory Hainaut 78b73ba585 gsdx: avoid null pointer deferencement 2015-09-25 20:59:36 +02:00
Gregory Hainaut 5fb8c7e65c gsdx: initialize members in constructor of objects
A couple of useless members were removed too.

Also fix wnd initialization

Coverity:
CID 146955 (#1 of 1): Uninitialized pointer read (UNINIT)
18. uninit_use: Using uninitialized value wnd[i].
2015-09-23 09:46:53 +02:00
Avi Halachmi (:avih) 4474d4391b GSdx: capture - print recomended resolution and DAR to the console
This is the internal resolution which GSdx uses and recording at this resolution
is optimal, i.e. without any dumb scaling, with all relevant pixels and without
redundant pixels.

The resulting clip still doesn't have the correct aspect ratio set, but that's
just a property which can be set to the clip afterwards, which is where the DAR
becomes useful. Since it's usually anamorphic, when muxing later with the audio
use the DAR to set the playback aspect ratio.
2015-09-22 01:11:13 +03:00
Avi Halachmi (:avih) 3f81fc98dd gsdx: custom resolution - use 0 instead of 9 2015-09-22 01:00:53 +03:00
Jonathan Li 69d27dfb4b Merge pull request #829 from ssakash/rework_internalres
gsdx changes:
Remove native resolution checkbox from GUI and rework associated code
Small changes to Windows and Linux GUI
Support 8x native resolution
Fix custom resolution width less than native width use case
2015-09-21 20:12:47 +01:00
Gregory Hainaut b60dd9d1fe Merge pull request #814 from PCSX2/coverity-qa-high
Fix a bunches of coverity warning/errors.
2015-09-20 22:18:03 +02:00
Jonathan Li d4f6894e1b gsdx: Fix custom resolution and minor cleanup
This fixes the following issues when custom resolution is selected.
 - When the width is smaller than the native resolution width, the
   texture cache targets are removed on every Vsync signal, causing a
   black screen issue.
 - The texture cache code needs a 1 returned for the custom resolution
   upscale multiplier or there'll be some really funny graphical issues.

It also removes unnecessary GetConfig (which I think unconditionally
does a a file read on Windows) calls if the width was increased - the
upscale multiplier is already stored, and the custom resolution width
and height calls are now unnecessary.

Also fix some whitespace issues.
2015-09-20 07:49:46 +05:30
Akash b97018932d GSDX: Rework Internal Resolution function
upscale_multiplier function values have been changed to allocate native resolution and also move custom resolution to 9.
Remove the old native checkbox value and include Native in the combo box.
Internal GSDX functions have also been updated with this new update to the upscale_multiplier variable.
2015-09-14 10:26:27 +05:30
Gregory Hainaut cee0fde940 gsdx-tc: improve support of TEXA register
* Greatly reduce the number of clut read (factor 10x)
* Avoid to get wrong TEXA texture in the cache.
* Fix "jump depends on uninitialized variable" Valgrind warning.

Fix #748

I try my best to avoid any breakage of DX but please test it too.
2015-09-11 14:16:11 +02:00
Gregory Hainaut 2430abed33 gsdx: potential division by zero
CID 146833 (#2-1 of 2): Division or modulo by zero (DIVIDE_BY_ZERO)
divide_by_zero: In expression this->m_width / this->m_upscale_multiplier, division by expression this->m_upscale_multiplier which may be zero has undefined behavior.
2015-09-11 08:54:29 +02:00
Gregory Hainaut ac8f4e69d6 pcsx2|gsdx: avoid potential null deferencement 2015-09-11 08:54:29 +02:00
Gregory Hainaut 98c74879bf Merge pull request #718 from PCSX2/depth-color-direct-write
Depth color direct write
2015-08-10 15:50:48 +02:00
gabest11 49b3acea72 gsdx: texture size reduction in sw mode, fixes Stolen, less memory usage in general. 2015-08-05 19:11:41 +02:00
Gregory Hainaut 6cb0443227 gsdx: disable depth rendering if rt == depth
I used to disable the RT but it doesn't work well with 50cents. It seems
texture writes weren't propagated correctly to the depth buffer. Besides
the game write an alpha value whereas depth is 24 bits only...
2015-08-04 19:39:29 +02:00
Gregory Hainaut 8c8fe633a5 gsdx-ogl: merge 3 accurate* option into a nice combobox
It is much easier to configure this way
2015-07-30 18:21:00 +02:00
Gregory Hainaut f4e881ad30 gsdx: always set texture shuffle flag
Avoid bad effects in 16 bits RT games
2015-07-30 09:15:04 +02:00
Gregory Hainaut f6f28042bd gsdx: texture shuffle detection
Don't check rt 32 bits state, it give false positive on suikoden
2015-07-12 15:21:04 +02:00
Gregory Hainaut 5ed45b6806 Merge pull request #644 from PCSX2/improve-texshuffle-detection
Improve texshuffle detection
2015-07-11 09:34:33 +02:00
Gregory Hainaut 6f9a89dcf2 gsdx-debug: print memory usage of all textures pools
It is a bit crude but it allow to see the impact of code and options.
2015-07-10 22:35:26 +02:00
Gregory Hainaut 350db223d3 gsdx: only propagate texture shuffle detection if tex shuffle is detected 2015-07-10 14:06:39 +02:00
Gregory Hainaut 22f11958e9 gsdx: better detection of texture shuffle
Some effects were missed on Wallace & Gromit
2015-07-09 23:05:07 +02:00
Gregory Hainaut 4fcf460447 gsdx: fix DoC black screen video
The game also set both depth and rt buffer at the same location
but disable the depth test (ZTE is 0)
2015-07-09 16:20:43 +02:00
Akash a02a9aac8f Fix a Function name typo. 2015-07-07 21:26:04 +05:30
Akash f39aa181cc Update the variable name to suit the game's original name and change to accurate region of the game. 2015-07-06 00:59:35 +05:30
Gregory Hainaut edc9d23566 gsdx: fix a crash with UserHacks_ColorDepthClearOverlap 2015-07-05 14:13:24 +02:00
Gregory Hainaut e1144d7a18 gsdx:hack: add a CRC for SuperMan
Extracted from the GS dump
2015-07-05 14:11:35 +02:00
Gregory Hainaut 8640b44e02 gsdx-hack: implement a hack for SuperMan (need CRC to enable it)
Fix depth issue.

First issue: RT and Depth are located at the same address.
=> solution, just lookup the depth (done for any games)

Second issue: Instead to draw a X,Y rectangle, they draw a 32 pix, 4096 pix
rectangle with a FBW of 1.
=> solution, don't bother just write the depth directly

Please someone add some CRC to enable the code
2015-07-04 10:59:21 +02:00
Gregory Hainaut b9bc5b5c60 gsdx: add UserHacks_ColorDepthClearOverlap to test some new code
debug only
2015-07-03 22:13:35 +02:00
Gregory Hainaut e66aac8ab7 gsdx-hw: add an hidden option to preload the final frame with GS mem data
Game can directly uploads a background or the full image in
"CTRC" buffer. Previous code was a full black screen.

It will also avoid various black screen issue in gs dump.

hidden option: preload_frame_with_gs_data

Note: impact on upscaling was not tested and it's likely broken
2015-07-01 09:36:53 +02:00
Gregory Hainaut a588f61a8a gsdx: add an assert for unsupported case 2015-07-01 09:36:53 +02:00
Gregory Hainaut 3b127f663b gsdx-tc: trace the texture format to detect texture shuffling
It fixes games that uses 16 bits RT (like snow engine games)
2015-07-01 09:36:53 +02:00
Gregory Hainaut 33c9e9da0a gsdx: new generic OI hack
To clear a (W, H) RT/Depth, GS can only send a (W , H/2) primitive with
a Z (or RT) pointer in the middle of the buffer

Top-half will be cleared by the color (or the depth).
Bottom-half will be cleared by the depth (or the color).

Code isn't enabled yet but it was tested with success on GoW2.
2015-07-01 09:36:35 +02:00
Gregory Hainaut 49516cbbca gsdx-tc: allow to invalidate the depth/target if it is used as target/depth
It is requires when game will uses sometimes an address as a RT sometimes as a depth
2015-07-01 09:30:20 +02:00