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
Gregory Hainaut
b7e16b5989
gsdx-ogl: clean the blending management
...
Intially GSBlendStateOGL was an alias of the m_blendMapD3D9 array
The object was replaced by an index in the array. Save 2k of memory duplication.
And too much useless code.
v2: push/pop blending state in DATE stuff
v3: remove m_state which is useless now
2015-08-05 22:55:12 +02:00
Gregory Hainaut
717f0fcb4d
gsdx-ogl: optimize fbmask setup
2015-08-05 22:55:12 +02:00
Gregory Hainaut
73e2ff6ff6
gsdx-ogl: change PrimitiveOverlap algo from O(n^2) to O(n)
...
+ only enable this optimization when it is useful (date or sw blending)
Less impact on the perf even for big vertex array
2015-08-05 17:59:55 +02:00
Gregory Hainaut
36554c3375
Merge branch 'hdr-colclip-32bits'
2015-08-04 21:55:40 +02:00
Gregory Hainaut
45bb27d6db
gsdx-ogl: extend HDR colclip to 32 bits texture
...
Unfortunately 16 bits wasn't enough for Castlevania.
2015-08-04 21:54:27 +02:00
Gregory Hainaut
c6ff7531fb
gsdx-ogl: performance boost on virtuafighter
2015-08-04 21:26:03 +02:00
Gregory Hainaut
d80aa0b0bd
gsdx-ogl: remove 2 printfs
...
GL_INS is a better tracing solution
2015-08-04 20:47:02 +02:00
Gregory Hainaut
744f9ebc09
gsdx-ogl: rare corner case when both texture shuffle and date are enabled
...
In texture shuffle mode the texture data is either RG or BA. It means
that DATE must either checks MSB of G or A.
Close #693
2015-08-04 20:10:44 +02:00
Gregory Hainaut
3784ea768f
gsdx: check null pointer when doing a texture clear
2015-08-04 19:26:17 +02:00
Gregory Hainaut
8424c18e9f
Merge pull request #688 from PCSX2/hdr-colclip
...
Hdr colclip
2015-08-02 18:13:28 +02:00
Gregory Hainaut
1f402b1b56
gsdx-ogl: fix bad detection of overlapping
...
avoid rendering corruption with SW blending
2015-08-01 13:29:25 +02:00
Gregory Hainaut
ec007ac8d0
gsdx-ogl: support accurate blending without geometry shader
...
For the Mesa driver
2015-08-01 13:26:15 +02:00
Gregory Hainaut
eb0fa8c7dc
gsdx-ogl: fix bad detection of overlapping
...
avoid rendering corruption with SW blending
2015-08-01 01:27:22 +02:00
Gregory Hainaut
8452d2ccfe
gsdx-ogl: fbmask regression! don't use bit operation with integer
2015-07-31 21:10:58 +02:00
Gregory Hainaut
fff59f547d
gsdx-ogl: fbmask regression! don't use bit operation with integer
2015-07-31 19:43:06 +02:00
Gregory Hainaut
a0edcb58af
gsdx-ogl: extend cclip blending level with destination alpha blending
...
The purpose is to emulate correctly destination alpha factor
An alpha channel of 128 is 1.0 in the GS but only ~0.5 in the GPU
I think few draw call use destination alpha so impact on perf must remains small.
2015-07-31 09:45:28 +02:00
Gregory Hainaut
8554f32086
gsdx-ogl: clean the blend table
...
Remove old shader define
Prefix macro with BLEND_
Add some notes to explain the special symbol
2015-07-31 09:45:28 +02:00
Gregory Hainaut
cfd0fd6cc8
gsdx-ogl: remove old colclip algo
2015-07-31 09:45:28 +02:00
Gregory Hainaut
93c47feb7c
gsdx-ogl: replace old colclip algo with the HDR algo
...
Similar speed but more accurate
Allow to clean the code
2015-07-31 09:45:28 +02:00
Gregory Hainaut
83f874db93
gsdx-ogl: remove bsel.ps
...
Just clear bsel.abe to disable blending
2015-07-31 09:45:28 +02:00
Gregory Hainaut
25298c70f7
gsdx-ogl: move blending management into a separate function
2015-07-31 09:45:28 +02:00
Gregory Hainaut
25bd5f5e85
gsdx-ogl: request texture barrier to emulate accurate date
...
Actually it can partially be done with GL_ARB_shader_image_load_store
extension. However all drivers that support shader_image have
texture barrier too.
2015-07-31 09:45:28 +02:00
Gregory Hainaut
2901e94ebc
gsdx-ogl: always bind the RT as input texture
...
To avoid code duplication
2015-07-31 09:45:28 +02:00
Gregory Hainaut
1fe3e04ce3
gsdx-ogl: don't alias m_env/m_context variable
...
It is cumbersome to move code
2015-07-31 09:45:28 +02:00
Gregory Hainaut
8f27a5a92b
gsdx-ogl: only enable fast accurate colclip in level3
...
Until we drop the old method
2015-07-31 09:45:05 +02:00
Gregory Hainaut
e026f1bac6
gsdx-ogl: implement a fast accurate colclip algo
...
The idea is to use a floating texture to accumulate the data and
then do a final postprocessing pass to apply the modulo
v2:
* use bounding box to
* fix vertex corruption issue
* use negative number in shader which allow to use half float (+12
fps@4x)
2015-07-30 18:34:52 +02:00
Gregory Hainaut
aa8f5848d1
gsdx-ogl: always issue a barrier when requested
...
Safer this way
2015-07-30 18:24:36 +02:00
Gregory Hainaut
88bd0996f5
gsdx-ogl: only print same tex/rt message when prims overlaps
...
Avoid most of the false positive
2015-07-30 18:24:32 +02:00
Gregory Hainaut
ae8df002af
gsdx-ogl: optimize Cs * As + Cd and Cs * Af + Cd blending
...
Basically the code does the alpha multiplication in the shader therefore
the blend unit only does a pure addition. This way the multiplication is
accurate and accurate_blending doesn't requires a costly barrier.
This code also avoid variable duplication to make the code more separated.
Hopefully blending can be done in a separated function
It is preliminary work to support fast color clipping with HDR
v2: fix assertion compilation failure
v3: fix regression in not accurate mode
v3: Cs * As/Af is not an accumulation
Those cases don't need the Cd addition and were already optimized anyway
Fix a regression on GoW2
2015-07-30 18:22:59 +02:00
Gregory Hainaut
12fdc37599
gsdx-ogl: reorganize blending in the renderer
...
Do DATE algo selection before blending. This way we can detect bad
interaction.
Regroup all blending/colclip in a single block. Avoid to check abe &&
rt multiple times.
v2: only enable sw blending when abe is true
2015-07-30 18:21:01 +02:00
Gregory Hainaut
caadc73e1b
gsdx-ogl: add a new level for accurate blending
...
The updated medium level will run for all sprites. It helps sotc blooming effect and it remains
fast enough to be enabled by default (at least on 3D games)
The new high level will run for all sprites + color clipping
2015-07-30 18:21:01 +02:00
Gregory Hainaut
01a1b1a5e6
gsdx-ogl: add the code to handle point and line in SW blending
2015-07-30 18:21:01 +02:00
Gregory Hainaut
a85894e159
gsdx-ogl: move texture shuffle and fbmask into a dedicated function
...
DrawPrims is really too big now
2015-07-30 18:21:01 +02:00
Gregory Hainaut
5c1b8986c6
gsdx-ogl: use SW blending when no barrier is required
...
Speed penality is small (only GPU) but it is more accurate
2015-07-30 18:21:00 +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
8da63cf95a
gsdx-ogl: try to enable sw blending for sprite rendering
...
The idea is that sprites are often use for post-processing effect (ofc except 2D games)
Most of the time post-processing supports SW blending with a small speed penality. SW
blending is more accurate so it is better to use it.
2015-07-30 18:21:00 +02:00
Gregory Hainaut
cb4af8fe83
gsdx-ogl: small optimization for the GPU
...
Gain: 1% at 4x on SotC (it partially compensates recent additions)
When the color is constant and equal to 128, the MODULATE mode is
equivalent to the DECAL mode. It saves 5 instructions on the FS.
2015-07-21 08:19:36 +02:00