aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
AgeCommit message (Collapse)Author
2020-05-19renderer_opengl: Add assembly program code pathsReinUsesLisp
Add code required to use OpenGL assembly programs based on NV_gpu_program5. Decompilation for ARB programs is intended to be added in a follow up commit. This does **not** include ARB decompilation and it's not in an usable state. The intention behind assembly programs is to reduce shader stutter significantly on drivers supporting NV_gpu_program5 (and other required extensions). Currently only Nvidia's proprietary driver supports these extensions. Add a UI option hidden for now to avoid people enabling this option accidentally. This code path has some limitations that OpenGL compatibility doesn't have: - NV_shader_storage_buffer_object is limited to 16 entries for a single OpenGL context state (I don't know if this is an intended limitation, an specification issue or I am missing something). Currently causes issues on The Legend of Zelda: Link's Awakening. - NV_parameter_buffer_object can't bind buffers using an offset different to zero. The used workaround is to copy to a temporary buffer (this doesn't happen often so it's not an issue). On the other hand, it has the following advantages: - Shaders build a lot faster. - We have control over how floating point rounding is done over individual instructions (SPIR-V on Vulkan can't do this). - Operations on shared memory can be unsigned and signed. - Transform feedbacks are dynamic state (not yet implemented). - Parameter buffers (uniform buffers) are per stage, matching NVN and hardware's behavior. - The API to bind and create assembly programs makes sense, unlike ARB_separate_shader_objects.
2020-05-18maxwell_to_vk: Add format B8G8R8A8_SRGBMorph
Add format B8G8R8A8_SRGB and add Attachable capability for B8G8R8A8_UNORM Used by Bravely Default II
2020-05-17OpenGL: Enable Debug Context and Synchronous debugging when graphics ↵Fernando Sahmkow
debugging is enabled. This commit aims to help easing debugging of driver crashes without having to modify existing code.
2020-05-16DmaPusher: Remove dead code in stepDavid Marcec
2020-05-15vk_rasterizer: Match OpenGL's FlushAndInvalidate behaviorReinUsesLisp
Match OpenGL's behavior. This can fix or simplify bisecting issues on Vulkan.
2020-05-13Merge pull request #3899 from ReinUsesLisp/float-comparisonsbunnei
shader_ir: Add separate instructions for ordered and unordered comparisons and fix NE on GLSL
2020-05-13vk_rasterizer: Implement constant attributesReinUsesLisp
Constant attributes (in OpenGL known disabled attributes) are not supported on Vulkan, even with extensions. To emulate this behavior we return zero on reads from disabled vertex attributes in shader code. This has no caching cost because attribute formats are not dynamic state on Vulkan and we have to store it in the pipeline cache anyway. - Fixes Animal Crossing: New Horizons terrain borders
2020-05-13vk_rasterizer: Remove buffer check in attribute selectionReinUsesLisp
This was a left over from OpenGL when disabled buffers where not properly emulated. We no longer have to assert this as it is checked in vertex buffer initialization.
2020-05-11Merge pull request #3816 from ReinUsesLisp/vk-rasterizer-enablebunnei
vk_graphics_pipeline: Implement rasterizer_enable on Vulkan
2020-05-10gl_shader_decompiler: Properly emulate NaN behaviour on NEReinUsesLisp
"Not equal" operators on GLSL seem to behave as unordered when we expect an ordered comparison. Manually emulate this checking for LGE values (numbers, not-NaNs).
2020-05-09RasterizerCache: Correct documentation.Fernando Sahmkow
2020-05-09VkPipelineCache: Use a null shader on invalid address.Fernando Sahmkow
2020-05-09VideoCore: Use SyncGuestMemory mechanism for Shader/Pipeline Cache invalidation.Fernando Sahmkow
2020-05-09Merge pull request #3839 from Morph1984/r8g8uiRodrigo Locatti
texture: Implement R8G8UI
2020-05-09shader_ir: Separate float-point comparisons in ordered and unorderedReinUsesLisp
This allows us to use native SPIR-V instructions without having to manually check for NAN.
2020-05-09Merge pull request #3842 from makigumo/maxwell_to_vk_vertexattribute_signed_intbunnei
maxwell_to_vk: implement missing signed int formats
2020-05-08Merge pull request #3885 from ReinUsesLisp/viewport-swizzlesbunnei
video_core: Implement viewport swizzles with NV_viewport_swizzle
2020-05-07Merge pull request #3884 from ReinUsesLisp/border-colorsbunnei
vk_sampler_cache: Use VK_EXT_custom_border_color when available
2020-05-05Merge pull request #3815 from FernandoS27/command-list-2bunnei
GPU: More optimizations to GPU Command List Processing and DMA Copy Optimizations
2020-05-05Update src/video_core/gpu.cppbunnei
Co-authored-by: David <25727384+ogniK5377@users.noreply.github.com>
2020-05-05Update src/video_core/gpu.cppbunnei
Co-authored-by: David <25727384+ogniK5377@users.noreply.github.com>
2020-05-04vk_sampler_cache: Use VK_EXT_custom_border_color when availableReinUsesLisp
This should fix grass interactions on Breath of the Wild on Vulkan. It is currently untested against validation layers. Nvidia's Windows 443.09 beta driver or Linux 440.66.12 is required for now.
2020-05-04vk_graphics_pipeline: Implement viewport swizzles with NV_viewport_swizzleReinUsesLisp
2020-05-04gl_rasterizer: Implement viewport swizzles with NV_viewport_swizzleReinUsesLisp
2020-05-04maxwell_3d: Add viewport swizzlesReinUsesLisp
2020-05-03Merge pull request #3808 from ReinUsesLisp/wait-for-idlebunnei
{maxwell_3d,buffer_cache}: Implement memory barriers using 3D registers
2020-05-02Merge pull request #3732 from lioncash/headerbunnei
vulkan: Remove unnecessary includes
2020-05-02Merge pull request #3809 from ReinUsesLisp/empty-indexbunnei
vk_rasterizer: Skip index buffer setup when vertices are zero
2020-05-02vk_graphics_pipeline: Implement rasterizer_enable on VulkanReinUsesLisp
We can simply enable rasterizer discard matching the current pipeline key.
2020-05-02Merge pull request #3693 from ReinUsesLisp/clean-samplersbunnei
shader/texture: Support multiple unknown sampler properties
2020-05-01fixed_pipeline_state: explicitly use template keyword after 1f345ebe3a55Jan Beich
In file included from src/video_core/renderer_opengl/renderer_opengl.cpp:25: In file included from src/./video_core/renderer_opengl/gl_rasterizer.h:26: In file included from src/./video_core/renderer_opengl/gl_fence_manager.h:11: src/./video_core/fence_manager.h:91:32: error: use 'template' keyword to treat 'Write' as a dependent template name memory_manager.Write<u32>(current_fence->GetAddress(), current_fence->GetPayload()); ^ template src/./video_core/fence_manager.h:137:32: error: use 'template' keyword to treat 'Write' as a dependent template name memory_manager.Write<u32>(current_fence->GetAddress(), current_fence->GetPayload()); ^ template
2020-04-30maxwell_to_vk: implement missing signed int formatsDan
2020-04-30texture: Implement R8G8UIMorph
- Used by The Walking Dead: The Final Season
2020-04-30Merge pull request #3807 from ReinUsesLisp/fix-depth-clampbunnei
maxwell_3d: Fix depth clamping register
2020-04-30Merge pull request #3799 from ReinUsesLisp/iadd-ccbunnei
shader: Implement P2R CC, IADD Rd.CC and IADD.X
2020-04-30Merge pull request #3805 from ReinUsesLisp/preserve-contentsbunnei
texture_cache: Reintroduce preserve_contents accurately
2020-04-30Merge pull request #3788 from FernandoS27/revertbunnei
Revert: shader_decode: Fix LD, LDG when track constant buffer.
2020-04-28vulkan: Remove unnecessary includesLioncash
Reduces some header churn and reduces rebuilds when some header internals change. While we're at it we can also resolve a missing include in buffer_cache.
2020-04-28shader/arithmetic_integer: Fix tracking issue in temporaryReinUsesLisp
This temporary is not needed as we mark Rd.CC + IADD.X as unimplemented. It caused issues when tracking global buffers.
2020-04-28Clang Format and Documentation.Fernando Sahmkow
2020-04-28MaxwellDMA: Optimize micro copies.Fernando Sahmkow
2020-04-28Merge pull request #3784 from ReinUsesLisp/shader-memory-utilbunnei
shader/memory_util: Deduplicate code
2020-04-28vk_rasterizer: Skip index buffer setup when vertices are zeroReinUsesLisp
Xenoblade 2 invokes a draw call with zero vertices. This is likely due to indirect drawing (glDrawArraysIndirect). This causes a crash in the staging buffer pool when trying to create a buffer with a size of zero. To workaround this, skip index buffer setup entirely when the number of indices is zero.
2020-04-28{maxwell_3d,buffer_cache}: Implement memory barriers using 3D registersReinUsesLisp
Drop MemoryBarrier from the buffer cache and use Maxwell3D's register WaitForIdle. To implement this on OpenGL we just call glMemoryBarrier with the necessary bits. Vulkan lacks this synchronization primitive, so we set an event and immediately wait for it. This is not a pretty solution, but it's what Vulkan can do without submitting the current command buffer to the queue (which ends up being more expensive on the CPU).
2020-04-27VideoCore/GPU: Delegate subchannel engines to the dma pusher.Fernando Sahmkow
2020-04-27VideoCore/Engines: Refactor Engines CallMethod.Fernando Sahmkow
2020-04-27maxwell_3d: Fix depth clamping registerReinUsesLisp
Using deko3d as reference: https://github.com/devkitPro/deko3d/blob/4e47ba0013552e592a86ab7a2510d1e7dadf236a/source/maxwell/gpu_3d_state.cpp#L42 We were using bits 3 and 4 to determine depth clamping, but these are the same both enabled and disabled: state->depthClampEnable ? 0x101A : 0x181D The same happens on Nvidia's OpenGL driver, where they do something like this (default capabilities, GL 4.5 compatibility): (state & DEPTH_CLAMP) != 0 ? 0x201a : 0x281c There's always a difference between the first bits in this register, but bit 11 is consistently disabled on both deko3d/NVN and OpenGL. This commit changes yuzu's behaviour to use bit 11 to determine depth clamping. - Fixes depth issues on Super Mario Odyssey's intro.
2020-04-27Merge pull request #3766 from ReinUsesLisp/renderpass-cache-keyFernando Sahmkow
vk_renderpass_cache: Pack renderpass cache key and unify keys
2020-04-27Merge pull request #3756 from ReinUsesLisp/integrated-devicesFernando Sahmkow
vk_memory_manager: Remove unified memory model flag
2020-04-27Merge pull request #3742 from FernandoS27/command-listbunnei
Optimize GPU Command Lists and Introduce Fast GPU Time Option