aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
AgeCommit message (Collapse)Author
2020-04-28Merge pull request #3784 from ReinUsesLisp/shader-memory-utilbunnei
shader/memory_util: Deduplicate code
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-26Merge pull request #3753 from ReinUsesLisp/ac-vulkanRodrigo Locatti
{gl,vk}_rasterizer: Add lazy default buffer maker and use it for empty buffers
2020-04-26shader/memory_util: Deduplicate codeReinUsesLisp
Deduplicate code shared between vk_pipeline_cache and gl_shader_cache as well as shader decoder code. While we are at it, fix a bug in gl_shader_cache where compute shaders had an start offset of a stage shader.
2020-04-25Merge pull request #3721 from ReinUsesLisp/sort-devicesbunnei
vulkan/wrapper: Sort physical devices
2020-04-24vk_rasterizer: Pack texceptions and color formats on invalid formatsReinUsesLisp
Sometimes for unknown reasons NVN games can bind a render target format of 0. This may be a yuzu bug. With the commits before this the formats were specified without being "packed", assuming all formats and texceptions will be written like in the color_attachments vector. To address this issue, iterate all render targets and pack them as they are valid. This way they will match color_attachments. - Fixes validation errors and graphical issues on Breath of the Wild.
2020-04-24Fix -Werror=conversion error.Markus Wick
2020-04-23vk_rasterizer: Fix framebuffer creation validation errorsReinUsesLisp
Framebuffer creation was ignoring the number of color attachments.
2020-04-23vk_pipeline_cache: Unify pipeline cache keys into a single operationReinUsesLisp
This allows us to call Common::CityHash and std::memcmp only once for GraphicsPipelineCacheKey. While we are at it, do the same for compute.
2020-04-23vk_renderpass_cache: Pack renderpass cache key to 12 bytesReinUsesLisp
2020-04-22Merge pull request #3677 from FernandoS27/better-syncbunnei
Introduce Predictive Flushing and Improve ASYNC GPU
2020-04-22vk_pipeline_cache: Fix unintentional memcpy into optionalReinUsesLisp
The intention behind this was to assign a float to from an uint32_t, but it was unintentionally being copied directly into the std::optional. Copy to a temporary and assign that temporary to std::optional. This can be replaced with std::bit_cast<float> once we are in C++20.
2020-04-22Merge pull request #3653 from ReinUsesLisp/nsight-aftermathFernando Sahmkow
renderer_vulkan: Integrate Nvidia Nsight Aftermath on Windows
2020-04-22Async GPU: Correct flushing behavior to be similar to old async GPU behavior.Fernando Sahmkow
2020-04-22ShaderCache/PipelineCache: Cache null shaders.Fernando Sahmkow
2020-04-22Address Feedback.Fernando Sahmkow
2020-04-22vk_fence_manager: Initial implementationReinUsesLisp
2020-04-22OpenGL: Guarantee writes to Buffers.Fernando Sahmkow
2020-04-22GPU: Implement Flush Requests for Async mode.Fernando Sahmkow
2020-04-22FenceManager: Manage syncpoints and rename fences to semaphores.Fernando Sahmkow
2020-04-22Rasterizer: Document SignalFence & ReleaseFences and setup skeletons on Vulkan.Fernando Sahmkow
2020-04-22ThreadManager: Sync async reads on accurate gpu.Fernando Sahmkow
2020-04-22BufferCache: Implement OnCPUWrite and SyncGuestHostFernando Sahmkow
2020-04-22GPU: Refactor synchronization on Async GPUFernando Sahmkow
2020-04-21vk_memory_manager: Remove unified memory model flagReinUsesLisp
All drivers (even Intel) seem to have a device local memory type that is not host visible. Remove this flag so all devices follow the same path. This fixes a crash when trying to map to host device local memory on integrated devices.
2020-04-21vk_rasterizer: Add lazy default buffer maker and use it for empty buffersReinUsesLisp
Introduce a default buffer getter that lazily constructs an empty buffer. This is intended to match OpenGL's buffer 0. Use this for disabled vertex and uniform buffers. While we are at it, include vertex buffer usages for staging buffers to silence validation errors.
2020-04-21gl_rasterizer: Fix buffers without sizeReinUsesLisp
On NVN buffers can be enabled but have no size. According to deko3d and the behavior we see in Animal Crossing: New Horizons these buffers get the special address of 0x1000 and limit themselves to 0xfff. Implement buffers without a size by binding a null buffer to OpenGL without a side. https://github.com/devkitPro/deko3d/blob/1d1930beea093b5a663419e93b0649719a3ca5da/source/maxwell/gpu_3d_vbo.cpp#L62-L63
2020-04-21Merge pull request #3718 from ReinUsesLisp/better-pipeline-stateRodrigo Locatti
fixed_pipeline_state: Pack structure, use memcmp and CityHash on it
2020-04-20Merge pull request #3733 from ambasta/patch-2Mat M
Initialize quad_indexed_pass before uint8_pass
2020-04-20Merge pull request #3700 from ReinUsesLisp/stream-buffer-sizesFernando Sahmkow
vk_stream_buffer: Fix out of memory on boot on recent Nvidia drivers
2020-04-20Initialize quad_indexed_pass before uint8_passAmit Prakash Ambasta
Fixes Werror=reorder in gcc
2020-04-19Merge pull request #3694 from ReinUsesLisp/indexed-quadsbunnei
vk_compute_pass: Implement indexed quads
2020-04-19renderer_vulkan: assume X11 if not Windows/macOS after bf1d66b7c074Jan Beich
Render.Vulkan <Error> video_core/renderer_vulkan/renderer_vulkan.cpp:CreateInstance:131: Presentation not supported on this platform Render.Vulkan <Error> video_core/renderer_vulkan/renderer_vulkan.cpp:CreateSurface:378: Presentation not supported on this platform Core <Critical> core/core.cpp:Load:199: Failed to initialize system (Error 5)!
2020-04-18vulkan/wrapper: Sort physical devicesReinUsesLisp
Sort discrete GPUs over the rest, Nvidia over AMD, AMD over Intel, Intel over the rest. This gives us a somewhat consistent order when Optimus is removed (renderdoc does this when it's attached). This can break the configuration of users with an Intel GPU that manually remove Optimus on yuzu. That said, it's a very unlikely to happen.
2020-04-18fixed_pipeline_state: Hash and compare the whole structureReinUsesLisp
Pad FixedPipelineState's size to 384 bytes to be a multiple of 16. Compare the whole struct with std::memcmp and hash with CityHash. Using CityHash instead of a naive hash should reduce the number of collisions. Improve used type traits to ensure this operation is safe. With these changes the improvements to the hashable pipeline state are: Optimized structure Hash: 89 ns Comparison: 103 ns Construction*: 164 ns Struct size: 384 bytes Original structure Hash: 148 ns Equal: 174 ns Construction*: 281 ns Size: 1384 bytes * Attribute state initialization is not measured These measures are averages taken with std::chrono::high_accuracy_clock on MSVC shipped on Visual Studio 16.6.0 Preview 2.1.
2020-04-18fixed_pipeline_state: Pack blending stateReinUsesLisp
Reduce FixedPipelineState's size to 364 bytes.
2020-04-18fixed_pipeline_state: Pack rasterizer stateReinUsesLisp
Reduce FixedPipelineState's size to 600 bytes.
2020-04-18fixed_pipeline_state: Pack depth stencil stateReinUsesLisp
Reduce FixedPipelineState's size to 632 bytes.
2020-04-18fixed_pipeline_state: Pack attribute stateReinUsesLisp
Reduce FixedPipelineState's size from 1384 to 664 bytes
2020-04-17vk_stream_buffer: Fix out of memory on boot on recent Nvidia driversReinUsesLisp
Nvidia recently introduced a new memory type for data streaming (awesome!), but yuzu was assuming that all heaps had enough memory for the assumed stream buffer size (256 MiB). This worked fine on AMD but Nvidia's new memory heap was smaller than 256 MiB. This commit changes this assumption and allocates a bit less than the size of the preferred heap, with a maximum of 256 MiB (to avoid allocating all system memory on integrated devices). - Fixes a crash on NVIDIA 450.82.0.0
2020-04-16vk_compute_pass: Implement indexed quadsReinUsesLisp
Implement indexed quads (GL_QUADS used with glDrawElements*) with a compute pass conversion. The compute shader converts from uint8/uint16/uint32 indices to uint32. The format is passed through push constants to avoid having different variants of the same shader. - Used by Fast RMX - Used by Xenoblade Chronicles 2 (it still has graphical due to synchronization issues on Vulkan)
2020-04-16Merge pull request #3600 from ReinUsesLisp/no-pointer-buf-cacheFernando Sahmkow
buffer_cache: Return handles instead of pointer to handles
2020-04-16buffer_cache: Return handles instead of pointer to handlesReinUsesLisp
The original idea of returning pointers is that handles can be moved. The problem is that the implementation didn't take that in mind and made everything harder to work with. This commit drops pointer to handles and returns the handles themselves. While it is still true that handles can be invalidated, this way we get an old handle instead of a dangling pointer. This problem can be solved in the future with sparse buffers.
2020-04-15video_core: Amend doxygen comment referencesLioncash
Fixes broken documentation references.
2020-04-15Merge pull request #3612 from ReinUsesLisp/redFernando Sahmkow
shader/memory: Implement RED.E.ADD and minor changes to ATOM
2020-04-15Merge pull request #3668 from ReinUsesLisp/vtx-format-16uiMat M
maxwell_to_vk: Add uint16 vertex formats
2020-04-15maxwell_to_vk: Add uint16 vertex formatsReinUsesLisp
2020-04-15maxwell_to_vk: Add missing breaksReinUsesLisp
Avoid invalid fallbacks.
2020-04-15vk_blit_screen: Initialize all members in VkPipelineViewportStateCreateInfoReinUsesLisp
When the dynamic state is specified, pViewports and pScissors are ignored, quoting the specification: pViewports is a pointer to an array of VkViewport structures, defining the viewport transforms. If the viewport state is dynamic, this member is ignored. That said, AMD's proprietary driver itself seem to read it regardless of what the specification says.