summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
AgeCommit message (Collapse)Author
2017-09-11Renderer: Move cull mode to a rasterization state objectStenzek
Also moves logic for primitive handling to VideoCommon.
2017-09-11Renderer: Move depth state to VideoCommon and seperate from bpmemStenzek
2017-09-10Merge pull request #6045 from lioncash/sw-vertloaderMarkus Wick
SWVertexLoader: Minor cleanup
2017-09-10Merge pull request #6041 from stenzek/streambuffer-fenceMarkus Wick
StreamBuffer: Don't wait on fences twice when reserve > commit
2017-09-09Common: Move version strings to their own headerLioncash
Ideally Common.h wouldn't be a header in the Common library, and instead be renamed to something else, like PlatformCompatibility.h or something, but even then, there's still some things in the header that don't really fall under that label This moves the version strings out to their own version header that doesn't dump a bunch of other unrelated things into scope, like what Common.h was doing. This also places them into the Common namespace, as opposed to letting them sit in the global namespace.
2017-09-09SWVertexLoader: Make SWVertexLoader a final classLioncash
It doesn't make sense to allow extending this class based off the way the VertexLoader API is set up.
2017-09-09SWVertexLoader: Make SetFormat() and ResetBuffer() privateLioncash
SetFormat() is only ever used internally. ResetBuffer() is only used to implement the VertexManagerBase class interface, so there's no need to make it protected.
2017-09-09SWVertexLoader: Remove GetIndexBuffer()Lioncash
It's only ever used in one place internally and is arguably unnecessary.
2017-09-09SWVertexLoader: Normalize class variable namesLioncash
Follows our coding style.
2017-09-09StreamBuffer: Don't wait on fences twice when reserve > commitStenzek
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-07Vulkan: Extend the NVIDIA MSAA bug to render-pass based clearsStenzek
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-07D3D: Fix crash if shaders fail to compileStenzek
2017-09-06Merge pull request #6016 from Armada651/allow-tearingJules Blok
D3DBase: Support the "allow tearing" DXGI flags.
2017-09-06Merge pull request #6012 from stenzek/drop-nv-glslJules Blok
Vulkan: Drop VK_NV_glsl extension support
2017-09-06Merge pull request #6026 from stenzek/d3d-ubershader-logicopStenzek
ShaderGen: Output uint when logic op is enabled for D3D ubershaders
2017-09-06Merge pull request #6025 from spxtr/present_queueStenzek
Vulkan: Use a separate queue for presenting.
2017-09-05D3D: Properly handle dual source blendingiwubcode
2017-09-05Vulkan: Use a separate queue for presenting.spxtr
Before this change, we simply fail if the device does not expose one queue family that supports both graphics and present. Currently this is fine, since devices tend to lay out their queues in this way. NV, for instance, tends to have one queue family for all graphics operations and one more for transfer only. However, it's not a hard requirement, and it is cheap to use a separate queue, so we might as well.
2017-09-05VideoBackends: Clear uid bits that are unused for the current backendStenzek
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-04D3DBase: Support the "allow tearing" DXGI flags.Jules Blok
This makes sure our framerate is unlocked when we disable V-Sync.
2017-09-03Merge pull request #6013 from stenzek/d3d-logic-opAnthony
D3D: Implement logic op support
2017-09-03Merge pull request #5337 from stenzek/d3d-common-blending-stateAnthony
D3D: Use blending state from VideoCommon
2017-09-04D3D: Support logic op through integer render target viewStenzek
This brings D3D to parity with OpenGL and Vulkan.
2017-09-03Merge pull request #6018 from lioncash/constMarkus Wick
Software/Tev: const correctness
2017-09-03Software/Tev: const correctnessLioncash
2017-09-03D3DTexture: Remove unused bindflags D3DTexture2D member variableLioncash
2017-09-03D3DTexture: in-class initialize class members where applicableLioncash
2017-09-03D3DBase: Use the correct version of CreateDXGIFactory.Jules Blok
2017-09-03Merge pull request #5948 from Armada651/d3d-explicit-stereoStenzek
D3DBase: Only use a stereo swapchain if quad-buffering is enabled.
2017-09-03D3D: Use Direct3D 11.1 where supportedStenzek
2017-09-03Revert "Vulkan: Use VK_NV_glsl extension where available, and skip glslang"Stenzek
This reverts commit d23fd17e1a2c7c617731d619020af021a7658e93. 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-03Renderer: Change SetBlendState to accept a BlendingStateStenzek
This decouples the state generation (from the emulated GPU) from the management of internal backend state.
2017-09-03D3D11: Use blending state from VideoCommonStenzek
2017-09-03D3D11: Create debug device when validation layer is enabled in optionsStenzek
2017-09-03Merge pull request #6004 from lioncash/d3dStenzek
D3D: Eliminate redundant ID3D11DeviceChild* casts
2017-09-03Merge pull request #6009 from lioncash/asyncStenzek
AsyncShaderCompiler: Make WorkItem-derived class constructors explicit
2017-09-03Merge pull request #5649 from JonnyH/WIP/disable-vk-clear-renderpassStenzek
Add DriverDetails::BUG to Disable "LoadOp" clear renderpass in vulkan
2017-09-02OGL/VertexManager: Make vertex and index buffer handles privateLioncash
These are only ever read, but not written to outside of the VertexManager class.
2017-09-02VideoBackends: Add the explicit keyword to WorkItem-derived class constructorsLioncash
Prevents implicit conversions
2017-09-02OGL/ProgramShaderCache: Remove unnecessary virtual keywordLioncash
This is superfluous, considering the override keyword is present.
2017-09-02Parse IMGTEC's GL_VERSION string formatJonathan Hamilton
ImgTec's driver uses a major.minor@changeID versioning system This is packed into a double so "1.9@4850625" becomes "109.4850625" The next release brnach is expected to be 1.10, hence the need for 2 digits for the branch minor. The changeID should be unique for each build, but is shared over all branches, so only makes sense to compare withing a branch. It's likely branch 'major' versions will be used for major hardware revisions, and the drivers for both maintained in parallel. Thus it may not make sense to compare versions between different major verisons - if/when this happens we can hook up a DriverDetails::Family as needed.
2017-09-02D3D: Eliminate redundant ID3D11DeviceChild* castsLioncash
2017-08-28Add Bug to Disable "LoadOp" clear renderpass in vulkanJonathan Hamilton
This optimisation doesn't work on PowerVR's Vulkan implementation. We (incorrectly) disallow Framebuffer objects to be used with a different load or store op than that which they were created with, despite the spec allowing such. This fixes the windwaker intro "smearing"
2017-08-27OGL: Fix EFB pokes using incorrect color/depthStenzek
2017-08-23Fix vulkan crash on drivers without atomic load/store supportJonathan Hamilton
This would not allocate a SSBO buffer, but still try to update the descriptor said with a NULL buffer. Which naturally crashed.
2017-08-22Clipper: Copy both color sequences in CopyVertex as opposed to oneLioncash
This is likely an oversight.
2017-08-22SW NativeVertexFormat: Utilize std::array where applicableLioncash
Gets rid of some hardcoded looping bounds, and also simplifies code in some places, sometimes allowing for removal of a loop altogether.
2017-08-22Remove NonCopyableJosJuice
The class NonCopyable is, like the name says, supposed to disallow copying. But should it allow moving? For a long time, NonCopyable used to not allow moving. (It declared a deleted copy constructor and assigment operator without declaring a move constructor and assignment operator, making the compiler implicitly delete the move constructor and assignment operator.) That's fine if the classes that inherit from NonCopyable don't need to be movable or if writing the move constructor and assignment operator by hand is fine, but that's not the case for all classes, as I discovered when I was working on the DirectoryBlob PR. Because of that, I decided to make NonCopyable movable in c7602cc, allowing me to use NonCopyable in DirectoryBlob.h. That was however an unfortunate decision, because some of the classes that inherit from NonCopyable have incorrect behavior when moved by default- generated move constructors and assignment operators, and do not explicitly delete the move constructors and assignment operators, relying on NonCopyable being non-movable. So what can we do about this? There are four solutions that I can think of: 1. Make NonCopyable non-movable and tell DirectoryBlob to suck it. 2. Keep allowing moving NonCopyable, and expect that classes that don't support moving will delete the move constructor and assignment operator manually. Not only is this inconsistent (having classes disallow copying one way and disallow moving another way), but deleting the move constructor and assignment operator manually is too easy to forget compared to how tricky the resulting problems are. 3. Have one "MovableNonCopyable" and one "NonMovableNonCopyable". It works, but it feels rather silly... 4. Don't have a NonCopyable class at all. Considering that deleting the copy constructor and assignment operator only takes two lines of code, I don't see much of a reason to keep NonCopyable. I suppose that there was more of a point in having NonCopyable back in the pre-C++11 days, when it wasn't possible to use "= delete". I decided to go with the fourth one (like the commit title says). The implementation of the commit is fairly straight-forward, though I would like to point out that I skipped adding "= delete" lines for classes whose only reason for being uncopyable is that they contain uncopyable classes like File::IOFile and std::unique_ptr, because the compiler makes such classes uncopyable automatically.
2017-08-20D3DBase: Only use a stereo swapchain if quad-buffering is enabled.Jules Blok
2017-08-14Merge pull request #5478 from stenzek/vulkan-nvidiaAnthony
Vulkan: Don't use vkCmdClearAttachments on NVIDIA with MSAA