aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
AgeCommit message (Collapse)Author
2020-06-24buffer_cache: Use buffer methods instead of cache virtual methodsReinUsesLisp
2020-06-24gl_stream_buffer: Use InvalidateBufferData instead unmap and mapReinUsesLisp
Making the stream buffer resident increases GPU usage significantly on some games. This seems to be addressed invalidating the stream buffer with InvalidateBufferData instead of using a Unmap + Map (with invalidation flags).
2020-06-24gl_rasterizer: Use NV_vertex_buffer_unified_memory for vertex buffer robustnessReinUsesLisp
Switch games are allowed to bind less data than what they use in a vertex buffer, the expected behavior here is that these values are read as zero. At the moment of writing this only D3D12, OpenGL and NVN through NV_vertex_buffer_unified_memory support vertex buffer with a size limit. In theory this could be emulated on Vulkan creating a new VkBuffer for each (handle, offset, length) tuple and binding the expected data to it. This is likely going to be slow and memory expensive when used on the vertex buffer and we have to do it on all draws because we can't know without analyzing indices when a game is going to read vertex data out of bounds. This is not a problem on OpenGL's BufferAddressRangeNV because it takes a length parameter, unlike Vulkan's CmdBindVertexBuffers that only takes buffers and offsets (the length is implicit in VkBuffer). It isn't a problem on D3D12 either, because D3D12_VERTEX_BUFFER_VIEW on IASetVertexBuffers takes SizeInBytes as a parameter (although I am not familiar with robustness on D3D12). Currently this only implements buffer ranges for vertex buffers, although indices can also be affected. A KHR_robustness profile is not created, but Nvidia's driver reads out of bound vertex data as zero anyway, this might have to be changed in the future. - Fixes SMO random triangles when capturing an enemy, getting hit, or looking at the environment on certain maps.
2020-06-24gl_buffer_cache: Mark buffers as residentReinUsesLisp
Make stream buffer and cached buffers as resident and query their address. This allows us to use GPU addresses for several proprietary Nvidia extensions.
2020-06-24gl_device: Expose NV_vertex_buffer_unified_memory except on TuringReinUsesLisp
Expose NV_vertex_buffer_unified_memory when the driver supports it. This commit adds a function the determine if a GL_RENDERER is a Turing GPU. This is required because on Turing GPUs Nvidia's driver crashes when the buffer is marked as resident or on DeleteBuffers. Without a synchronous debug output (single threaded driver), it's likely that the driver will crash in the first blocking call.
2020-06-24gl_stream_buffer: Always use a non-coherent bufferReinUsesLisp
2020-06-24gl_stream_buffer: Always use persistent memory mapsReinUsesLisp
yuzu no longer supports platforms without persistent maps.
2020-06-24Merge pull request #4129 from Morph1984/texture-shadow-lod-workaroundRodrigo Locatti
gl_shader_decompiler: Workaround textureLod when GL_EXT_texture_shadow_lod is not available
2020-06-23Merge pull request #4127 from lioncash/dst-typobunnei
texture_cache: Fix incorrect address used in a DeduceSurface() call
2020-06-22Merge pull request #4110 from ReinUsesLisp/direct-upload-setsRodrigo Locatti
vk_update_descriptor: Upload descriptor sets data directly
2020-06-21Merge pull request #4122 from lioncash/hidebunnei
video_core: Eliminate some variable shadowing
2020-06-21Merge pull request #4126 from lioncash/noexceptbunnei
vulkan/wrapper: Remove noexcept from GetSurfaceCapabilitiesKHR()
2020-06-20gl_shader_decompiler: Enable GL_EXT_texture_shadow_lod if availableMorph
Enable GL_EXT_texture_shadow_lod if available. If this extension is not available, such as on Intel/AMD proprietary drivers, use textureGrad as a workaround.
2020-06-20gl_device: Check for GL_EXT_texture_shadow_lodMorph
2020-06-20Merge pull request #4120 from lioncash/arbbunnei
gl_arb_decompiler: Avoid several string copies
2020-06-20macro_jit_x64: Use ecx for shift registerMerryMage
shl/shr only accept cl as their second argument
2020-06-20texture_cache: Fix incorrect address used in a DeduceSurface() callLioncash
Previously the source was being deduced twice in a row.
2020-06-20Merge pull request #4125 from lioncash/macro-shiftmerry
macro_jit_x64: Amend readability of Compile_ExtractShiftLeftRegister()
2020-06-20Merge pull request #4123 from lioncash/unused-varmerry
macro_jit_x64: Remove unused variable
2020-06-19Merge pull request #4099 from MerryMage/macOS-buildbunnei
Fix compilation on macOS
2020-06-19gl_arb_decompiler: Avoid several string copiesLioncash
Variables that are marked as const cannot have the move constructor invoked when returning from a function (the move constructor requires a non-const variable so it can "steal" the resources from it.
2020-06-19vulkan/wrapper: Remove noexcept from GetSurfaceCapabilitiesKHR()Lioncash
Check() can throw an exception if the Vulkan result isn't successful. We remove the check so that std::terminate isn't outright called and allows for better debugging (should it ever actually fail).
2020-06-19macro_jit_x64: Correct readability of Compile_ExtractShiftLeftImmediate()Lioncash
Previously dst wasn't being used.
2020-06-19macro_jit_x64: Correct readability of Compile_ExtractShiftLeftRegister()Lioncash
Previously dst wasn't being used.
2020-06-19macro_jit_x64: Remove unused variableLioncash
Removes a completely unused label and marks another variable as unused, given it seems like it has potential uses in the future.
2020-06-19memory_manager: Eliminate variable shadowingLioncash
Renames some variables to prevent ones in inner scopes from shadowing outer-scoped variables. The Copy* functions have no shadowing, but we rename them anyways to remain consistent with the other functions.
2020-06-19macro_jit_x64: Eliminate variable shadowing in Compile_ProcessResult()Lioncash
We can reduce the capture scope so that it's not possible for both "reg" variables to clash with one another. While we're at it, we can prevent unnecessary copies while we're at it.
2020-06-19buffer_cache: Eliminate local variable shadowingLioncash
We can just make use of the instance in the scope above this one.
2020-06-19Merge pull request #4087 from MerryMage/macrojit-inline-Readbunnei
macro_jit_x64: Inline Engines::Maxwell3D::GetRegisterValue
2020-06-19macro_jit_x64: Remove unused function ReadMerryMage
2020-06-18Merge pull request #4090 from MerryMage/macrojit-bugsbunnei
macro_jit_x64: Optimization correctness
2020-06-18vk_update_descriptor: Upload descriptor sets data directlyReinUsesLisp
Instead of copying to a temporary payload before sending the update task to the worker thread, insert elements to the payload directly.
2020-06-18vk_rasterizer: BindTransformFeedbackBuffersEXT accepts a size of type ↵MerryMage
VkDeviceSize
2020-06-18renderer_vulkan: Fix macOS GetBundleDirectory referenceMerryMage
2020-06-18memory_util: boost hashes are size_tMerryMage
* boost::hash_value returns a size_t * boost::hash_combine takes a size_t& argument
2020-06-18Rename PAGE_SHIFT to PAGE_BITSMerryMage
macOS header files #define PAGE_SHIFT
2020-06-18vk_sampler_cache: Emulate GL_LINEAR/NEAREST minification filtersMorph
Emulate GL_LINEAR/NEAREST minification filters using minLod = 0 and maxLod = 0.25 during sampler creation
2020-06-18maxwell_to_vk: Reorder filter cases and correct mipmap_filter=NoneMorph
maxwell_to_vk: Reorder filtering modes to start with None, then Nearest, then Linear. maxwell_to_vk: Logs filter modes under UNREACHABLE_MSG instead of UNIMPLEMENTED_MSG, since any unknown filter modes are invalid and not unimplemented. maxwell_to_vk: Return VK_SAMPLER_MIPMAP_MODE_NEAREST instead of VK_SAMPLER_MIPMAP_MODE_LINEAR when mipmap_filter is None with the description from the VkSamplerCreateInfo(3) man page.
2020-06-18maxwell_to_gl: Miscellaneous changesMorph
maxwell_to_gl: Log unimplemented features under UNIMPLEMENTED_MSG instead of LOG_ERROR to bring into parity with maxwell_to_vk maxwell_to_gl: Deduplicate logging in VertexType(), merging them into one. maxwell_to_gl: Return GL_NEAREST instead of GL_LINEAR if an unknown texture filter mode is encountered. maxwell_to_gl: Log the mipmap filter mode if an unknown value is passed in. maxwell_to_gl: Reorder filtering modes to start with None, then Nearest, then Linear.
2020-06-18Merge pull request #4092 from Morph1984/image-bindingsRodrigo Locatti
gl_device: Reserve 4 image bindings for fragment stage
2020-06-17macro_jit_x64: Inline Engines::Maxwell3D::GetRegisterValueMerryMage
2020-06-17Merge pull request #4086 from MerryMage/abibunnei
xbyak_abi: Cleanup
2020-06-17macro_jit_x64: Optimization implicitly assumes same destinationMerryMage
2020-06-17macro_jit_x64: Should not skip zero registers for certain ALU opsMerryMage
The code generated for these ALU ops assume src_a and src_b are always valid.
2020-06-16Merge pull request #4089 from MerryMage/macrojit-cleanup-1bunnei
macro_jit_x64: Cleanup
2020-06-16Merge pull request #4041 from ReinUsesLisp/arb-decompbunnei
gl_arb_decompiler: Implement an assembly shader decompiler
2020-06-16gl_device: Reserve at least 4 image bindings for fragment stageMorph
Due to the limitation of GL_MAX_IMAGE_UNITS being low (8) on Intel's and Nvidia's proprietary drivers, we have to reserve an appropriate amount of image bindings for each of the stages. So far games have been observed to use 4 image bindings on the fragment stage (Kirby Star Allies) and 1 on the vertex stage (TWD series). No games thus far in my limited testing used more than 4 images concurrently and across all currently active programs. This fixes shader compilation errors on Kirby Star Allies on OpenGL (GLSL/GLASM)
2020-06-15Merge pull request #4066 from ReinUsesLisp/shared-ptr-bufRodrigo Locatti
buffer_cache: Avoid passing references of shared pointers and misc style changes
2020-06-15macro_jit_x64: Remove NEXT_PARAMETERMerryMage
Not required, as PARAMETERS can just be incremented directly.
2020-06-15macro_jit_x64: Remove unused function Compile_WriteCarryMerryMage