aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
AgeCommit message (Collapse)Author
2020-10-26video_core: NVDEC Implementationameerj
This commit aims to implement the NVDEC (Nvidia Decoder) functionality, with video frame decoding being handled by the FFmpeg library. The process begins with Ioctl commands being sent to the NVDEC and VIC (Video Image Composer) emulated devices. These allocate the necessary GPU buffers for the frame data, along with providing information on the incoming video data. A Submit command then signals the GPU to process and decode the frame data. To decode the frame, the respective codec's header must be manually composed from the information provided by NVDEC, then sent with the raw frame data to the ffmpeg library. Currently, H264 and VP9 are supported, with VP9 having some minor artifacting issues related mainly to the reference frame composition in its uncompressed header. Async GPU is not properly implemented at the moment. Co-Authored-By: David <25727384+ogniK5377@users.noreply.github.com>
2020-10-23Merge pull request #4706 from ReinUsesLisp/cmake-host-shadersbunnei
video_core: Fix instances where msbuild always regenerated host shaders
2020-10-20video_core: Conditially activate relevant compiler warningsLioncash
These compiler flags aren't shared with clang, so specifying these flags unconditionally can lead to a bit of warning spam. While we're in the area, we can also enable -Wunused-but-set-parameter given this is almost always a bug.
2020-10-20gl_arb_decompiler: Implement robust buffer operationsReinUsesLisp
This emulates the behavior we get on GLSL with regular SSBOs with a pointer + length pair. It aims to be consistent with the crashes we might get. Out of bounds stores are ignored. Atomics are ignored and return zero. Reads return zero.
2020-10-19Merge pull request #4204 from ReinUsesLisp/vulkan-1.0bunnei
renderer_vulkan: Create and properly use Vulkan 1.0 instances when 1.1 is not available
2020-10-17Merge pull request #4782 from ReinUsesLisp/remove-dyn-primitivebunnei
vk_graphics_pipeline: Manage primitive topology as fixed state
2020-10-14Merge pull request #4772 from goldenx86/block-rdnabunnei
vk_device: Block VK_EXT_extended_dynamic_state for RDNA devices
2020-10-13vk_graphics_pipeline: Manage primitive topology as fixed stateReinUsesLisp
Vulkan has requirements for primitive topologies that don't play nicely with yuzu's. Since it's only 4 bits, we can move it to fixed state without changing the size of the pipeline key. - Fixes a regression on recent Nvidia drivers on Fire Emblem: Three Houses.
2020-10-12Merge pull request #4766 from ReinUsesLisp/tmml-cubebunnei
shader/texture: Implement CUBE texture type for TMML and fix arrays
2020-10-09video_core: Enforce -Wclass-memaccessReinUsesLisp
2020-10-08Merge pull request #4771 from ReinUsesLisp/warn-unused-varLC
video_core: Enforce -Wunused-variable and -Wunused-but-set-variable
2020-10-08vk_device: Block VK_EXT_extended_dynamic_state for RDNA devicesgoldenx86
RDNA devices seem to crash when using VK_EXT_extended_dynamic_state in the latest 20.9.2 proprietary Windows drivers. As a workaround, for now we block device names corresponding to current RDNA released products.
2020-10-07shader/texture: Implement CUBE texture type for TMML and fix arraysReinUsesLisp
TMML takes an array argument that has no known meaning, this one appears as the first component in gpr8 followed by s, t and r. Skip this component when arrays are being used. Also implement CUBE texture types. - Used by Pikmin 3: Deluxe Demo.
2020-10-07renderer_vulkan/wrapper: Fix physical device sortingReinUsesLisp
The old code had a sort function that was invalid and it didn't work as expected when the base vector had a different order (e.g. renderdoc was attached). This sorts devices as expected and fixes a debug assert on MSVC.
2020-10-02video_core: Enforce -Wunused-variable and -Wunused-but-set-variableReinUsesLisp
2020-09-30Remove ext_extended_dynamic_state blacklistMatías Locatti
Latest AMD 20.9.2 driver fixed this, there's no reason to keep it blocked, as the previous stable signed driver release doesn't include the extension.
2020-09-26Merge pull request #4724 from lat9nq/fix-vulkan-nvidia-allocate-2Rodrigo Locatti
vk_stream_buffer: Fix initializing Vulkan with NVIDIA on Linux
2020-09-26Merge pull request #4703 from lioncash/desig7bunnei
shader/registry: Make use of designated initializers where applicable
2020-09-25vk_stream_buffer: Fix initializing Vulkan with NVIDIA on Linuxlat9nq
The previous fix only partially solved the issue, as only certain GPUs that needed 9 or less MiB subtracted would work (i.e. GTX 980 Ti, GT 730). This takes from DXVK's example to divide `heap_size` by 2 to determine `allocable_size`. Additionally tested on my Quadro K4200, which previously required setting it to 12 to boot.
2020-09-25vk_command_pool: Move definition of Pool into the cpp fileLioncash
Allows the implementation details to be changed without recompiling any files that include this header.
2020-09-25vk_command_pool: Make use of override on destructorLioncash
2020-09-25vk_command_pool: Add missing header guardLioncash
2020-09-24Merge pull request #4711 from lioncash/move5bunnei
arithmetic_integer_immediate: Make use of std::move where applicable
2020-09-24arithmetic_integer_immediate: Make use of std::move where applicableLioncash
Same behavior, minus any redundant atomic reference count increments and decrements.
2020-09-23video_core: Fix instances where msbuild always regenerated host shadersReinUsesLisp
When HEADER_GENERATOR was included in the DEPENDS section of custom commands, msbuild assumed this was always modified. Changing this file is not common so we can remove it from there.
2020-09-23Merge pull request #4674 from ReinUsesLisp/timeline-semaphoresbunnei
renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphore
2020-09-23shader/registry: Silence a -Wshadow warningLioncash
2020-09-23shader/registry: Remove unnecessary namespace qualifiersLioncash
Using statements already make these unnecessary.
2020-09-23shader/registry: Make use of designated initializers where applicableLioncash
Same behavior, less repetition.
2020-09-22control_flow: emplace elements in place within TryQuery()Lioncash
Places data structures where they'll eventually be moved to to avoid needing to even move them in the first place.
2020-09-22control_flow: Make use of std::move in InsertBranch()Lioncash
Avoids unnecessary atomic increments and decrements.
2020-09-22General: Make use of std::nullopt where applicableLioncash
Allows some implementations to avoid completely zeroing out the internal buffer of the optional, and instead only set the validity byte within the structure. This also makes it consistent how we return empty optionals.
2020-09-20renderer_opengl: Remove emulated mailbox presentationReinUsesLisp
Emulated mailbox presentation was causing performance issues on Nvidia's OpenGL driver. Remove it.
2020-09-19vk_query_cache: Hack counter destructor to avoid reserving queriesReinUsesLisp
This is a hack to destroy all HostCounter instances before the base class destructor is called. The query cache should be redesigned to have a proper ownership model instead of using shared pointers. For now, destroy the host counter hierarchy from the derived class destructor.
2020-09-19renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphoreReinUsesLisp
This reworks how host<->device synchronization works on the Vulkan backend. Instead of "protecting" resources with a fence and signalling these as free when the fence is known to be signalled by the host GPU, use timeline semaphores. Vulkan timeline semaphores allow use to work on a subset of D3D12 fences. As far as we are concerned, timeline semaphores are a value set by the host or the device that can be waited by either of them. Taking advantange of this, we can have a monolithically increasing atomic value for each submission to the graphics queue. Instead of protecting resources with a fence, we simply store the current logical tick (the atomic value stored in CPU memory). When we want to know if a resource is free, it can be compared to the current GPU tick. This greatly simplifies resource management code and the free status of resources should have less false negatives. To workaround bugs in validation layers, when these are attached there's a thread waiting for timeline semaphores.
2020-09-18fermi_2d: Make use of designated initializersLioncash
Same behavior, less repetition. We can also ensure all members of Config are initialized.
2020-09-17Merge pull request #4672 from lioncash/narrowingRodrigo Locatti
decoder/texture: Eliminate narrowing conversion in GetTldCode()
2020-09-17decode/image: Eliminate switch fallthrough in DecodeImage()Lioncash
Fortunately this didn't result in any issues, given the block that code was falling through to would immediately break.
2020-09-17decoder/texture: Eliminate narrowing conversion in GetTldCode()Lioncash
The assignment was previously truncating a u64 value to a bool.
2020-09-16video_core: Enforce -Werror=switchReinUsesLisp
This forces us to fix all -Wswitch warnings in video_core.
2020-09-06video_core: Remove all Core::System references in rendererReinUsesLisp
Now that the GPU is initialized when video backends are initialized, it's no longer needed to query components once the game is running: it can be done when yuzu is booting. This allows us to pass components between constructors and in the process remove all Core::System references in the video backend.
2020-09-03Merge pull request #4611 from lioncash/xbyak2bunnei
externals: Update Xbyak to 5.96
2020-09-03Merge pull request #4575 from lioncash/asyncbunnei
async_shaders: Mark getters as const member functions
2020-08-30vk_device: Fix driver id check on AMD for VK_EXT_extended_dynamic_stateReinUsesLisp
'driver_id' can only be known on Vulkan 1.1 after creating a logical device. Move the driver id check to disable VK_EXT_extended_dynamic_state after the logical device is successfully initialized. The Vulkan device will have the extension enabled but it will not be used.
2020-08-30externals: Update Xbyak to 5.96Lioncash
I made a request on the Xbyak issue tracker to allow some constructors to be constexpr in order to avoid static constructors from needing to execute for some of our register constants. This request was implemented, so this updates Xbyak so that we can make use of it.
2020-08-28vk_device: Blacklist AMD proprietary from VK_EXT_extended_dynamic_stateReinUsesLisp
Vertex binding's <stride> is bugged on AMD's proprietary drivers when using VK_EXT_extended_dynamic_state. Blacklist it for now while we investigate how to report this issue to AMD.
2020-08-27Merge pull request #4524 from lioncash/memory-logbunnei
shader/memory: Amend UNIMPLEMENTED_IF_MSG without a message
2020-08-26Merge pull request #4569 from ReinUsesLisp/glsl-cmakebunnei
video_core/host_shaders: Add CMake integration for string shaders
2020-08-26Merge pull request #4555 from ReinUsesLisp/fix-primitive-topologybunnei
vk_state_tracker: Fix primitive topology
2020-08-26memory_manager: Make use of [[nodiscard]] in the interfaceLioncash