Commit graph

38 commits

Author SHA1 Message Date
ameerj
9ef5c53e52 video_core: NVDEC Implementation
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-26 23:07:36 -04:00
Jan Beich
c1bbc77b7c cmake: stop linking against QGL after 01a3b4f0de 2020-07-01 22:11:39 +00:00
ReinUsesLisp
805d48c67e gl_arb_decompiler: Implement an assembly shader decompiler
Emit code compatible with NV_gpu_program5.
This should emit code compatible with Fermi, but it wasn't tested on
that architecture. Pascal has some issues not present on Turing GPUs.
2020-06-11 22:12:07 -03:00
lat9nq
182826e87e Make compatible with the current MinGW cross-compiler
The Docker image was just updated to use Arch Linux instead of Ubuntu. This PR
sets the compiler names to reflect how they are installed on the Arch Linux
Docker image. Fixes "x86_64-w64-mingw32-g++-posix is not a full path and was not found in the PATH." errors in CMake.
2020-05-01 22:17:29 -04:00
James Rowe
b3f33a2c6b Use the correct directory for Qt Plugins 2020-03-23 18:51:46 -06:00
ReinUsesLisp
cb05500d6c shader/transform_feedback: Add host API friendly TFB builder 2020-03-13 18:33:04 -03:00
ReinUsesLisp
99be31c902 video_core: Rename "const buffer locker" to "registry" 2020-03-09 18:40:06 -03:00
ReinUsesLisp
8021ee48a3 gl_shader_cache: Rework shader cache and remove post-specializations
Instead of pre-specializing shaders and then post-specializing them,
drop the later and only "specialize" the shader while decoding it.
2020-03-09 18:40:06 -03:00
James Rowe
47197f6b18 Fix git version in scm_rev.cpp 2020-01-16 00:12:50 -07:00
Fernando Sahmkow
d4da704ac5 VideoCore: Unify const buffer accessing along engines and provide ConstBufferLocker class to shaders. 2019-10-25 09:01:29 -04:00
Fernando Sahmkow
7b55e1c0b1 Shader_Ir: Refactor Decompilation process and allow multiple decompilation modes. 2019-10-04 18:52:50 -04:00
Fernando Sahmkow
9f61500df1 shader_ir: Corrections to outward movements and misc stuffs 2019-10-04 18:52:48 -04:00
ReinUsesLisp
67f47b2f6a shader_ir: Implement VOTE
Implement VOTE using Nvidia's intrinsics. Documentation about these can
be found here
https://developer.nvidia.com/reading-between-threads-shader-intrinsics

Instead of using portable ARB instructions I opted to use Nvidia
intrinsics because these are the closest we have to how Tegra X1
hardware renders.

To stub VOTE on non-Nvidia drivers (including nouveau) this commit
simulates a GPU with a warp size of one, returning what is meaningful
for the instruction being emulated:

* anyThreadNV(value) -> value
* allThreadsNV(value) -> value
* allThreadsEqualNV(value) -> true

ballotARB, also known as "uint64_t(activeThreadsNV())", emits

VOTE.ANY Rd, PT, PT;

on nouveau's compiler. This doesn't match exactly to Nvidia's code

VOTE.ALL Rd, PT, PT;

Which is emulated with activeThreadsNV() by this commit. In theory this
shouldn't really matter since .ANY, .ALL and .EQ affect the predicates
(set to PT on those cases) and not the registers.
2019-08-21 14:50:38 -03:00
Fernando Sahmkow
48e75bade4 shader_ir: Implement a new shader scanner 2019-07-09 08:14:36 -04:00
ReinUsesLisp
224e4e174d shader: Decode SUST and implement backing image functionality 2019-06-20 21:38:33 -03:00
ReinUsesLisp
d7f13b7e6e cmake: Add missing shader hash file entries 2019-06-06 20:11:48 -03:00
fearlessTobi
2e197250dc GenerateSCMRev: fix Travis compilation on repo forks 2019-04-16 00:34:22 +02:00
ReinUsesLisp
8a7efd22ec shader/decode: Split memory and texture instructions decoding 2019-02-26 00:11:30 -03:00
ReinUsesLisp
0726b490dd cmake: Fix title bar issue 2019-02-06 22:23:41 -03:00
Michael
38e14d1876 cmake: Fixup application string
Co-Authored-By: ReinUsesLisp <reinuseslisp@airmail.cc>
2019-02-06 22:23:40 -03:00
ReinUsesLisp
8b1a7aa19d gl_shader_disk_cache: Invalidate shader cache changes with CMake hash 2019-02-06 22:20:57 -03:00
James Rowe
bd16d2c0cc QT Frontend: Add a Loading screen with progressbar
With shader caches on the horizon, one requirement is to provide visible
feedback for the progress. The shader cache reportedly takes several
minutes to load for large caches that were invalidated, and as such we
should provide a loading screen with progress.

Adds a loading screen widget that will be shown until the first frame of
the game is swapped. This was chosen in case shader caches are not being
used, several games still take more than a few seconds to launch and
could benefit from a loading screen.
2019-01-19 23:34:03 -07:00
Zach Hilman
dc21b7219c build: Copy web engine resources to correct location 2019-01-05 15:27:15 -05:00
Zach Hilman
3d70a73cb0 Update Qt MSVC external to 5.12.0 2018-12-31 13:19:23 -05:00
Zach Hilman
cc3d152dc7 cmake: Add USE_QT_WEB_ENGINE flag and update build system 2018-12-28 15:32:39 -05:00
tech4me
e7bcde0d12 Update MinGWCross.cmake to lowercase 2018-09-19 14:22:14 -04:00
tech4me
a1cb3164fe travis: running mingw build on travis ci
This commit also fixed a broken cmake dependency with unicorn
2018-09-19 14:22:14 -04:00
Zach Hilman
a615a8ae26 Fix missing qjpeg DLL 2018-08-06 23:06:33 -04:00
James Rowe
248530cb92 Add qt windowsvistastyle dll to the build 2018-07-03 14:44:13 -04:00
bunnei
ff2912045b Revert "Use Ninja for MSVC AppVeyor builds" (#584) 2018-06-23 03:17:32 -04:00
Michał Janiszewski
96f00c0aaa Use Ninja for MSVC AppVeyor builds 2018-06-05 22:46:54 +02:00
MerryMage
d616b36e7b Fix build on macOS and linux 2018-01-13 22:38:52 +00:00
James Rowe
5dbd091a80 Massive removal of unused modules 2018-01-12 19:11:03 -07:00
bunnei
7cce81dd09 cmake: Add CopyYuzuUnicornDeps script. 2018-01-04 13:24:08 -05:00
bunnei
c5561b0c2a DownloadExternals: Use yuzu repo. 2018-01-04 00:12:18 -05:00
James Rowe
62a7372026 Build: Enable SSL in mingw by linking against WinSSL
The mingw builds aren't submitting telemetry because the curl library
they are linked against is configured to use openSSL and openSSL looks
for the certificates in the users home folder. This keeps it from
contacting web services because it can't communicate over SSL.

This commit adds a download in mingw builds that will download a
precompiled curl for mingw linked against winssl and sspi.
2017-09-11 09:10:17 -06:00
freiro
04e6500b5d Modularized Qt and SDL file copying
Now cmake relies on two submodules to copy the libraries in the proper folders
2016-12-13 21:05:00 +01:00
freiro
b3b35563ce Modularization of copy_msvc_libraries cmake funct
Created a new folder in Citra's root called CMakeModules that should
contain cmake functions used by the various CMakeLists.txt.
2016-12-11 15:36:34 +01:00