3
0
Fork 0
forked from suyu/suyu
suyu/src
ReinUsesLisp 41a4090320 gl_rasterizer: Use NV_vertex_buffer_unified_memory for vertex buffer robustness
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-24 02:36:14 -03:00
..
audio_core audren: Implement RendererInfo 2020-06-13 14:04:28 +10:00
common common/telemetry: Add AVX512 to telemetry 2020-06-20 00:31:37 -04:00
core Merge pull request #4138 from Morph1984/GyroscopeZeroDriftMode 2020-06-23 21:56:16 -04:00
input_common input_common/motion_emu: Remove redundant move 2020-06-19 14:29:59 +01:00
tests Merge pull request #3697 from lioncash/declarations 2020-04-23 02:18:52 -04:00
video_core gl_rasterizer: Use NV_vertex_buffer_unified_memory for vertex buffer robustness 2020-06-24 02:36:14 -03:00
web_service Replace externals with Conan (#3735) 2020-05-08 17:09:29 -04:00
yuzu Merge pull request #3948 from Morph1984/log-cpu-instructions 2020-06-23 15:19:47 -04:00
yuzu_cmd Fix: fatal error CVT1100 when compiling manifest file 2020-06-21 03:11:23 +02:00
yuzu_tester yuzu_tester: Silence type conversion warning 2020-06-22 22:56:15 -04:00
.clang-format
CMakeLists.txt CMakeLists: Make missing declarations a compile-time error 2020-04-16 23:43:41 -04:00