Gregory Hainaut
866173a481
gsdx ogl: move zbuffer emulation code into a dedicated function
...
* 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.
2016-08-11 21:14:58 +02:00
Gregory Hainaut
74822d6ba3
gsdx ogl: rework atst handling
...
* Move the rounding operation in the constant buffer
* Merge less with less equal. And merge greater with greater equal
Need test
2016-08-10 11:30:11 +02:00
Gregory Hainaut
9a188a87c2
gsdx ogl: move ATST emulation in a dedicated function
...
Future commit will try to reduce the number of Alpha Test possibilities
2016-08-09 20:53:44 +02:00
Gregory Hainaut
1ea83ba3a7
gsdx debug: log current area of the draw
...
This way it is easier to see which part of the texture is read, and which part
of the framebuffer is updated
2016-07-31 13:19:38 +02:00
Akash
dbad57b8e8
GSDX: Silence an implicit conversion warning
...
OMSetBlendState() doesn't accept passing a float value as it's argument
(AKA actual parameter).
2016-07-28 18:58:06 +05:30
Gregory Hainaut
29c97a9bf2
gsdx ogl: only enable accumulation hack in HDR algo
...
Goal is to reduce shader permutations and improve perf when sw blending is disabled
2016-07-07 19:56:23 +02:00
Gregory Hainaut
16c2baa0df
gsdx-ogl: don't hardcode the accumulation blend trick
...
Perf impact is bigger than expected
2016-07-07 19:56:23 +02:00
Gregory Hainaut
cc62e8c785
Merge pull request #1439 from ssakash/Cleanup_Warnings
...
PCSX2: Clean up warnings on MSVC
2016-07-03 15:45:39 +02:00
Gregory Hainaut
11eeeb6ab1
gsdx ogl: be sure sw blending is enabled in sw colclip
...
Hit the assertion on superman
2016-07-02 17:19:41 +02:00
Akash
4cfb2b248e
GSDX: Clean up warnings on MSVC
...
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.
2016-06-30 16:50:10 +05:30
Gregory Hainaut
08579021c5
gsdx ogl: 1 isn't used for WMT/WMS in shader
...
Stick it to 0 to avoid useless shader toggling
2016-06-11 13:35:32 +02:00
Gregory Hainaut
415ce93425
gsdx ogl: rename the confusing function EmulateGS to Lines2Sprites
2016-06-09 18:27:58 +02:00
Gregory Hainaut
61075febae
gsdx ogl: move selector as state variables
...
Will be easier to move code around if required in the future
2016-06-09 18:27:58 +02:00
Gregory Hainaut
1132230674
gsdx ogl: create m_require_one_barrier/m_require_full_barrier state variable
...
hopefully code will be more readable
2016-06-09 18:27:58 +02:00
Gregory Hainaut
7ece9b823d
gsdx ogl: move texture management into a separate function
2016-06-09 18:27:57 +02:00
Gregory Hainaut
5d49a6b685
gsdx ogl: replace 4 VS shader variation by an AND mask
...
Perf will be roughly the same. However there is a single VS for all
the HW emulation.
2016-06-01 09:29:56 +02:00
Gregory Hainaut
959abe64f8
gsdx ogl: implement wildhack on the CPU
...
Speed impact is likely small and the plan is only to keep a single Vertex Shader
2016-06-01 09:29:56 +02:00
Gregory Hainaut
3d192b7f8d
gsdx ogl: separate channel code into a separate function
2016-06-01 09:29:56 +02:00
Gregory Hainaut
fb26254fbb
gsdx ogl: implement a more generic HLE shader for terminator 3
...
Hopefully without regression for others games
2016-05-29 10:13:43 +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
1f4439a89e
gsdx: add some notes of potential optimization
2016-05-23 19:38:44 +02:00
Gregory Hainaut
a7ba779ba8
gsdx ogl: another HLE channel effect for terminator 3
...
Same as before but with a different fbmask value (I don't know why but
I have the feeling that I might need the others value too)
2016-05-20 19:55:39 +02:00
Gregory Hainaut
1c21ea955c
gsdx ogl: HLE channel effect for terminator 3
...
Unfortunately I think the game uses another similar effects
2016-05-20 19:45:20 +02:00
Gregory Hainaut
e258f3e2fa
gsdx ogl: update accurate DATE behavior
...
* 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.
2016-05-19 10:03:46 +02:00
Gregory Hainaut
e776118de9
gsdx-ogl: implement previous DATE optimization in a single shader pass
...
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.
2016-05-15 17:44:40 +02:00
Gregory Hainaut
3ab12cef2f
gsdx ogl: accelerate special case of accurate date.
...
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.
2016-05-15 17:22:58 +02:00
Gregory Hainaut
025be70c42
gsdx-ogl: allow to fallback to a slow accurate DATE when GL_ARB_shader_image_load_store isn't supported
...
The best is still to have a DX11 generation GPU
2016-05-15 16:29:29 +02:00
Gregory Hainaut
5b061e062c
gsdx ogl: replace ClearRenderTarget_i by glClearTexSubImage
...
Avoid state change, avoid potential texture buffer reallocation
Note: require GL_ARB_clear_texture
2016-05-15 15:55:31 +02:00
Gregory Hainaut
82060320ef
gsdx ogl: use draw list size for sprite instead of vertex number to select date algo
...
Latest overlap detection allow to draw multiple sprite instead of 1,
so the limit based on vertex number is too conservative.
2016-05-15 15:00:52 +02:00
Gregory Hainaut
d47d9e5017
gsdx-ogl: fix a minor gcc warning
2016-05-15 13:10:46 +02:00
Gregory Hainaut
4065730e36
gsdx ogl: merge sprite hack take 2
...
try to detect paving correctly. Avoid to break effect such as Heat effect in Tekken5
2016-05-14 12:24:56 +02:00
Gregory Hainaut
24a673c482
gsdx ogl: avoid special format on the merge sprite hack
2016-05-13 18:28:21 +02:00
Gregory Hainaut
156b6425d2
gsdx ogl: add UserHacks_merge_pp_sprite option to reduce upscaling glitches
...
For test purpose, it is higly experimental.
So far it is yield interesting result for tekken5
2016-05-10 08:12:07 +02:00
Gregory Hainaut
c019f86529
gsdx ogl: add a performance note for a potential channel optimization
2016-05-10 08:11:28 +02:00
Gregory Hainaut
5b04672ba2
gsdx ogl: separate Tales of Abyss/Urban Chaos effect based on the fbmask
...
Avoid to rely on CRC
2016-05-08 17:31:13 +02:00
Gregory Hainaut
ecbcc566fe
gsdx ogl: use GT shader for Tourist Trophy
2016-05-07 22:46:41 +02:00
Gregory Hainaut
fc86620327
gsdx ogl: disable channel effect when signature is a bit different
...
Hack to avoid regression on Blood Will Tell
2016-05-07 22:46:41 +02:00
Gregory Hainaut
30b452543a
gsdx ogl: tekken5 uses similar effect as Gran Turismo
...
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)
2016-05-07 22:46:41 +02:00
Gregory Hainaut
d41613c46a
gsdx ogl: add a Tales of Abyss HLE shader
...
Again fast and efficient but it relies on CRC
v2: forget to update the precompiled shader...
2016-05-07 22:46:41 +02:00
Gregory Hainaut
70ee8c5bc4
gsdx ogl: add an HLE brightness/contrast shader for GT series.
...
It works and it is very fast. But it relies on CRC
Others effect need to be tested as well
2016-05-07 22:46:41 +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
90af611fdb
gsdx ogl: Fix channel effect interaction with accurate blending
...
* Vertex info must be updated before PrimitiveOverlap
* Fix the vertex number (2 not 4)
* add an uint16 cast to shut up Visual Studio
2016-05-02 19:48:11 +02:00
Gregory Hainaut
e190841d67
gsdx ogl: improve blending logging
2016-05-02 18:14:02 +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
14e1ed06df
glsl: add an HLE shader for Urban Chaos
...
Pro:
* Replace 140 draw calls into a single one
* No complex texture conversion/lookup
* smaller solution than a generic solution
2016-04-30 14:52:53 +02:00
Gregory Hainaut
7d191ebf8e
gsdx tc: load palette for pseudo 8 bits depth
...
Rendering is still broken but I'm afraid it will need a dedicated shader
2016-04-30 14:52:43 +02:00
Gregory Hainaut
b4c7d32741
gsdx ogl: avoid to wrongly detect a channel shuffle
2016-04-30 14:52:43 +02:00
Gregory Hainaut
7a5e1d4154
gsdx ogl: allow to use a separate texture for the channel effect
2016-04-29 17:34:17 +02:00
Gregory Hainaut
cb19451418
gsdx ogl: implement RT channel fetch
...
Fix blending of Metal Gear Solid/KillZone (and potentially other games)
Potentially impact issue #905 , #594 , #914 , #896
2016-04-28 22:56:38 +02:00
Gregory Hainaut
eaa4fd41e2
gsdx ogl: improve logging of special effect
2016-04-28 22:56:38 +02:00
Gregory Hainaut
f63e38a59e
gsdx ogl: as always some games do bad stuff
...
Let's keep a comment for the moment. I don't know if we need to fix it, neither how.
2016-04-28 19:42:00 +02:00
Gregory Hainaut
aeb92592e7
gsdx ogl: use GSUtil::GetClassVertexCount
2016-04-26 19:29:04 +02:00
Gregory Hainaut
ad08701cb1
gsdx tc: trick the texture cache to use a depth format for depth texture
...
This way we avoid the rescaling of the depth buffer and texture allocation.
2016-04-24 22:18:26 +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
refractionpcsx2
dcb676765e
GSdx: Clean up some warning under windows ( #1289 )
2016-04-14 11:00:58 +01:00
Gregory Hainaut
847b57907e
Revert "gsdx-ogl: add a new hack to force anisotropic filtering"
...
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
2016-04-10 17:30:49 +02:00
Gregory Hainaut
3f404c8edb
gsdx-ogl: update shader pipeline intertace to use vs/gs/ps triplet
...
Better to have 1 function calls with 3 parameters rather 3 functions call with 1 parameter.
2016-04-10 14:14:30 +02:00
Gregory Hainaut
53690cf9d0
gsdx-ogl: add a new hack to force anisotropic filtering
...
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
2016-04-10 13:53:17 +02:00
Gregory Hainaut
dfb4b5a339
gsdx-ogl: GL_ARB_texture_barrier is now mandatory
...
(GL4.5 extension)
2016-04-07 21:51:37 +02:00
Gregory Hainaut
856a12f94f
gsdx-ogl: init Render object
...
CID 147002
2016-03-30 19:56:19 +02:00
Gregory Hainaut
bc73195193
gsdx-ogl: pack more tightly the FS UBO
...
Merge TA vec2 + Af vec1 into a single vec4
2016-03-10 18:29:05 +01:00
Gregory Hainaut
bef8447447
Merge pull request #1186 from PCSX2/gsdx-unoptimize-vs
...
gsdx-ogl: make VS more generic
2016-02-20 10:39:19 +01:00
Gregory Hainaut
f8c442cf76
gsdx-ogl: make VS more generic
...
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
2016-02-18 19:02:05 +01:00
Gregory Hainaut
0dadc124d3
gsdx-ogl: invert behavior of unsafe user hack
...
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
2016-02-18 18:48:13 +01:00
Gregory Hainaut
3f3141c186
GSdx-ogl: limit accurate sprite blending to smaller draw call
...
Completely restore speed in Zone of Ender
Fix #1093
2016-01-22 09:07:35 +01:00
Jonathan Li
37deeb0d52
gsdx-ogl: Optimise overlap detection algorithm
...
Vectorise coordinate min/max sorting, and use the ordered runion
instead.
2016-01-16 19:21:56 +00:00
Jonathan Li
2fc3ef8124
gsdx-ogl: Add sprite overlap statistics to debug messages
2016-01-16 19:21:54 +00:00
Jonathan Li
74ace74d50
gsdx-ogl: Group non-overlapped accurate blend sprite draws
...
Reduces the number of draw calls and barriers when drawing sprites.
2016-01-13 08:07:53 +00:00
Jonathan Li
f3b6829c74
gsdx-ogl: Restart collision detection algorithm for remaining sprites
...
It's useless on its own, but it prepares for the next commit.
2016-01-13 08:02:42 +00:00
Gregory Hainaut
24be4b4969
gsdx-ogl: remove unsafe fbmask of the free SW blending
...
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)
2016-01-03 15:39:45 +01:00
Gregory Hainaut
0d25a0592a
gsdx-ogl: fast blending accurate hack
...
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
2016-01-03 15:39:45 +01:00
Gregory Hainaut
c0d0e2e89d
gsdx-ogl: PrimitiveOverlap requires real rectangle
...
runion/rempty/rinter requires x < z and y < w
Help issue #762 (accurate blending issue)
If you want to shine, please put better GSVector code (AVX512 is 2 instruction :p)
2015-10-22 12:34:50 +02:00
Gregory Hainaut
6561fbc831
gsdx-ogl: only enable aniso when sampling from the HW texture unit
...
Potentially help issue #884
2015-10-22 12:21:43 +02:00
Gregory Hainaut
0958b9db8e
gsdx-ogl: use the standard openGL name
...
Function pointer was mangled to avoid any collision. Nowadays all symbols
are hidden so no risk of collision.
Syntax is nicer beside it would allow to put back GLES3.2. I think it
supports most of the used extension.
glActiveTexture & glBlendColor are provided without symbol query.
2015-10-17 17:05:15 +02:00
Gregory Hainaut
03bc304ecf
gsdx-ogl: fix colclip regression when accurate blending is enabled
...
Fix #865
2015-10-16 22:07:50 +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
Gregory Hainaut
9b69afe541
gsdx-ogl: typo that broke TC offset hack
2015-09-20 22:19:45 +02:00
Gregory Hainaut
78569ee833
gsdx-ogl: redo properly the setup of texture format
...
* add lengthly comment to explain the format
* Likely reduce the number of shader permutation
* Avoid slow AEM (on GPU)
Expect regressions because TC needs some fixes
v2: fix palette mode
2015-09-11 14:14:22 +02:00
Gregory Hainaut
ddc03cbccf
gsdx: add a nice enum to replace the hardcoded convert shader
2015-09-08 16:51:24 +02:00
Gregory Hainaut
a46c11b088
gsdx-ogl: delete various leftovers
2015-08-22 13:33:32 +02:00
Gregory Hainaut
7002ff3ec3
gsdx-ogl: move texture scale from vs_cb to fs_cb
...
It avoid useless update of the vs_cb.
2015-08-22 13:33:04 +02:00
Gregory Hainaut
499206f0ea
gsdx-ogl: disable advance rendering when drivers don't support it
2015-08-22 12:22:35 +02:00
Gregory Hainaut
37f9bcf9cb
gsdx-ogl: reduce state change
...
* don't dirty aref when a fog color is uploaded
* only set clamp mode in clamp mode (region clamp is handled in shader)
v2: fix SSE2/3 compilation
2015-08-20 23:01:43 +02:00
Gregory Hainaut
c5a786ed2c
gsdx-ogl: remove support WMS/T == 2 in hardware unit
...
I think behavior was wrong because only first texel coordinate was clamped.
Beside we can't interpolate if AEM isn't yet applied
2015-08-20 23:01:43 +02:00
Gregory Hainaut
6b84a89b6a
gsdx-ogl: remove old ati hack for point sampler
...
Was never used on openGL
In the future absolute coordinate will be use anyway
2015-08-18 19:09:45 +02:00
Gregory Hainaut
37661f3a86
gsdx-ogl: fix blending regression (VP2)
...
Negative factor must be disabled in negative accumulation "-Cs*As + Cd"
Shader must output Cs*As and blending unit will do the Cd - C subtraction
2015-08-18 09:14:11 +02:00
Gregory Hainaut
260c12756a
gsdx-ogl: accelerate Cd - Cs * Alpha in sw blending
...
It is similar as Cd + Cs * Alpha except the operator
It would help to emulate other color clipping case correctly in basic
mode at full speed
2015-08-16 18:12:34 +02:00
Jonathan Li
6580f4922f
gsdx-ogl: correct fbmask conversion on texture shuffle
...
Fbmask is RGBA8 and must be converted to RGB5A1
=> bit 31 must be moved to bit 15
Signed-off-by: Gregory Hainaut <gregory.hainaut@gmail.com>
2015-08-16 14:06:10 +02:00
Gregory Hainaut
c32f1dfc23
gsdx-ogl: fix blend clear regression
...
Field selector are very dangerous to use.
Fix #764
2015-08-15 20:06:34 +02:00
Gregory Hainaut
0e3491bd58
gsdx-ogl: always do RW RT check
...
Jak uses it with triangle rendering.
2015-08-15 20:06:34 +02:00
Gregory Hainaut
c7b2f9d1d2
gsdx-ogl: setup fbo to always write to first buffer
...
GL_NONE was kind of useless because nothing was attached anyway
2015-08-15 20:06:34 +02:00
Gregory Hainaut
87f497af0a
gsdx-ogl: remove an useless variable
2015-08-15 20:06:34 +02:00
Gregory Hainaut
6046d6c417
Merge pull request #749 from PCSX2/gsdx-micro-optimization
...
Gsdx micro optimization
2015-08-12 08:54:36 +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
Gregory Hainaut
9f92f63194
gsdx-ogl: Use GetAlphaMinMax to limit the scope of FULL accurate blending
...
Provide a massive speed up in this level.
2015-08-09 13:44:31 +02:00
Gregory Hainaut
61694013a5
gsdx-ogl: compact blending parameter structure
...
Save 656B of data. It is good for the cache.
2015-08-09 13:44:30 +02:00
Gregory Hainaut
df3ade896b
gsdx-ogl: use integer for blend factor
...
Integer argument&comparison might be lighter
V2: Forget to change one OMSetBlendState call
2015-08-09 13:44:05 +02:00
Gregory Hainaut
5b57405517
gsdx-ogl: blend management cleanup
...
* reorder the blend function
* remove OM bsel object
* add a bit to support pabe (miss the glsl part)
2015-08-08 09:18:09 +02:00
Gregory Hainaut
4d12410707
gsdx-ogl: latch constant buffer in rendering object
...
* Initialization of the object is done once
* Avoid to reupload it when an useless parameter toggle
=> -10% of UBO update
2015-08-08 09:18:09 +02:00
Gregory Hainaut
b17803bb34
gsdx-ogl: wipeout of GL_ARB_bindless_texture
...
Code is completely broken. It doesn't help to improve speed.
Remove 200 lines ;)
2015-08-08 09:16:49 +02:00