aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
AgeCommit message (Collapse)Author
2021-01-27vk_scheduler: Fix unaligned placement new expressionsReinUsesLisp
We were accidentaly creating an object in an unaligned memory address. Fix this by manually aligning the offset.
2021-01-24vk_graphics_pipeline: Fix narrowing conversion on MSVCReinUsesLisp
2021-01-24Merge pull request #5807 from ReinUsesLisp/vc-warningsLC
video_core: Silence the remaining gcc warnings and enforce them
2021-01-24Merge pull request #5363 from ReinUsesLisp/vk-image-usageRodrigo Locatti
vk_texture_cache: Support image store on sRGB images with VkImageViewUsageCreateInfo
2021-01-24vk_texture_cache: Support image store on sRGB images with ↵ReinUsesLisp
VkImageViewUsageCreateInfo Vulkan 1.0 didn't support creating sRGB image views on an ABGR8 VkImage with storage usage bits. VK_KHR_maintenance2 addressed this allowing to reduce the usage bits on a VkImageView. To allow image store on non-sRGB image views when the VkImage is created with sRGB, always create VkImages without sRGB and add the sRGB format on the view.
2021-01-24video_core: Silence -Wmissing-field-initializers warningsReinUsesLisp
2021-01-24maxwell_to_vk: Silence -Wextra warnings about using different enum typesReinUsesLisp
2021-01-23vk_pipeline_cache: Properly bypass VertexA shadersReinUsesLisp
The VertexA stage is not yet implemented, but Vulkan is adding its descriptors, causing a discrepancy in the pushed descriptors and the template. This generally ends up in a driver side crash. Bypass the VertexA stage for now.
2021-01-20Merge pull request #5361 from ReinUsesLisp/vk-shader-commentbunnei
vk_shader_decompiler: Show comments as OpUndef with a type
2021-01-15vk_shader_decompiler: Show comments as OpUndef with a typeReinUsesLisp
Silence the new validation layer error about SPIR-V not allowing OpUndef on a OpTypeVoid, even when the SPIR-V spec doesn't say anything against it. They will be inserted as an undefined int to avoid SPIRV-Cross and validation errors, but only when a debugging tool is attached.
2021-01-15vk_texture_cache: Use Download memory types for texture flushesReinUsesLisp
Use the Download memory type where it matters.
2021-01-15vulkan_memory_allocator: Add "download" memory usage hintReinUsesLisp
Allow users of the allocator to hint memory usage for downloads. This removes the non-descriptive boolean passed for "host visible" or not host visible memory commits, and uses an enum to hint device local, upload and download usages.
2021-01-15vulkan_common: Move allocator to the common directoryReinUsesLisp
Allow using the abstraction from the OpenGL backend.
2021-01-15renderer_vulkan: Rename Vulkan memory manager to memory allocatorReinUsesLisp
"Memory manager" collides with the guest GPU memory manager, and a memory allocator sounds closer to what the abstraction aims to be.
2021-01-15vk_memory_manager: Improve memory manager and its APIReinUsesLisp
Fix a bug where the memory allocator could leave gaps between commits. To fix this the allocation algorithm was reworked, although it's still short in number of lines of code. Rework the allocation API to self-contained movable objects instead of naively using an unique_ptr to do the job for us. Remove the VK prefix.
2021-01-15vk_buffer_cache: Remove unused functionReinUsesLisp
2021-01-12Merge pull request #5311 from ReinUsesLisp/fence-waitbunnei
vk_fence_manager: Use timeline semaphores instead of spin waits
2021-01-08Merge pull request #5231 from ReinUsesLisp/dyn-bindingsbunnei
renderer_vulkan/fixed_pipeline_state: Move enabled bindings to static state
2021-01-08vk_fence_manager: Use timeline semaphores instead of spin waitsReinUsesLisp
With timeline semaphores we can avoid creating objects. Instead of creating an event, grab the current tick from the scheduler and flush the current command buffer. When the fence has to be queried/waited, we can do so against the master semaphore instead of spinning on an event. If Vulkan supported NVN like events or fences, we could signal from the command buffer and wait for that without splitting things in two separate command buffers.
2021-01-06Merge pull request #5288 from ReinUsesLisp/workaround-garbageMorph
gl_texture_cache: Avoid format views on Intel and AMD
2021-01-05Merge pull request #5289 from ReinUsesLisp/vulkan-devicebunnei
vulkan_common: Move device abstraction to the common directory and allow surfaceless devices
2021-01-04Merge pull request #5292 from ReinUsesLisp/empty-setLC
vk_rasterizer: Skip binding empty descriptor sets on compute
2021-01-04vk_rasterizer: Skip binding empty descriptor sets on computeReinUsesLisp
Fixes unit tests where compute shaders had no descriptors in the set, making Vulkan drivers crash when binding an empty set.
2021-01-04renderer_vulkan/nsight_aftermath_tracker: Move to vulkan_commonReinUsesLisp
2021-01-04renderer_vulkan: Move device abstraction to vulkan_commonReinUsesLisp
2021-01-04gl_texture_cache: Avoid format views on Intel and AMDReinUsesLisp
Intel and AMD proprietary drivers are incapable of rendering to texture views of different formats than the original texture. Avoid creating these at a cache level. This will consume more memory, emulating them with copies.
2021-01-03renderer_vulkan: Rename VKDevice to DeviceReinUsesLisp
The "VK" prefix predates the "Vulkan" namespace. It was carried around the codebase for consistency. "VKDevice" currently is a bad alias with "VkDevice" (only an upcase character of difference) that can cause confusion. Rename all instances of it.
2021-01-03Merge pull request #5230 from ReinUsesLisp/vulkan-commonRodrigo Locatti
vulkan_common: Move reusable Vulkan abstractions to a separate directory
2021-01-02general: Fix various spelling errorsMorph
2020-12-31vulkan_instance: Allow different Vulkan versions and enforce 1.1ReinUsesLisp
For listing the available physical devices we can use Vulkan 1.0. Now that MoltenVK supports 1.1 we can require it for running games. Add missing documentation.
2020-12-31vk_device: Use an array to report lacking device limitsReinUsesLisp
This makes easier to add and tune the required device limits.
2020-12-31vk_device: Stop initialization when device is not suitableReinUsesLisp
VKDevice::IsSuitable was not being called. To address this issue, check suitability before initialization and throw an exception if it fails. By doing this, we can deduplicate some code on queue searches. Previosuly we would first search if a present and graphics queue existed, then on initialization we would search again to find the index.
2020-12-31renderer_vulkan: Remove two step initialization on VKDeviceReinUsesLisp
The Vulkan device abstraction either initializes successfully on the constructor or throws a Vulkan exception.
2020-12-31renderer_vulkan: Throw when enumerating devices failsReinUsesLisp
Report device enumeration errors with exceptions to be consistent with other initialization related function calls. Reduces the amount of code to maintain.
2020-12-31renderer_vulkan: Initialize surface in separate fileReinUsesLisp
Move surface initialization code to a separate file. It's unlikely to use this code outside of Vulkan, but keeping platform-specific code (Win32, Xlib, Wayland) in its own translation unit keeps things cleaner.
2020-12-31renderer_vulkan: Catch and report exceptionsReinUsesLisp
Move more Vulkan code to report errors with exceptions and report them through a log before notifying it with an error boolean for backwards compatibility. In the future we can replace the rasterizer two-step initialization to always use exceptions.
2020-12-31renderer_vulkan: Create debug callback on separate file and throwReinUsesLisp
Initialize debug callbacks (messenger) from a separate file. This allows sharing code with different backends. Change our Vulkan error handling to use exceptions instead of error codes, simplifying the initialization process.
2020-12-31renderer_vulkan: Move instance initialization to a separate fileReinUsesLisp
Simplify Vulkan's backend initialization code by moving it to a separate file, allowing us to initialize a Vulkan instance from different backends.
2020-12-31vulkan_common: Rename renderer_vulkan/wrapper.h to ↵ReinUsesLisp
vulkan_common/vulkan_wrapper.h Allows sharing Vulkan wrapper code between different rendering backends.
2020-12-31vulkan_common: Move dynamic library load to a separate fileReinUsesLisp
Allows us to initialize a Vulkan dynamic library from different backends without duplicating code.
2020-12-30maxwell_to_vk: Initialize usage variable in SurfaceFormat()Lioncash
Silences a -Wmaybe-uninitialized warning
2020-12-30video_core: Rewrite the texture cacheReinUsesLisp
The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage.The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage. This commit aims to address those issues.
2020-12-25renderer_vulkan/fixed_pipeline_state: Move enabled bindings to static stateReinUsesLisp
Without using VK_EXT_robustness2, we can't consider the 'enabled' (not null) vertex buffers as dynamic state, as this leads to invalid Vulkan state. Move this to static state that is always hashed and compared in the pipeline key. The bits for enabled vertex buffers are moved into the attribute state bitfield. This is not 'correct' as it's not an attribute state, but that struct has bits to spare, and it's used in an array of 32 elements (the exact same number of vertex buffer bindings).
2020-12-24vk_shader_decompiler: Silence warning when compiling without assertsReinUsesLisp
2020-12-07video_core: Make use of ordered container contains() where applicableLioncash
With C++20, we can use the more concise contains() member function instead of comparing the result of the find() call with the end iterator.
2020-12-07video_core: Remove unnecessary enum class casting in logging messagesLioncash
fmt now automatically prints the numeric value of an enum class member by default, so we don't need to use casts any more. Reduces the line noise a bit.
2020-12-07Merge pull request #5152 from comex/xx-overrideLC
renderer_vulkan: Add missing `override` specifier
2020-12-07Merge pull request #5136 from lioncash/video-shadow3LC
video_core: Resolve more variable shadowing scenarios pt.3
2020-12-06renderer_vulkan: Add missing `override` specifiercomex
2020-12-06video_core: Adjust `NUM` macro to avoid Clang warningcomex
The previous definition was: #define NUM(field_name) (sizeof(Maxwell3D::Regs::field_name) / sizeof(u32)) In cases where `field_name` happens to refer to an array, Clang thinks `sizeof(an array value) / sizeof(a type)` is an instance of the idiom where `sizeof` is used to compute an array length. So it thinks the type in the denominator ought to be the array element type, and warns if it isn't, assuming this is a mistake. In reality, `NUM` is not used to get array lengths at all, so there is no mistake. Silence the warning by applying Clang's suggested workaround of parenthesizing the denominator.