aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
AgeCommit message (Collapse)Author
2020-05-26gl_texture_cache: Implement small texture view cache for swizzlesReinUsesLisp
This fixes cases where the texture swizzle was applied twice on the same draw to a texture bound to two different slots.
2020-05-26texture_cache: Implement depth stencil texture swizzlesReinUsesLisp
Stop ignoring image swizzles on depth and stencil images. This doesn't fix a known issue on Xenoblade Chronicles 2 where an OpenGL texture changes swizzles twice before being used. A proper fix would be having a small texture view cache for this like we do on Vulkan.
2020-05-26gl_rasterizer: Port front face flip check from VulkanReinUsesLisp
While Vulkan was assuming we had no negative viewports, OpenGL code was assuming we had them. Port the old code from Vulkan to OpenGL, checking if the first viewport is negative before flipping faces. This is not a complete implementation since we only check for the first viewport to be negative. That said, unless a game is using Vulkan, OpenGL and NVN games should be fine here, and we can always compare with our Vulkan backend to see if there's a difference.
2020-05-26fixed_pipeline_state: Remove unnecessary check for front faces flipReinUsesLisp
The check to flip faces when viewports are negative were a left over from the old OpenGL code. This is not required on Vulkan where we have negative viewports.
2020-05-26Merge pull request #3981 from ReinUsesLisp/barbunnei
shader/other: Implement BAR.SYNC 0x0
2020-05-26Merge pull request #3980 from ReinUsesLisp/red-opbunnei
shader/memory: Implement non-addition operations in RED
2020-05-26gl_shader_manager: Unbind GLSL program when binding a host pipelineReinUsesLisp
Fixes regression in Link's Awakening caused by 420cc13248350ef5c2d19e0b961cb4185cd16a8a
2020-05-25Merge pull request #3978 from ReinUsesLisp/write-rzbunnei
shader_decompiler: Visit source nodes even when they assign to RZ
2020-05-24Merge pull request #3905 from FernandoS27/vulkan-fixbunnei
Correct a series of crashes and intructions on Async GPU and Vulkan Pipeline
2020-05-24Merge pull request #3964 from ReinUsesLisp/arb-integrationbunnei
renderer_opengl: Add assembly program code paths
2020-05-24Merge pull request #3979 from ReinUsesLisp/thread-groupbunnei
shader/other: Implement thread comparisons (NV_shader_thread_group)
2020-05-21shader/other: Implement BAR.SYNC 0x0ReinUsesLisp
Trivially implement this particular case of BAR. Unless games use OpenCL or CUDA barriers, we shouldn't hit any other case here.
2020-05-21shader/memory: Implement non-addition operations in REDReinUsesLisp
Trivially implement these instructions. They are used in Astral Chain.
2020-05-21shader/other: Implement thread comparisons (NV_shader_thread_group)ReinUsesLisp
Hardware S2R special registers match gl_Thread*MaskNV. We can trivially implement these using Nvidia's extension on OpenGL or naively stubbing them with the ARB instructions to match. This might cause issues if the host device warp size doesn't match Nvidia's. That said, this is unlikely on proper shaders. Refer to the attached url for more documentation about these flags. https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_thread_group.txt
2020-05-21shader_decompiler: Visit source nodes even when they assign to RZReinUsesLisp
Some operations like atomicMin were ignored because they returned were being stored to RZ. This operations have a side effect and it was being ignored.
2020-05-21vk_shader_decompiler: Don't assert for void returnsReinUsesLisp
Atomic instructions can be used without returning anything and this is valid code. Remove the assert.
2020-05-21buffer_cache: Remove unused boost headersReinUsesLisp
2020-05-21map_interval: Add interval allocator and drop hackReinUsesLisp
Drop the std::list hack to allocate memory indefinitely. Instead use a custom allocator that keeps references valid until destruction. This allocates fixed chunks of memory and puts pointers in a free list. When an allocation is no longer used put it back to the free list, this doesn't heap allocate because std::vector doesn't change the capacity. If the free list is empty, allocate a new chunk.
2020-05-21buffer_cache: Use boost::container::small_vector for maps in rangeReinUsesLisp
Most overlaps in the buffer cache only contain one mapped address. We can avoid close to all heap allocations once the buffer cache is warmed up by using a small_vector with a stack size of one.
2020-05-21buffer_cache: Use boost::intrusive::set for cachingReinUsesLisp
Instead of using boost::icl::interval_map for caching, use boost::intrusive::set. interval_map is intended as a container where the keys can overlap with one another; we don't need this for caching buffers and a std::set-like data structure that allows us to search with lower_bound is enough.
2020-05-21buffer_cache: Remove shared pointersReinUsesLisp
Removing shared pointers is a first step to be able to use intrusive objects and keep allocations close to one another in memory.
2020-05-21buffer_cache: Minor style changesReinUsesLisp
Minor style changes. Mostly done so I avoid editing it while doing other changes.
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