Stenzek
271f1af8c9
Vulkan: Fix crash on shutdown with Virtual XFB enabled
2017-10-18 22:11:59 +10:00
Stenzek
edb5f855c2
VideoConfig: Prevent race condition on g_Config when refreshing
...
There was a race condition between the video thread and the host thread,
if corrections need to be made by VerifyValidity(). Briefly, the config
will contain invalid values. Instead, pause emulation first, which will
flush the video thread, update the config and correct it, then resume
emulation, after which the video thread will detect the config has
changed and act accordingly.
2017-10-10 23:56:33 +10:00
Stenzek
4301b8538d
Vulkan: Only use oldSwapchain in response to VK_ERROR_OUT_OF_DATE_KHR
...
Seems to be required on the latest NV driver, otherwise the presented
images are never shown.
2017-10-10 23:21:40 +10:00
Stenzek
cdf34a79f7
Vulkan: Set a flag to resize the swap chain when presenting fails
...
Drivers can return VK_ERROR_OUT_OF_DATE_KHR from vkQueuePresentKHR, and
we should resize the image in this case, as well as when getting it back
from vkAcquireNextImageKHR.
2017-10-10 23:21:40 +10:00
Stenzek
80593f502e
Vulkan: Fix bug where command buffer wouldn't be started after resize
2017-10-10 23:21:40 +10:00
Stenzek
24ddea04ce
VideoBackends: Move SamplerState to common
2017-09-11 20:01:54 +10:00
Stenzek
340aabbb06
VideoCommon: Add helpers for generating common render states
2017-09-11 20:01:52 +10:00
Stenzek
b7a099814a
Vulkan: Clear contents of EFB convert framebuffer at create time
...
Fixes a validation layer warning when converting pixel formats.
2017-09-11 20:01:50 +10:00
Stenzek
e584090822
Vulkan: Fix interface mismatch in RGB->YUYV shader
2017-09-11 20:01:48 +10:00
Stenzek
836b9b9acb
Renderer: Move cull mode to a rasterization state object
...
Also moves logic for primitive handling to VideoCommon.
2017-09-11 20:01:45 +10:00
Stenzek
2869c570f1
Renderer: Move depth state to VideoCommon and seperate from bpmem
2017-09-11 19:40:26 +10:00
Stenzek
4d36f0cc87
Bitfield: Cast value to storage type in assignment operator
...
This allows us to use enum classes in bitfields.
2017-09-11 19:40:25 +10:00
Stenzek
9e1c09e347
StreamBuffer: Don't wait on fences twice when reserve > commit
...
If we allocate a large amount of memory (A), commit a smaller amount,
then allocate memory smaller than allocation A, we will have already
waited for these fences in A, but not used the space. In this case,
don't set m_free_iterator to a position before that which we know is
safe to use, which would result in waiting on the same fence(s) next
time.
2017-09-09 13:26:30 +10:00
Stenzek
0de31d87bd
VideoConfigDiag: Fix bug where postprocessing shader wasn't saved to INI
2017-09-08 01:19:26 +10:00
Stenzek
134daf3b00
Vulkan: Extend the NVIDIA MSAA bug to render-pass based clears
...
Calling vkCmdClearAttachments with a partial rect, or specifying a
render area in a render pass with the load op set to clear can cause the
GPU to lock up, or raise a bounds violation. This only occurs on MSAA
framebuffers, and it seems when there are multiple clears in a single
command buffer. Worked around by back to the slow path (drawing quads)
when MSAA is enabled.
2017-09-07 17:05:43 +10:00
Stenzek
b573319f8f
D3D: Fix shader compile error with logicop and alpha test enabled
2017-09-07 11:48:01 +10:00
Stenzek
c15ea2f1ed
D3D: Fix crash if shaders fail to compile
2017-09-07 11:45:43 +10:00
Stenzek
84f8ebd95f
VideoBackends: Clear uid bits that are unused for the current backend
...
Currently, this is only the logic op bit, but this will be extended to
the framebuffer fetch/blend modes. In the future, when/if we move to
VideoCommon pipelines, this state will be part of the pipeline UID
anyway, and we can mask it out in the backend by using a two-level map,
so the shaders/programs are shared.
2017-09-05 23:49:42 +10:00
Stenzek
6d32cce2f5
ShaderGen: Output uint when logic op is enabled for D3D ubershaders
2017-09-05 23:49:42 +10:00
Stenzek
90051536bf
D3D: Support logic op through integer render target view
...
This brings D3D to parity with OpenGL and Vulkan.
2017-09-04 10:07:36 +10:00
Stenzek
c9d649d27c
D3D: Use Direct3D 11.1 where supported
2017-09-03 16:33:47 +10:00
Stenzek
0622979d3b
ShaderGen: Support writing integer colors when logic op is enabled
...
This is required for D3D to support logic op.
2017-09-03 16:33:25 +10:00
Stenzek
254160691a
Revert "Vulkan: Use VK_NV_glsl extension where available, and skip glslang"
...
This reverts commit d23fd17e1a .
Dynamic sampler indexing is broken in VK_NV_glsl as of 385.41. The
performance gap doesn't seem to be as wide with the updated driver, so
to save maintaining two code paths, it's easier to just drop the
extension support completely.
2017-09-03 15:31:19 +10:00
Stenzek
3dd675e613
Renderer: Change SetBlendState to accept a BlendingState
...
This decouples the state generation (from the emulated GPU) from the
management of internal backend state.
2017-09-03 14:14:54 +10:00
Stenzek
22b8cbae35
RenderBase: Drop SetColorMask and SetLogicOpMode
...
These are now incorporated into the blend state for all backends.
2017-09-03 14:14:54 +10:00
Stenzek
5c9bc8b79c
D3D11: Use blending state from VideoCommon
2017-09-03 14:14:54 +10:00
Stenzek
c90b0bf532
D3D11: Create debug device when validation layer is enabled in options
2017-09-03 14:14:19 +10:00
Stenzek
21b3cd4759
OGL: Fix EFB pokes using incorrect color/depth
2017-08-27 11:55:24 +10:00
Stenzek
a7f217c3f4
UberShaderPixel: Fix sampling of EFB copies in stereo modes
2017-08-20 18:08:24 +10:00
Stenzek
f8a64ab1fc
UberShaderPixel: Use an if trees instead of switch statements on GL
...
The switch statements in these functions appear to get transformed into
an if..else chain on NVIDIA's OpenGL/Vulkan drivers, resulting in lower
performance than the D3D counterparts. Transforming the switch into a
binary tree of ifs can increase performance by up to 20%.
2017-08-12 00:16:19 +10:00
Stenzek
6d91c1b079
ProgramShaderCache: Call glTexImage3D after glTexParameter
...
Was missed before merge.
2017-08-05 18:18:30 +10:00
Stenzek
7f88711186
Vulkan: Add a driver bug for NV when MSAA is enabled
...
This causes the card to lock up when vkCmdClearAttachments is called,
when multisampling is enabled. Seems to be restricted to Maxwell and
newer?
2017-08-03 17:40:15 +10:00
Stenzek
fee08cf63d
Vulkan: Use optimal tiling for dummy texture
...
Fixes a crash on some NVIDIA drivers. Apparently calling
vkCmdClearColorImage on an image with linear tiling causes the
GPU/driver to lock up.
2017-08-02 21:33:10 +10:00
Stenzek
287859c5e1
GLInterface: Support surfaceless contexts on GLX
2017-08-02 20:12:28 +10:00
Stenzek
67997529b8
ProgramShaderCache: Create a FBO for shared contexts to draw into
...
This way it allows us to use surfaceless contexts in EGL/GLX. It also
ensures that the shared context shares a similar setup to the main
context's framebuffer, potentially reducing the number of variants a
driver needs to generate.
2017-08-02 20:12:28 +10:00
Stenzek
57f34d748b
D3DBase: Raise error if d3dcompiler_47.dll cannot be loaded
...
Previously we were falling back to an earlier version of the compiler.
The older version cannot compile our ubershaders without various
graphical issues.
2017-08-02 19:54:55 +10:00
Stenzek
63305e9173
HiresTextures: Support loading BC7 (BPTC) from DDS files
2017-08-01 11:59:38 +10:00
Stenzek
d18988f41e
GLExtensions: Add GL_ARB_texture_compression_bptc
2017-08-01 11:58:57 +10:00
Stenzek
134b0ca940
Android: Fix ubershader hybrid setting
2017-08-01 00:38:26 +10:00
Stenzek
852e30bb8c
Ubershaders: Fix 6-bit color truncation not being applied
2017-08-01 00:01:09 +10:00
Stenzek
d62dcd397d
VideoConfig: Drop force vertex/pixel ubershader settings
...
This was mainly included for debugging, but could end up being confusing
for users, as well as polluting the GL program cache with a mix of uber
and specialized shaders if the option was changed.
2017-07-31 23:21:38 +10:00
Stenzek
b154edb4fb
VideoCommon: Move WM_USER_CREATE message to after backend initialization
...
Fixes the mouse cursor being left visible after ubershader
precompilation when the hide option is checked.
2017-07-30 17:43:59 +10:00
Stenzek
d54ca2a16a
PixelShaderGen: Don't include host early z support in UID
...
Disable it at shader generation time instead. This way the UIDs are
sharable.
2017-07-30 17:43:59 +10:00
Stenzek
e968c191ff
Ubershaders: Support per-pixel lighting
2017-07-30 17:43:59 +10:00
Stenzek
c8f31656cb
VideoBackends: Support a different number of threads for precompiling
...
At runtime, we only really want a single shader compiler thread.
However, for initial boots, we can use a higher number to speed things
up.
2017-07-30 17:43:59 +10:00
Stenzek
e17efb1d8d
ShaderGen: Use consistent variable names for texture coordinates
2017-07-30 17:43:59 +10:00
Stenzek
25338c53e0
NativeVertexFormat: Drop unused virtual method SetupVertexPointers
2017-07-30 17:43:59 +10:00
Stenzek
33f6668544
Vulkan: Multithreaded creation of UID pipeline caches
...
Should give a decent speedup to boot time.
2017-07-30 17:43:59 +10:00
Stenzek
81b4ed2a81
Vulkan: Uber shader support
2017-07-30 17:43:59 +10:00
Stenzek
4bf5625895
D3D: Uber shader support
2017-07-30 17:43:59 +10:00
Stenzek
cd502990fa
OGL: Uber shader support
2017-07-30 17:43:59 +10:00
Stenzek
901bf9c257
VideoConfig: Add config options for ubershaders
2017-07-30 17:43:59 +10:00
Stenzek
745d541527
ShaderGen: Implement vertex ubershaders
2017-07-30 17:43:59 +10:00
Stenzek
7d78cf0f6f
ShaderGen: Implement pixel ubershaders
2017-07-30 17:43:59 +10:00
Stenzek
07591e7d5c
PixelShaderGen: Move header generation to seperate function
2017-07-30 17:43:59 +10:00
Stenzek
c783cd2aaf
GeometryShaderGen: Add UID enumeration functions
2017-07-30 17:43:59 +10:00
Stenzek
38c48ff72e
VertexLoaderManager: Add methods to generate "uber" vertex formats
...
These vertex formats enable all attributes. Inactive attributes are set
to offset=0, and the smallest type possible. This "optimization" stops
the NV compiler from generating variants of vertex shaders.
2017-07-30 17:43:59 +10:00
Stenzek
f48ef65bec
XFMemory: Convert several registers to bitfields
2017-07-30 17:43:59 +10:00
Stenzek
0a9574eaa1
VideoCommon: Add AsyncShaderCompiler class implementation
2017-07-30 17:43:59 +10:00
Stenzek
357c55442f
Vulkan: Clear decoding texture before usage
...
Fixes a validation layer warning.
2017-07-30 12:38:50 +10:00
Stenzek
447aeb8f77
EGLInterface: Create shared context with same attributes as main context
2017-07-30 12:38:50 +10:00
Stenzek
aff44684a4
Vulkan: Move shader/pipeline-related methods to ShaderCache
2017-07-30 12:38:49 +10:00
Stenzek
d23fd17e1a
Vulkan: Use VK_NV_glsl extension where available, and skip glslang
...
Seems to produce faster ubershaders, at least.
2017-07-30 12:38:49 +10:00
Stenzek
416afa065c
BitField: Add StartBit() and NumBits() accessors
2017-07-30 12:38:49 +10:00
Stenzek
3e508fc0a2
GLInterface: Support shared contexts on AGL
2017-07-30 12:38:49 +10:00
Stenzek
621287e7eb
VideoCommon: Improve precision of FPS counter
2017-07-30 12:38:48 +10:00
Stenzek
1fccbd5be3
DolphinWX: Add a progress dialog host command
...
Allows feedback from backends to be communicated to the user when
long-running operation are performed (e.g. shader compilation).
2017-07-30 12:38:48 +10:00
Stenzek
7449f1e818
CMake: Use add_compile_options instead of add_definitions for glslang
...
Fixes the warning spam in the build logs.
2017-07-28 22:12:25 +10:00
Stenzek
3ea9d86faa
ShaderGen: Pass host config to shader generation functions
...
Also moves the host config checks to common.
2017-07-20 17:54:33 +10:00
Stenzek
d01b0bf60f
VideoCommon: Move shader cache filename generation to common
2017-07-20 17:46:59 +10:00
Stenzek
7c5bbafdd1
Vulkan: Don't save/load pipeline UID cache when shader cache is disabled
2017-07-20 17:46:59 +10:00
Stenzek
b380f292b4
Vulkan: Reload pipeline cache when relevant host config changes
2017-07-20 17:46:59 +10:00
Stenzek
a8343cc19a
Vulkan: Don't save pipeline cache if shader cache is disabled
...
We still create a pipeline cache object, since that speeds up driver's
creation of pipelines at runtime. However, we should not save it.
2017-07-20 17:46:59 +10:00
Stenzek
d9a3b29a07
Vulkan: Emit input/output locations for EFB poke geometry shader
2017-07-20 17:46:59 +10:00
Stenzek
228ddb8aba
D3D11: Reload shader cache when relevant config changes
2017-07-20 17:46:59 +10:00
Stenzek
62a901508b
OGL: Reload shader cache when relevant video config changes
2017-07-20 17:46:59 +10:00
Stenzek
d1381f5021
VideoConfig: Add host config union
...
Contains all host state that can affect shadergen.
2017-07-20 17:46:59 +10:00
Stenzek
82c27182a8
ShaderGen: Remove host state from shader uids
2017-07-20 17:46:59 +10:00
Stenzek
adebe2239e
TextureConversionShader: Use integer math for truncating EFB format
2017-06-17 12:17:09 +10:00
Stenzek
8a56ef42dc
Vulkan: Fix image layout assertion failing for palette textures
2017-06-13 14:47:09 +10:00
Stenzek
ca55ba6c1d
Vulkan: Transition texture cache entries before usage
2017-06-10 23:52:39 +10:00
Stenzek
8bb6abacf8
Vulkan: Transition EFB/XFB buffers before beginning swap render pass
...
Image layouts shouldn't be changed within a render pass.
2017-06-10 23:52:32 +10:00
Stenzek
cc851c41c1
TextureCache: Move host texture utility functions to VideoCommon
...
The appropriate place for these would be AbstractTexture, once it is
finished.
2017-04-29 13:46:43 +10:00
Stenzek
de348fc952
HiresTextures: Support loading uncompressed .DDS files
...
Will load files with formats RGBA8, RGBX8, BGRA8, BGRX8, RGB8.
2017-04-29 13:46:43 +10:00
Stenzek
20cbef8e9f
HiresTextures: Move the maximum mip level check from DDS to main loader
...
This way that the mip count check occurs on .png and uncombined DDS
textures as well.
2017-04-29 13:46:43 +10:00
Stenzek
a6a13f51c1
HiresTextures: Support DXT10 extended header in DDS loader
2017-04-29 13:46:43 +10:00
Stenzek
8761c8244d
HiresTextures: Load full mipmap chain from DDS files
...
This removes the need for multiple texture files to store the mipmap
chain for a texture. As many mipmaps will be loaded as are present in
the DDS file, and any remaining mipmaps will fall back to the old
behavior.
2017-04-29 13:46:43 +10:00
Stenzek
c53a60f3c3
Vulkan: Support native compressed textures
2017-04-29 13:46:42 +10:00
Stenzek
3f18c5e0f1
D3D12: Support native compressed textures
2017-04-29 13:46:42 +10:00
Stenzek
2d75c2ab10
D3D11: Support native compressed textures
2017-04-29 13:46:42 +10:00
Stenzek
f5d95dcc86
OGL: Use native compressed textures on supported drivers
2017-04-29 00:44:34 +10:00
Stenzek
12bde06dc3
GLExtensions: Add GL_EXT_texture_compression_s3tc
2017-04-29 00:14:23 +10:00
Stenzek
f4b848949c
TextureCache: Support compressed textures and pass pitch/size to upload
...
This also removes an extra copy of the image for custom textures.
2017-04-29 00:14:23 +10:00
Stenzek
bc8a96d713
HiresTextures: Support parsing DDS files directly
...
This leaves DDS textures using DXT1/3/5 compressed in-memory, which can
be passed directly to the backend.
2017-04-29 00:14:23 +10:00
Stenzek
27ae5b8d34
VideoConfigDiag: Move post-processing shader list to post processor
...
The backends don't use this list at all, and since more than one
backend supports post-processing now, it's duplicate code.
2017-04-25 14:27:05 +10:00
Stenzek
417a4ca206
Vulkan: Implement post-processing backend
...
No new features, just parity with OpenGL.
2017-04-25 14:27:02 +10:00
Stenzek
a10e8b1ef5
VideoCommon: Move the blit methods to the backend class
...
The parameter types will be different for each backend currently,
anyway (e.g. textures/render passes/etc).
2017-04-25 14:25:41 +10:00
Stenzek
fd896bd9e0
OGL: Drop BlendingState.dither
...
How GL_DITHER works is implementation-defined, and we handle the
non-blended case in the pixel shader.
2017-04-18 21:55:23 +10:00
Stenzek
ddc5275071
VideoCommon: Drop SetDitherMode()
...
It was a no-op on all backends apart from GL anyhow.
2017-04-18 21:55:22 +10:00
Stenzek
9dc7358395
Vulkan: Use BlendingState from VideoCommon
...
Remove the internal BlendState union. Also fixes Kirby's Return to
Dreamland shadows.
2017-04-18 21:55:22 +10:00