Stenzek
3b86c93285
VertexManagerBase: Increase vertex/uniform buffer sizes
...
ZTP was uploading 10MB+ of uniforms per frame, reducing paralellism by
forcing GPU waits.
2019-03-29 19:52:38 +10:00
Stenzek
2a4bca8b4a
VideoBackends: Verify validity before doing full renderer init
...
Prevents attempting to create invalid MSAA configurations, for example.
2019-03-29 19:52:38 +10:00
Stenzek
1151a1238f
D3D11: Use ComPtr smart pointer where possible
2019-03-29 19:52:38 +10:00
Stenzek
3d8014beb5
D3D11: Use D3DCommon where appropriate
2019-03-29 19:52:38 +10:00
Stenzek
ea15080d8f
Add D3DCommon (shared code between D3D11 and D3D12)
2019-03-29 19:52:38 +10:00
Stenzek
f6641b7e4f
Vulkan: Use Common::DynamicLibrary
2019-03-29 19:52:38 +10:00
Stenzek
16294acd2a
VideoBackends: Scale bounding box rectangle in the pixel shader
2019-03-25 18:47:58 +10:00
Dzmitry Malyshau
4173a8f545
Use proper view type of framebuffer images
2019-03-15 12:24:39 -04:00
Stenzek
a218a794cb
FramebufferManager: Implement deferred EFB cache invalidation
2019-03-09 12:24:04 +10:00
Stenzek
65216c9e87
VideoConfig: Add SupportsPartialDepthCopies to backend info
...
D3D11 doesn't support partial copies of depth buffers via
CopySubResource(), so we need to use a different path for the EFB cache.
2019-03-09 12:19:53 +10:00
spycrab
f72652f690
Revert "Vulkan: Show backend as Vulkan (MoltenVK) on macOS"
2019-03-07 02:05:59 +01:00
spycrab
a5534ec950
Vulkan: Show backend as Vulkan (MoltenVK) on macOS
2019-03-06 15:25:54 +01:00
Stenzek
21d81f99ff
VideoBackends: Fix GPU decoding of XFB buffers
...
Was using UNORM instead of UINT, resulting in invalid values.
2019-02-28 20:35:22 +10:00
Stenzek
f039149198
Move most backend functionality to VideoCommon
2019-02-19 16:57:54 +10:00
Stenzek
f9869cb216
Vulkan: Support runtime selection of WSI
2019-02-15 18:40:46 +10:00
Tilka
8d59d1bb11
Merge pull request #7798 from ShFil119/impr/empty
...
Use empty instead of size
2019-02-13 01:59:43 +00:00
Filip Gawin
49fe9f5db1
Use empty instead of size
2019-02-13 00:03:49 +01:00
Tilka
8aaebfa2b3
Merge pull request #7716 from stenzek/stereo
...
Stereoscopy regression fixes
2019-02-03 19:57:01 +00:00
Jordan Woyak
69b617ce76
WiimoteEmu: Remove redundant Matrix library and use the one in Common.
2019-02-03 12:02:02 -06:00
Tilka
2d75797c63
Merge pull request #7747 from stenzek/vulkan-shutdown
...
Vulkan: Shutdown fixes and cleanup/refactoring
2019-02-02 12:45:20 +00:00
Stenzek
3b033bf3f0
Vulkan: Move clear shader from Renderer to ShaderCache
2019-01-27 13:07:35 +10:00
Stenzek
e2cf238ec4
Vulkan: Move swapchain related members from Renderer to SwapChain
2019-01-27 12:59:57 +10:00
Stenzek
bd66db049a
Vulkan: Use device-local functions where possible
...
Avoids a call into the loader library, which may improve performance
ever-so-slightly.
2019-01-27 12:51:04 +10:00
Stenzek
ce1cc2d9fa
Vulkan: Don't execute command buffer before shutting down
...
We don't need to, and this was causing occasional crashes on Adreno.
2019-01-27 12:41:10 +10:00
Stenzek
b01df8670f
Renderer: Fix throttle-disable (TAB) hotkey when vsync is enabled
2019-01-27 12:31:12 +10:00
Stenzek
774480ba23
Vulkan: Set contents scale of Metal layer to screen factor
...
This gives us a native resolution framebuffer.
2019-01-26 00:02:04 +10:00
Stenzek
ee0fa548bc
Vulkan: Don't bind last descriptor set if bounding box is unsupported
...
Fixes crash on a4xx/Vulkan.
2019-01-25 11:15:57 +10:00
Stenzek
e9b02e7dd0
Vulkan: Remove unused UpdateUtilityUniformBuffer function
2019-01-25 11:15:57 +10:00
Stenzek
e4b205c769
Decouple XFB scanout from presentation
2019-01-25 11:15:57 +10:00
Stenzek
c9c0b85056
VideoBackends: Store a backbuffer 'scale'
...
This is a scaling factor, used for hi-dpi configurations.
2019-01-25 11:15:57 +10:00
Stenzek
e03b8e899e
Vulkan: Move texture upload buffer to ObjectCache
2019-01-25 11:15:57 +10:00
Stenzek
63dd91628d
Remove old RasterFont classes
2019-01-25 11:15:57 +10:00
Stenzek
600d1fc0bc
Renderer: Use imgui for drawing debug text and OSD
2019-01-25 11:15:57 +10:00
Stenzek
d1868d9475
RenderBase: Implement imgui rendering
2019-01-25 11:10:49 +10:00
Stenzek
396b7c2978
OGL: Invalidate tracked state when calling ResetAPIState()
...
Due to the current design, any of the GL state can be mutated after
calling this function, so we can't assume that the tracked state will
match if we call SetPipeline() after ResetAPIState().
2019-01-25 11:10:49 +10:00
Stenzek
6bfe4c83a5
OGL: Fix broken stereoscopy geometry shader for EFB copies
2019-01-19 23:22:57 +10:00
zackhow
078fc74b54
Android/OGL: fix bounding box for OpenGL-ES
...
OpenGL-ES does not have glGetBufferSubData, so use glMapBufferRange instead
2019-01-09 21:08:49 -05:00
weihuoya
66a7db3850
Always flush on swap
2019-01-08 18:28:59 +08:00
Stenzek
7afd5cc2fb
Use main buffers for utility draws
2018-12-04 17:37:25 +10:00
Stenzek
5ca18ff04e
Vulkan: Restore viewport/scissor state on RestoreAPIState
2018-12-04 17:36:08 +10:00
Stenzek
b409a87d1a
D3D: Clamp viewport to current framebuffer dimensions, not target
2018-12-04 17:36:08 +10:00
Stenzek
fa8262fa4a
Vulkan: Don't panic on missing color/depth buffer in config
2018-12-04 17:36:08 +10:00
Stenzek
2644e920cc
Renderer: Add backbuffer format to base class
2018-12-04 17:36:08 +10:00
Stenzek
1adcd47dcb
Renderer: Add a base Initialize() method to match Shutdown()
2018-12-04 17:36:08 +10:00
weihuoya
3ab0f02cec
vulkan: fx index buffer reserve size
2018-12-03 19:23:36 +08:00
Connor McLaughlin
6388992f62
Merge pull request #7039 from stenzek/moltenvk
...
Vulkan: macOS support via MoltenVK
2018-11-30 21:55:30 +10:00
Stenzek
a0653a1a34
Vulkan: Fix incorrect fence being assigned to staging texture
2018-11-12 01:02:32 +10:00
Stenzek
673f1963a0
Vulkan: Support macOS via MoltenVK
...
The path to the MoltenVK library can be specified by the
LIBMOLTENVK_PATH environment variable, otherwise it assumes it is
located in the application bundle's Contents/MacOS directory.
2018-11-07 05:41:09 -08:00
Stenzek
c7a2b1572b
CMake: Build Vulkan backend on macOS
2018-11-07 05:12:20 -08:00
Stenzek
7efdd1070b
OGL: Fix crash when opening graphics window on another backend
2018-11-07 21:20:12 +10:00
Stenzek
66b6e72c5e
Vulkan: Submit fewer command buffers in deferred EFB copies mode
2018-11-07 16:25:01 +10:00
Stenzek
8e2c063d62
TextureCache: Implement deferred/batched EFB copies
2018-11-07 16:25:01 +10:00
Pierre Bourdon
f1413dbbf6
Merge pull request #7501 from Techjar/class-memaccess-cleanup
...
VideoCommon: Clean up class-memaccess warnings
2018-10-28 23:59:51 +01:00
Stenzek
7c4607a05a
Vulkan: Add missing increment of draw call count
2018-10-28 11:32:26 +10:00
Stenzek
0559311f92
GLContext: Runtime selection of EGL/GLX on Linux
2018-10-20 21:11:34 +10:00
Stenzek
025e909773
GLContext: Use destructor instead of Shutdown() to cleanup
...
Also uses the Initialize() method to make the context current.
2018-10-20 21:11:34 +10:00
Stenzek
dcdd02d646
GLContext: Remove global context pointer
2018-10-20 21:11:34 +10:00
Stenzek
eb284b5d66
VideoBackends: Pass window system info from host on creation
2018-10-20 21:11:34 +10:00
Stenzek
9c57a98723
GLContext: Use host connection
...
This also removes the need for a sleeping event thread.
2018-10-20 21:11:34 +10:00
Stenzek
1d827a5223
Renderer: Pull dimensions from GLInterface/Swapchain
2018-10-20 21:11:34 +10:00
Stenzek
a3961750a7
Drop Host_GetRenderSurface and pass display to backend
2018-10-20 21:11:34 +10:00
Stenzek
134d967be2
Refactoring and cleanup of GLInterface (now GLContext)
2018-10-20 21:11:34 +10:00
Tillmann Karras
97cc9894e4
Update to Visual Studio's default Windows SDK
2018-10-20 00:53:08 +01:00
Techjar
8560eecd49
VideoCommon: Clean up class-memaccess warnings
2018-10-14 23:05:47 -04:00
Stenzek
e3f475b30e
NullBackend: Initialize vtx_decl in VertexFormat
...
This field was previously left uninitialized, which resulted in corrupted
UID caches being created.
2018-10-14 21:24:09 +10:00
Mat M
ecd4897d43
Merge pull request #7437 from stenzek/graphics-options-race
...
Fix race condition caused by opening graphics options while running
2018-10-12 10:29:28 -04:00
Stenzek
2e905455b1
OGL: Disable scissor test when calling glBlitFramebuffer()
...
glBlitFramebuffer() does not bypass the scissor test, which meant that
part of texture copies (e.g. XFB) could have been clipped when running
under OpenGL ES, as glCopyImageSubData() is not supported.
2018-10-09 22:00:40 +10:00
Tillmann Karras
56fdcf5f00
VideoCommon: remove unnecessary floor()
...
floatindex is clamped to the range [0, 9]. For non-negative numbers
floor() is equivalent to trunc(). Truncation happens implicitly when
converting to uint, so the floor() is unnecessary.
2018-10-09 00:31:43 +01:00
Jules Blok
1ab1d41b10
Merge pull request #7457 from Tilka/use_clamp
...
VideoSoftware: make use of Clamp()
2018-10-07 19:53:45 +01:00
Tilka
af2f212039
Merge pull request #7348 from spycrab/gl_cache_shaders
...
GL/TextureCache: Clean up inline shader code
2018-10-06 00:28:54 +01:00
Tillmann Karras
a6a5d86cd8
VideoSoftware: make use of Clamp()
2018-10-05 22:07:38 +01:00
Stenzek
eb33d7af64
Core: Call InitBackendInfo before loading config
2018-09-28 21:44:41 +10:00
spycrab
392df8a11d
GL/TextureCache: Clean up inline shader code
2018-08-30 16:05:39 +02:00
Stenzek
448e19629d
Vulkan: Drop usage of VK_NV_glsl extension
...
It's not providing a large performance improvement anymore, after the
more recent drivers introduced a new shader compiler.
2018-08-29 13:12:19 +10:00
Stenzek
3323265d91
FramebufferManager: Dynamic selection of EFB depth format
2018-07-19 21:47:42 +10:00
Stenzek
b30342d38f
VideoBackends: Support D24S8 abstract texture format
2018-07-19 21:47:42 +10:00
Techjar
dc2f22516c
Mark all video backend names for translation
2018-06-30 06:30:19 -04:00
Lioncash
540bb1a1b0
Software: Don't link against X11 libraries
...
The software backend doesn't actually use X11 in any capacity directly.
2018-06-21 01:47:37 -04:00
Léo Lam
c93210155f
Merge pull request #7075 from Ebola16/DumpObjects
...
Software Renderer "Dump Objects" needs dedicated folder and tooltip
2018-06-06 15:20:14 +02:00
Ryan Meredith
45b9b7d211
Give Dump Objects dedicated folder and tooltip
2018-06-06 08:42:41 -04:00
Anthony
36ff2a20d5
Merge pull request #6954 from degasus/coherent
...
OGL/Streambuffer: Use coherent mapping by default.
2018-06-05 12:06:17 -07:00
Léo Lam
6ce9c96d91
Merge pull request #7027 from leoetlino/cleanup
...
Use some C++17 features available since GCC 6
2018-06-04 20:50:50 +02:00
Stenzek
bc96557ec4
Externals: Update glslang to upstream commit 32d3ec3
2018-06-02 07:34:31 +00:00
Léo Lam
8a00a9e149
Remove old GCC version checks
2018-05-30 10:59:15 +02:00
Stenzek
640bfb8135
VideoConfig: Add a field for indicating logic op support in the backend
2018-05-26 00:07:20 +10:00
degasus
fdfd8b19d6
OGL/Streambuffer: Use coherent mapping by default.
...
Coherent mappings have a lower overhead and less GL codes.
So enables coherent mapping by default for all drivers.
Both Qualcomm and ARM performs very bad with explicit flushing, so this change helps them as well.
AFAIK there was one GPU generation which was slower on coherent mapping: nvidia tesla
So Geforce 200 and 300 series should be tested with this PR before merging.
As this was last tested many years ago, this issue might have been fixed as well.
Those GPUs are close to 10 years old and not supported any more by nvidia.
2018-05-24 00:00:02 +02:00
Stenzek
d0c025bf0b
OGL: Fix EFB access in MSAA-mode
2018-05-22 15:35:20 +10:00
Stenzek
f74dbc794c
EFB2RAM: Apply copy filter as a float coefficient after sampling
...
Using 8-bit integer math here lead to precision loss for depth copies,
which broke various effects in games, e.g. lens flare in MK:DD.
It's unlikely the console implements this as a floating-point multiply
(fixed-point perhaps), but since we have the float round trip in our
EFB2RAM shaders anyway, it's not going to make things any worse. If we
do rewrite our shaders to use integer math completely, then it might be
worth switching this conversion back to integers.
However, the range of the values (format) should be known, or we should
expand all values out to 24-bits first.
2018-05-22 12:24:08 +10:00
Lioncash
8a1a924e2e
Vulkan/PostProcessing: Make file-scope std::string instances const char arrays
...
Avoids performing avoidable file-scope heap allocations
2018-05-21 12:29:05 -04:00
Emmanuel Gil Peyrot
c51ae9c62a
Remove SOIL altogether from the project.
2018-05-20 13:44:42 +02:00
Lioncash
505d45a233
EfbInterface: Move buffer constant from the header to the cpp file
...
This is only ever used internally, so we can limit its scope to the only
usage point.
2018-05-18 16:23:34 -04:00
Lioncash
5eef8ba984
EfbInterface: Make efb and perf_values std::arrays
2018-05-18 16:23:29 -04:00
Lioncash
c58b5e9b9b
EfbInterface: Make perf_values internally linked
...
Instead, expose functions to operate with it. This way we keep the
internal representation concealed.
2018-05-18 15:35:08 -04:00
Lioncash
f3a8874214
EfbInterface: Move efb array into the EfbInterface namespace
2018-05-18 15:09:37 -04:00
Markus Wick
c485efdfe1
Merge pull request #6743 from stenzek/faster-disabled-copy-filter
...
TextureConversionShader: Don't sample from adjacent rows when not needed
2018-05-17 10:45:50 +02:00
Léo Lam
f91b729b61
Merge pull request #6825 from leoetlino/onion-types
...
Config: Fix implicit conversions/enum config types
2018-05-12 21:59:43 +02:00
Score_Under
4e7caa2818
Fix syntax error in GLSL_GS
2018-05-12 15:42:18 +01:00
Score_Under
70b00f2b2d
Remove stray quote sign
...
This allows GLSL_EFB_POKE_GEOMETRY_GS to compile again.
2018-05-12 15:21:29 +01:00
Léo Lam
7dca7c237e
Config: Fix template deduction for implicit conversions
...
This excludes the second argument from template deduction.
Otherwise, it is required to manually cast the second argument to
the ConfigInfo type (because implicit conversions won't work).
e.g. to set the value for a ConfigInfo<std::string> from a string
literal, you'd need a ugly `std::string("yourstring")`.
2018-05-12 14:30:18 +02:00
Léo Lam
d1bb5249ec
Merge pull request #6801 from stenzek/copy-filter-typo
...
D3D/Vulkan: Fix incorrect clamp in EFB RAM copy
2018-05-11 10:36:47 +02:00
Lioncash
ba01f6dba3
CommonFuncs: Convert ROUND_UP_POW2 macro to a function
...
Also move it to MathUtils where it belongs with the rest of the
power-of-two functions. This gets rid of pollution of the current scope
of any translation unit with b<value> macros that aren't intended to be
used directly.
2018-05-10 19:42:20 -04:00
Stenzek
3493d738ca
D3D/Vulkan: Fix incorrect clamp in EFB RAM copy
...
This could cause darker-than-expected EFB copies if clamping was not
enabled, and the user forced EFB copies to RAM only.
2018-05-11 00:32:39 +10:00
Stenzek
501b35bbf2
OGL: Fix broken format changes in i965 driver
2018-05-08 00:11:27 +10:00
Markus Wick
e31c571f51
Merge pull request #6646 from spycrab/fbm_strings
...
OGL/FramebufferManager: Clean up inline GLSL code
2018-05-07 08:58:56 +02:00
Stenzek
286d594f32
OGL: Fix incorrect clamping in EFB copies
2018-05-05 17:45:54 +10:00
Stenzek
4faac3a627
TextureConversionShader: Don't sample from adjacent rows when not needed
2018-05-03 14:09:32 +10:00
Stenzek
7a745e5b0d
D3D: Drop gamma parameter from util draw helper
...
No longer needed as we perform gamma correction during the XFB copy.
2018-05-02 21:58:56 +10:00
spycrab
b4dc658b2e
OGL/FramebufferManager: Clean up inline GLSL code
2018-05-01 15:03:59 +02:00
Stenzek
9e798eec94
Implement EFB copy filter and gamma in hardware backends
...
Also makes y_scale a dynamic parameter for EFB copies, as it doesn't
make sense to keep it as part of the uid, otherwise we're generating
redundant shaders.
2018-04-29 19:05:20 +10:00
Scott Mansell
a192a3bb30
While I'm here, fix some chroma sub-sampling bugs.
...
RE4's brightness screen is actually very good for spotting these.
Bug 1: Colors at the end of the scanlines are clamped, instead of a black
border
Bug 2: U and V color channels share coordinates, instead of being offset
by a pixel.
2018-04-29 17:56:53 +10:00
Scott Mansell
fc96479f12
VideoSoftware: Implement xfb copy filter (Deflickering/Brightness)
2018-04-29 17:56:51 +10:00
Lioncash
d68f437e67
Common: Move BitSet helper functions into the Common namespace
2018-04-23 00:13:55 -04:00
Tillmann Karras
4cfd900c67
Fix some warnings
2018-04-17 14:10:05 +01:00
Lioncash
b0dc823472
Common/Logging/Log: Wrap GENERIC_LOG macro's body in do { } while (0)
...
Enforces the termination of GENERIC_LOGs with semicolons.
2018-04-16 12:11:32 -04:00
spycrab
40bb9974f2
Reformat all the things!
2018-04-12 21:28:39 +02:00
Markus Wick
c6d0d9a01f
Merge pull request #6578 from JosJuice/remove-projection-hacks
...
Remove support for projection hacks
2018-04-04 09:10:32 +02:00
Lioncash
b184923540
Vulkan/CMakeLists: Migrate off add_dolphin_library
...
Finishes the migration work started in 3a4c3bbe01
2018-04-02 08:29:37 -04:00
Lioncash
8b43a31855
Software/CMakeLists: Migrate off add_dolphin_library
...
Continues the migration work started in 3a4c3bbe01
2018-04-02 08:24:40 -04:00
Lioncash
a3c53ff754
OGL/CMakeLists: Migrate off add_dolphin_library
...
Continues the migration work started in 3a4c3bbe01
2018-04-02 08:22:39 -04:00
Lioncash
d4f8502ad1
Null/CMakeLists: Migrate off add_dolphin_library
...
Continues the migration work started in 3a4c3bbe01
2018-04-02 08:17:00 -04:00
Lioncash
3854e2bcca
D3D/CMakeLists: Migrate off add_dolphin_library
...
Continues the migration work started in 3a4c3bbe01
2018-04-02 08:15:22 -04:00
JosJuice
91732e2baf
Remove support for projection hacks
...
This isn't really useful for anything anymore as far as I know.
2018-04-01 21:41:18 +02:00
Lioncash
b818cc682c
VideoCommon/Vulkan: Explicitly link in xxhash
...
Lessens the dependency on the LIBS variable (and also makes the required
libraries explicit).
2018-03-28 17:03:16 -04:00
Stenzek
2f1a7cbee1
Implement "Skip" ubershader mode
...
Skip ubershader mode works the same as hybrid ubershaders in that the
shaders are compiled asynchronously. However, instead of using the
ubershader to draw the object, it skips it entirely until the
specialized shader is made available.
This mode will likely result in broken effects where a game creates an
EFB copy, and does not redraw it every frame. Therefore, it is not a
recommended option, however, it may result in better performance on
low-end systems.
2018-03-26 01:57:41 +10:00
Helios747
b02b616930
[UI] Remove experimental tag from Vulkan
2018-03-21 15:12:12 -07:00
Markus Wick
523031f037
Merge pull request #6444 from stenzek/d3d-bbox
...
D3D: Fix broken bounding box
2018-03-19 09:21:22 +01:00
Lioncash
882d1c1256
OGLShader: Ensure m_id and m_compute_program_id are always initialized
...
Depending on which constructor is invoked, m_id or m_compute_program_id
can end up in an uninitialized state. We should ensure that the object
is completely initialized to something deterministic regardless of the
constructor taken.
2018-03-16 17:49:34 -04:00
Lioncash
83f17ac59f
OGLShader: Fix mismatched assignment in compute shader constructor
...
This shouldn't be assigning to the regular ID.
2018-03-16 17:44:23 -04:00
Lioncash
7926a0c814
Use __func__ instead of __FUNCTION__ where applicable
...
This replaces usages of the non-standard __FUNCTION__ macro with the standard
mandated __func__ identifier.
__FUNCTION__ is a preprocessor definition that is provided as an
extension by compilers. This was the only convenient option to rely on
pre-C++11. However, C++11 and greater mandate the predefined identifier
__func__, which lets us accomplish the same thing.
The difference between the two, however, is that __func__ isn't a
preprocessor macro, it's an actual identifier that exists at function
scope. The C++17 draft standard (N4659) at section [dcl.fct.def.general]
paragraph 8 states:
"
The function-local predefined variable __func__ is defined as if a
definition of the form
static const char __func__[] = "function-name ";
had been provided, where function-name is an implementation-defined
string. It is unspecified whether such
a variable has an address distinct from that of any other object in the
program.
"
Thankfully, we don't do any macro or string concatenation with __FUNCTION__
that can't be modified to use __func__.
2018-03-16 13:41:53 -04:00
Lioncash
75f5fcdfee
Assert: Remove unused parameter from DEBUG_ASSERT
...
This brings the macro in line with the regular ASSERT macro, which only has one
macro parameter.
2018-03-16 13:01:11 -04:00
Stenzek
cb19ddd1d4
D3D: Fix broken bounding box
2018-03-17 00:20:43 +10:00
Lioncash
50a476c371
Assert: Uppercase assertion macros
...
Macros should be all upper-cased. This is also kind of a wart that's
been sticking out for quite a while now (we avoid prefixing
underscores).
2018-03-14 22:03:12 -04:00
Stenzek
dc9012ae08
OGL: Ensure VAO is active before unmapping buffers
...
Fixes a crash which could occur in platforms which do not support
buffer_storage, and EFB2RAM is enabled (which indirectly uses the
attributeless buffer).
2018-03-15 00:32:39 +10:00
Stenzek
db810956ec
Vulkan: Provide a more accurate method of detecting drivers/vendors
...
This is needed to differentiate between the open-source Mesa drivers and
their binary counterparts for Intel and AMD.
2018-03-14 02:48:53 +10:00
degasus
a5c0739fab
OGL: Scale OSD text on big screens.
2018-03-12 20:38:06 +01:00
degasus
d4449971c9
OGL: Warn if buffer_storage isn't available.
...
Yes, this commit is only to blame OSX and Mali. Through the former supports unsynchronized mappings, the latter supports *no* way to stream dynamic data at all. Let's try to make bad news, as they ignore friendly feature requests. Maybe we just need to make more noise...
2018-03-12 20:38:00 +01:00
Stenzek
93ab50c555
OGL: Move primitive restart enable logic to GLUtil
2018-03-10 16:11:20 +10:00
Stenzek
51a586d11a
GLUtil: Encapsulate functions in a namespace
2018-03-10 16:11:19 +10:00
Stenzek
fc1fe0672b
OGL: Add some basic state tracking
...
We would want to improve the granularity here in the future, but for
now, this should avoid any performance loss from switching to the
VideoCommon shader cache.
2018-03-10 15:56:37 +10:00
Stenzek
f9c829c7f7
OGL: Re-implement async shader compiling
2018-03-10 15:56:34 +10:00
Stenzek
dec0c3bce8
Move shader caches to VideoCommon
2018-03-10 15:56:30 +10:00
Stenzek
24df896eb8
VKShader: Fix incorrect loading of binary shaders
2018-03-10 15:56:27 +10:00
Stenzek
1ddc4c5568
D3D: Make NativeVertexFormat thread safe
2018-03-10 15:56:24 +10:00
Stenzek
40845e6b8f
D3D: Make StateCache thread safe
2018-03-10 15:56:21 +10:00
Stenzek
bfb4709c80
AbstractPipeline: Allow setting pipeline to null
2018-03-10 15:56:18 +10:00
Stenzek
5e5dfe686a
VKPipeline: Fix render pass and add pipeline layout fields
2018-03-10 15:56:13 +10:00
Stenzek
a61fcb0088
OGL: Fix abstract pipelines on drivers without binding layout support
2018-03-10 15:56:06 +10:00
Stenzek
00204dc988
OGL: Make ProgramShaderCache thread safe
2018-03-10 15:55:56 +10:00
Stenzek
4c24a69710
VideoCommon: Add support for Abstract Framebuffers
2018-03-02 20:20:48 +10:00
Stenzek
2a6d9e4713
AbstractTexture: Add support for depth textures/formats
2018-03-01 17:31:24 +10:00
Stenzek
6374a4c4a8
AbstractTexture: Support multisampled abstract texture
2018-03-01 17:31:24 +10:00
Stenzek
887e3830ba
VideoBackends: Restore the framebuffer as part of the API state
...
It's not often we switch out to draw to the EFB anyway.
2018-03-01 17:31:24 +10:00
Stenzek
b4b0f3d942
Vulkan: Fix broken post-processing
2018-03-01 16:55:55 +10:00
Markus Wick
227db66e4f
OGL: Use glBufferData on Mali.
...
tl;dr: This PR speedups dolphin on mobiles with the Mali GPU and ES 3.2
drivers by a factor of 10 by using the method with the biggest overhead.
Please keep care not to buy this shit!
The ARM driver team seems to care very well about their customers. But
bad luck, users and open source developers are *not* their customers. So
even device-independent feature requests are just ignored for *years*:
https://community.arm.com/graphics/f/discussions/4645/gl_ext_buffer_storage-support
The bad point, they neither implement any of the other common ways to
stream dynamic content in unextented GL:
- They just ignore the GL_MAP_UNSYNCHRONIZED_BIT flag
- They don't support on-device buffer updates and just stall with
glBufferSubData
It seems like no benchmark is using any dynamic content - and like no
customer cares about anything but benchmarks, or users...
We have a flag to disable the glBufferSubData way, this PR adds the flag
to also disable the unsychronized mapping way. The second one is
available since their ES 3.2 update, but slow as hell.
So how to continue? The last remaining technical way to stream dynamic
content at all is to alloc a new buffer per draw call with glBufferData.
This is very gross, but still a factor 10 speedup compared to stalling
the GPU. Small tests shows that you can expect another 3-5 times speedup
with EXT_buffer_data, so Mali would be on pair with Adreno here. So if
you have bought such a device unfortunately, please try to make noise on
your vendor forums/support and ask for this extension. If you are going
to buy a new mobile, I'd recormend to avoid *any* mobile with a Mali GPU
in it.
2018-02-25 17:12:36 +01:00
Stenzek
e4d3b5f626
OGL: Only create bad shader files in Dump when compile failed
...
Warnings are still logged.
2018-02-25 18:03:58 +10:00
Anthony
b66f96c617
Merge pull request #6042 from stenzek/videocommon-pipelines
...
VideoCommon pipelines ("Abstract Pipeline")
2018-02-23 09:18:19 -08:00
Stenzek
2ba8f67feb
OGL: Call GLInterface->Update() on window resize
...
macOS in particular requires the context be updated manually when the window
is resized.
2018-02-23 22:27:10 +10:00
Stenzek
fec6bb4d56
VideoBackends: Add AbstractShader and AbstractPipeline classes
2018-02-22 22:02:34 +10:00
Stenzek
31111ef143
D3D: Remove state stack from tracker, set explicitly instead
2018-02-22 19:40:55 +10:00
Stenzek
e18c7b1c33
D3D: Support state tracking of compute shaders
2018-02-22 19:11:27 +10:00
Stenzek
e8ff2b2006
D3D: Support compiling compute shaders
2018-02-22 19:11:25 +10:00
Stenzek
aaea515d71
GLUtil: Drop now-unused attributeless VAO helpers
2018-02-22 19:09:28 +10:00
Stenzek
052d78bcb1
OGL: Log warnings from shader compiles, even if it compiled successfully
2018-02-22 19:08:54 +10:00
Stenzek
3fd4142f36
OGL: Track state of last bound vertex array object
...
This reduces the overhead of calling glBindVertexArray() every time
RestoreAPIState() is called, even when it is redundant.
2018-02-22 19:08:52 +10:00
Markus Wick
e01fe46068
Merge pull request #6367 from stenzek/gl-flush
...
OGL: Use explicit flush instead of GL_SYNC_FLUSH_COMMANDS_BIT
2018-02-19 16:26:35 +01:00
Stenzek
de632fc9c8
Renderer: Handle resize events on-demand instead of polling
...
We now differentiate between a resize event and surface change/destroyed
event, reducing the overhead for resizes in the Vulkan backend. It is
also now now safe to change the surface multiple times if the video thread
is lagging behind.
2018-02-20 01:15:55 +10:00
Stenzek
5baf3bbe2e
OGL: Clear backbuffer before presenting instead of at start of frame
2018-02-20 01:11:40 +10:00
Stenzek
c1b39ecc58
BPFunctions: Move upscaling of scissor rect to VideoCommon
2018-02-20 00:49:32 +10:00
Stenzek
5359396099
BPFunctions: Move GX viewport conversion to VideoCommon
2018-02-20 00:49:32 +10:00
Stenzek
7c517226ed
Vulkan: Remove redundant YUYV conversion shaders
...
These are no longer used as of hybrid XFB.
2018-02-14 15:26:35 +10:00
Stenzek
84b990faa0
VideoConfig: Remove bForceCopyToRam field
...
It's the inverse of supports-copy-to-vram.
2018-02-11 15:29:37 +10:00
Stenzek
6490c2b86b
OGL: Use explicit flush instead of GL_SYNC_FLUSH_COMMANDS_BIT
2018-02-09 01:25:14 +10:00
Stenzek
4b96db8fc9
OGL: Don't leave staging texture buffer bound after mapping
...
This could cause glReadPixels() calls which assume no buffer is bound
(e.g. CPU EFB access) to fail. The problem was limited to devices which
don't support persistent mapping, as the map path is not otherwise.
2018-02-09 01:15:27 +10:00
Anthony
096131c908
Merge pull request #6334 from stenzek/startup
...
Video Backend Initialization/Core Boot Improvements
2018-02-07 23:35:54 -08:00
Anthony
4636230f5a
Merge pull request #6333 from stenzek/vulkan-transition
...
Vulkan: Fix invalid stage mask in layout transitions
2018-02-07 23:32:05 -08:00
Greg V
be716a680f
Do not link to libusbhid on FreeBSD/NetBSD
...
Both libusbhid (system library) and libhidapi (3rd party library)
provide a function called hid_init. Dolphin was being linked to both.
The WiimoteScannerHidapi constructor was calling hid_init without
arguments. libusbhid's hid_init expects one argument (a file path).
It was being called as if it was defined without arguments, which
resulted in a garbage path being passed in, and because of that,
the Qt GUI was failing to launch with the following error:
'dolphin-emu-qt2: @ : No such file or directory'
2018-02-05 00:46:59 +03:00
Stenzek
260d5b7aa7
BPMemory: Handle fog configuration where both A and C are infinity/NaN
...
The console appears to behave against standard IEEE754 specification
here, in particular around how NaNs are handled. NaNs appear to have no
effect on the result, and are treated the same as positive or negative
infinity, based on the sign bit.
However, when the result would be NaN (inf - inf, or (-inf) - (-inf)),
this results in a completely fogged color, or unfogged color
respectively. We handle this by returning a constant zero for the A
varaible, and positive or negative infinity for C depending on the sign
bits of the A and C registers. This ensures that no NaN value is passed
to the GPU in the first place, and that the result of the fog
calculation cannot be NaN.
2018-02-01 17:40:39 +10:00
Stenzek
fe5150cc31
Merge pull request #6303 from TraceBullet/auto-adjust-window-size
...
Fix Auto-Adjust Window Size option making the window too large
2018-01-29 17:28:44 +10:00
Stenzek
c790077c13
VideoBackend: Remove PeekMessages method
...
The video thread and backend no longer create any windows, therefore
there will never be any messages dispatched to their thread.
2018-01-27 13:53:55 +10:00
Stenzek
d96e8c9d76
VideoBackends: Combine Initialize/Prepare and Cleanup/Shutdown methods
...
Also allows the work previously done in Prepare to return a failure
status.
2018-01-27 13:53:55 +10:00
TraceBullet
ab6f932347
Fix Auto-Adjust Window Size option making the window too large
2018-01-26 10:47:19 -05:00
Stenzek
81ae88d2d5
AbstractTexture: Fix crash in Vulkan backend when freeing texture
2018-01-26 19:12:11 +10:00
Stenzek
fd39103c73
Vulkan: Fix invalid stage mask in layout transitions
2018-01-26 12:33:24 +10:00
Stenzek
47f453d7aa
Vulkan: Fix waiting on non-existant fence when reading back
2018-01-26 12:33:24 +10:00
Stenzek
38e0b6e2ab
AbstractTexture: Move Bind() method to Renderer
...
This makes state tracking simpler, and enables easier porting to command
lists later on.
2018-01-22 13:22:09 +10:00
Stenzek
4997fbce44
Vulkan: Fix possible mismatch between EFB framebuffer and render pass
...
This could happen when changing MSAA settings or internal resolution at
runtime.
2018-01-11 16:02:31 +10:00
Stenzek
0525726338
Vulkan: Move pipeline barrier outside render pass for EFB peeks
2018-01-11 15:36:01 +10:00
Stenzek
48a8063cd5
Vulkan: Fix FramebufferManagerBase::m_EFBLayers being set out-of-range
2018-01-11 15:30:27 +10:00
Stenzek
173a33886c
Vulkan: Move render pass management to ObjectCache
2018-01-11 15:21:34 +10:00
Stenzek
0e50b2c9f2
Vulkan: Add missing layout transition when resolving MSAA depth buffers
2018-01-11 15:21:33 +10:00
Jonathan Hamilton
c709f3c2d1
Standardise some enums from ALL_CAPS to CamelCase
2018-01-05 10:03:58 -08:00
Jonathan Hamilton
8d68adcaf3
Workaround qualcomm driver bug
...
It seems it doesn't like modifying inout variables in place - so instead
use a temporary for ocol0/ocol1 and only write them once at the end of
the shader
2018-01-05 09:56:46 -08:00
Jonathan Hamilton
29a9ed043b
Implement dual-source blending in shader
...
For some GLES drivers that don't support dual-source blending, but do
support GL_EXT_shader_framebuffer_fetch, this might be useful.
2018-01-05 09:56:46 -08:00
Stenzek
5f5aca7870
OGL: Fix incorrect usage of glGetTextureSubImage
...
Was causing issues with texture dumping on newer drivers.
2017-12-10 15:31:14 +10:00
degasus
02dd062518
VideoCommon: Drop now unused efb2tex matrix generation.
2017-12-06 09:30:03 +01:00
Stenzek
e0ffce2785
D3D: Use VideoCommon EFB-to-texture shaders
2017-12-06 03:33:50 +10:00
Lioncash
050440fd5b
OGL/TextureConverter: Remove unnecessary using declaration
2017-12-03 18:51:22 -05:00
Lioncash
93e85f9a7c
OGL/TextureConverter: Resolve -Wmissing-variable-declaration warnings
2017-12-03 18:51:17 -05:00
JosJuice
f68956a614
Merge pull request #6232 from lioncash/d3d-vert-mgr
...
D3D/VertexManager: Add missing includes
2017-12-03 09:24:23 +01:00
Lioncash
6ca85dbf0a
VKTexture: Add missing override specifier to the other ScaleRectangeFromTexture() prototype
2017-12-02 20:20:13 -05:00
Lioncash
c7bc16811c
VKTexture: Remove unimplemented ScaleRectangleFromTexture() prototype
2017-12-02 20:15:32 -05:00
Lioncash
b0fadbb5de
D3D/VertexManager: Add missing includes
...
Gets rid of reliance on indirect includes
2017-12-02 20:09:33 -05:00
Léo Lam
d95177526f
VideoBackends: Fix -Wswitch warnings
2017-12-02 21:52:07 +01:00
degasus
e2a9ee384f
VideoCommon: Rename TextureConversionShader namespace.
2017-12-02 15:17:39 +01:00
degasus
e8febd0cef
VideoCommon: Create a namespace for TextureConversionShaderGen.
2017-12-02 15:17:39 +01:00
Markus Wick
491c10ec96
VideoBackends: Use VideoCommon shader generators for efb2tex copies.
...
This will generate one shader per copy format. For now, it is the same
shader with the colmat hard coded. So it should already improve the GPU
performance a bit, but a rewrite of the shader generator is suggested.
Half of the patch is done by linkmauve1:
VideoCommon: Reorganise the shader writes.
2017-12-02 15:17:39 +01:00
Lioncash
1e7096dd27
D3DBase: Mark file-scope variables as internally linked where applicable
2017-11-30 23:46:46 -05:00
Stenzek
cd68b3606c
Merge pull request #6193 from stenzek/readbacks
...
Abstract Staging Textures - VideoCommon interface for texture readbacks/uploads
2017-12-01 14:24:06 +10:00
Stenzek
cf1f975148
Vulkan: Fix headless framedumping without USE_X11 set
2017-11-23 17:00:32 +10:00
Stenzek
32125cf181
OGL: Fix headless frame dumping
...
Also skips swapping the window system buffers in headless mode, as there
may not be a surface which can be swapped in the first place. Instead,
we call glFlush() at the end of a frame in this case.
2017-11-23 16:53:55 +10:00
Stenzek
ab44536a3c
OGL: Update the window size after swapping buffers, not before
...
Prevents us from rendering beyond the viewport bounds.
2017-11-23 16:09:59 +10:00
Stenzek
7f217a8bb2
Vulkan: Drop StagingTexture2D class as it is now duplicated functionality
2017-11-22 18:49:33 +10:00
Stenzek
db1d9de933
AbstractTexture: Drop slow map readback path
2017-11-22 18:49:33 +10:00
Stenzek
6577365851
VideoCommon: Re-implement asynchronous frame dumping
...
This was lost as a result of hybrid XFB, now it is back, and ~10%
faster in very brief testing.
2017-11-22 18:49:33 +10:00
Stenzek
752dd4761d
D3D: Use new readback methods for EFB2RAM
2017-11-22 18:47:04 +10:00
Stenzek
9da9f26b90
OGL: Use new readback methods for EFB2RAM
2017-11-22 18:47:04 +10:00
Stenzek
59517318d6
Vulkan: Use new readback methods for texture encoding
2017-11-22 18:47:04 +10:00
Stenzek
c2cc128f1b
AbstractTexture: Implement Save using new common methods
2017-11-22 18:47:04 +10:00
Stenzek
56afebeb44
AbstractTexture: Seperate CopyRectangleFromTexture to two methods
...
ScaleRectangleFromTexture, which does a draw, and
CopyRectangleFromTexture, which where possible, does a bit-for-bit copy.
2017-11-22 18:47:04 +10:00
Stenzek
f43d85921d
VideoBackends: Add AbstractStagingTexture class
...
Can be used for asynchronous readback or upload of textures.
2017-11-22 18:47:04 +10:00
Stenzek
a584ccc7d8
AbstractTexture: Support BGRA8 formats
...
Used for some driver's swap chains, and EFB to RAM.
2017-11-22 18:47:04 +10:00
Stenzek
49a9c33bd7
VideoCommon: Move abstract texture creation function to Renderer
2017-11-22 18:47:04 +10:00
Stenzek
5860c97144
D3D: Move device release from Renderer destructor to shutdown
...
Necessary if we wish to have GPU objects in our base class, as otherwise
the device will be released before the objects.
2017-11-22 18:47:04 +10:00
Stenzek
c5a89b6483
D3D: Remove BeginFrame/EndFrame
...
These functions did not do anything anyway. There is also no need to
present the backbuffer when shutting down.
2017-11-22 18:47:04 +10:00
Stenzek
d9400f708a
D3D: Move remaining static variables from Render.cpp to Renderer class
2017-11-22 18:47:04 +10:00
Stenzek
798ec96e14
D3D: Make state cache part of Renderer and not static
2017-11-22 18:17:07 +10:00
Leo Lam
73a67aa413
Merge pull request #6204 from stenzek/downscaled-screenshots
...
Frame Dumping: Fix window-size framedumping
2017-11-22 07:53:23 +01:00
Stenzek
efb9759862
LightingShaderGen: Always calculate lighting for both color channels
...
Cel-damage uses the color from the lighting stage of the vertex pipeline
as texture coordinates, but sets numColorChans to zero.
We now calculate the colors in all cases, but override the color before
writing it from the vertex shader if numColorChans is set to a lower value.
2017-11-22 01:52:18 +10:00
Stenzek
39559f6358
VideoConfig: Remove bSupportsInternalResolutionFrameDumps
...
Field is unused as of Hybrid XFB.
2017-11-21 17:19:43 +10:00
Lioncash
d6f10fdc15
D3DUtil: Remove unused defines
2017-11-19 12:14:18 -05:00
Lioncash
01a92af014
D3DUtil: Make file-scope variables internally linked where applicable
...
All file scope variables are able to be made internally linked.
CD3DFont is essentially used as an extension to the utility interface, so
this is able to be made internal as well, removing a global from
external view.
2017-11-19 12:12:39 -05:00
Leo Lam
80bcc0d58d
Merge pull request #6186 from lioncash/enum-class
...
VideoConfig: Make AspectMode and StereoMode enum classes
2017-11-19 15:08:16 +01:00
Markus Wick
40ed0e4251
Merge pull request #6198 from lioncash/cmake
...
D3D: Remove non-existent files from CMakeLists.txt
2017-11-19 10:41:32 +01:00
Lioncash
364eaadfe5
VideoBackends: Remove header inclusions made unnecessary with Hybrid XFB
...
Just some inclusions that weren't removed in the initial Hybrid XFB PR.
2017-11-19 00:53:10 -05:00
Lioncash
2ef8ded8ce
D3D: Remove non-existent files from CMakeLists.txt
...
Just a leftover that was missed in the Hybrid XFB PR.
2017-11-19 00:29:23 -05:00
Lioncash
5337e58284
VideoConfig: Make StereoMode an enum class
...
Makes for more strongly-typed identifiers (and doesn't pollute
surrounding namespaces)
2017-11-18 23:19:53 -05:00
Lioncash
10697bcbe3
VideoConfig: Make AspectMode an enum class
...
Makes for more strongly-typed identifiers (and doesn't pollute
surrounding namespaces)
2017-11-18 23:17:56 -05:00
iwubcode
bf7db3f888
Software Backend: Remove reinterpret_cast which violates the strict aliasing rule
2017-11-17 22:11:33 -06:00
iwubcode
1a1c3560ce
Software Backend: Rename 'copy_region' to 'CopyRegion'
2017-11-17 22:11:33 -06:00
iwubcode
0f7f4ccaf9
Software Backend: allow screenshots/video to be taken with valid data
2017-11-17 22:11:33 -06:00
iwubcode
7248dd47d5
Hybrid XFB: Fix lint errors
2017-11-17 22:11:32 -06:00
iwubcode
4964fc87ae
Video Backends: Remove the right of the xfb region for games where the
...
VI stride does not match the VI width
2017-11-17 22:11:32 -06:00
iwubcode
53684701fa
HybridXFB: Fix lint errors
2017-11-17 22:11:31 -06:00
iwubcode
1090549552
Software Backend: Force EFB/XFB to copy to ram
2017-11-17 22:11:31 -06:00
iwubcode
6e686f6ea1
Software Backend: Fix xfb output and add vertical scaling support
2017-11-17 22:11:31 -06:00
iwubcode
76b775d5be
Video Common: Add XFB decoding via the GPU
2017-11-17 22:11:30 -06:00
iwubcode
4d13f69dc1
Remove TODOs
2017-11-17 22:11:29 -06:00
iwubcode
33bc286baa
Remove old XFB logic
2017-11-17 22:11:29 -06:00
iwubcode
b285188de1
Video Backends: Implement vertical scaling for xfb copies. This fixes the
...
display of PAL games that run in 50hz mode.
2017-11-17 22:11:29 -06:00
iwubcode
2cd9565b18
Add an additional flag fo 'XFB Copy'
2017-11-17 22:11:29 -06:00