GPUOpen#Rationale
{{short description|Middleware software suite}}
{{Update|date=January 2022}}
{{Infobox software
| title = GPUOpen
| name =
| logo = GPUOpen logo.png
| logo size = 250px
| logo_alt =
| logo caption = Logo
| screenshot =
| screenshot_size =
| screenshot_alt =
| caption =
| collapsible =
| author = Advanced Micro Devices
| developer = Advanced Micro Devices
| released = {{Start date|2016|01|26}}{{cite web|url=http://gpuopen.com/welcometogpuopen/ |title=Welcome to GPUOpen |author=AMD: GPUOpen |date=2016-01-26 |url-status=dead |archive-url=https://web.archive.org/web/20160305020432/http://gpuopen.com/welcometogpuopen/ |archive-date=2016-03-05 }}
| discontinued =
| latest release version =
| latest release date =
| latest preview version =
| latest preview date =
| programming language = C, C++, GLSL
| operating system = Linux, Microsoft Windows
| platform =
| size =
| language =
| language count =
| language footnote =
| genre = Game effects libraries, GPU debugging, CPU & GPU profiling
| license = MIT License
| website = {{URL|https://gpuopen.com/}}
}}
GPUOpen is a middleware software suite originally developed by AMD's Radeon Technologies Group that offers advanced visual effects for computer games. It was released in 2016. GPUOpen serves as an alternative to, and a direct competitor of Nvidia GameWorks. GPUOpen is similar to GameWorks in that it encompasses several different graphics technologies as its main components that were previously independent and separate from one another. However, GPUOpen is partially open source software, unlike GameWorks which is proprietary and closed.
History
GPUOpen was announced on December 15, 2015,{{cite web |url=http://www.maximumpc.com/amd-rtg-summit-gpuopen-and-software/ |title=AMD Radeon Technologies Group Summit: GPUOpen and Software |author=Maximum PC |date=2015-12-15 |access-date=2016-01-24}}{{cite web |url=http://www.anandtech.com/show/9853/amd-gpuopen-linux-open-source |title=AMD's GPUOpen bundle of developer tools in 2016 |author=AnandTech |date=2015-12-15 |access-date=2016-01-24}}{{cite web |url=http://www.tomshardware.com/news/amd-gpuopen-open-source-development,30750.html |title=AMD GPUOpen: Doubling Down On Open-Source Development |author=Tom's Hardware |date=2015-12-15 |access-date=2016-01-24}}{{cite web |url=http://www.heise.de/newsticker/meldung/AMDs-Open-Source-Initiative-GPUOpen-Direkte-GPU-Kontrolle-und-bessere-Treiber-3045512.html |title=AMDs Open-Source-Initiative GPUOpen: Direkte GPU-Kontrolle und bessere Treiber |language=de |author=Heinz Heise |date=2015-12-16}}{{cite news |url=http://www.pcgameshardware.de/AMD-Radeon-Grafikkarte-255597/News/GPUOpen-Open-Source-1181069/ |title=AMD GPU Open: Radeon-Software wird bald zu 100 % Open-Source |language=de |author=PC Games Hardware |newspaper=PC Games Hardware |date=2015-12-16}} and released on January 26, 2016.
Rationale
Nicolas Thibieroz, AMD's Senior Manager of Worldwide Gaming Engineering, argues that "it can be difficult for developers to leverage their R&D investment on both consoles and PC because of the disparity between the two platforms" and that "proprietary libraries or tools chains with "black box" APIs prevent developers from accessing the code for maintenance, porting or optimizations purposes".{{Cite web|url=http://gpuopen.com/welcometogpuopen/|archive-url = https://web.archive.org/web/20160305020432/http://gpuopen.com/welcometogpuopen/|archive-date = 2016-03-05|title = It's Time to Open up the GPU}} He says that upcoming architectures, such as AMD's RX 400 series "include many features not exposed today in PC graphics APIs".
AMD designed GPUOpen to be a competing open-source middleware stack released under the MIT License. The libraries are intended to increase software portability between video game consoles, PCs and also high-performance computing.{{cite web |url=http://wccftech.com/amds-answer-to-nvidias-gameworks-gpuopen-announced-open-source-tools-graphics-effects-and-libraries/ |title=AMD's Answer To Nvidia's GameWorks, GPUOpen Announced |author=wccftech.com |date=2015-12-15 |access-date=2016-01-24}}
Components
GPUOpen unifies many of AMD's previously separate tools and solutions into one package, also fully open-sourcing them under the MIT License. GPUOpen also makes it easy for developers to get low-level GPU access.{{cite web |url=http://hothardware.com/news/amd-goes-open-source-announces-gpuopen-initiative-new-compiler-and-drivers-for-lunix-and-hpc |title=AMD Goes Open Source, Announces GPUOpen Initiative, New Compiler And Drivers For Linux And HPC |author=HotHardware |date=2015-12-15 |access-date=2016-01-24}}
Additionally AMD wants to grant interested developers the kind of low-level "direct access" to their GCN-based GPUs, that surpasses the possibilities of Direct3D 12 or Vulkan. AMD mentioned e.g. a low-level access to the Asynchronous Compute Engines (ACEs). The ACE implement "Asynchronous Compute", but they cannot be freely configured under either Vulkan or Direct3D 12.
GPUOpen is made up of several main components, tools, and SDKs.
= Games and CGI =
Software for computer-generated imagery (CGI) used in development of computer games and movies alike.
== Visual effects libraries ==
class="wikitable" style="font-size:85%"
|+GPUOpen Visual Effects Libraries{{Cite web|url=https://github.com/GPUOpen-Effects/|title = GPUOpen Effects|website = GitHub}} !|Name !|API !|Source !|Description |
|TressFX
|[https://github.com/GPUOpen-Effects/TressFX GitHub] |This visual effects library allows the creation of realistic hair, fur, and grass. |
---|
|GeometryFX
|[https://github.com/GPUOpen-Effects/GeometryFX GitHub] |This library allows easy access to compute-based triangle filtering. |
|DepthOfFieldFX
|[https://github.com/GPUOpen-Effects/DepthOfFieldFX GitHub] |This library grants access to a depth of field implementation optimized for the GCN GPU architecture via a compute shader. |
|ShadowFX
|[https://github.com/GPUOpen-Effects/ShadowFX GitHub] |This library grants access to an implementation for deferred shadow filtering that is optimized for the GCN GPU architecture. |
|FidelityFX
|DirectX 11, DirectX 12, Vulkan |[https://github.com/GPUOpen-Effects/FidelityFX GitHub] |FidelityFX is a suite of visual effects and effects-helper libraries. |
== FidelityFX ==
class="wikitable" style="font-size:85%"
|+FidelityFX Components{{Cite web|url=https://github.com/GPUOpen-Effects/FidelityFX|title=FidelityFX|website=GitHub|date=20 October 2021}} !|Name !|Algorithm !|Source !|Description |
|FidelityFX CAS
|Contrast Adaptive Sharpening |[https://github.com/GPUOpen-Effects/FidelityFX-CAS/ GitHub] |This algorithm adaptively sharpens an image or scene while minimizing artifacts. |
---|
|FidelityFX CACAO
|Combined Adaptive Compute Ambient Occlusion |[https://github.com/GPUOpen-Effects/FidelityFX-CACAO/ GitHub] |This algorithm is an optimized implementation of adaptive sampling ambient occlusion. |
|FidelityFX LPM
|Luminance Preserving Mapper |[https://github.com/GPUOpen-Effects/FidelityFX-LPM/ GitHub] |This algorithm is used to tone map the luma of an RGB pixel rather than tone mapping the color of the pixel. |
|FidelityFX SPD
|Single Pass Downsampler |[https://github.com/GPUOpen-Effects/FidelityFX-SPD/ GitHub] |This algorithm, optimized for the RDNA GPU architecture, is used to generate 12 MIP levels for a given texture. |
|FidelityFX SSSR
|Stochastic Screen Space Reflections |[https://github.com/GPUOpen-Effects/FidelityFX-SSSR/ GitHub] |This algorithm is used to add screen space reflections to a frame or scene. |
|FidelityFX VS
|Variable Shading |[https://github.com/GPUOpen-Effects/FidelityFX-VariableShading GitHub] |This algorithm is used to generate image-based variable rate shading using the luminance of samples in the prior frame. |
|FidelityFX Parallel Sort
|Radix Sort |[https://github.com/GPUOpen-Effects/FidelityFX-ParallelSort GitHub] |This algorithm provides a compute-based radix sort. |
|FidelityFX Denoiser
|Shadow & Reflection Denoiser |[https://github.com/GPUOpen-Effects/FidelityFX-Denoiser GitHub] |This algorithm provides denoising functionality for ray-traced shadows and ray-traced or screen-space reflections. |
|FidelityFX Super Resolution 1
|Spatial Upsampler |[https://github.com/GPUOpen-Effects/FidelityFX-FSR GitHub] |This algorithm is used to upsample an image or frame into a higher resolution using only the spatial information provided in the input frame. |
FidelityFX Super Resolution 2
|Temporal Upscaler |[https://github.com/GPUOpen-Effects/FidelityFX-FSR2 GitHub] |This algorithm is used to upscale frame(s) into a higher resolution using the temporal information provided by input frames. |
== FidelityFX Super Resolution ==
FidelityFX Super Resolution (FSR) is used to upsample an input image into a higher resolution. There are multiple versions of FSR with distinctive upscaling technique and image quality:
- FSR 1 is a spatial upscaler based on or similar to the Lanczos algorithm, requiring an anti-aliased lower resolution image. It also performs edge reconstruction and gradient reversal. This is then followed by a contrast adaptive sharpening pass (RCAS) to reintroduce detail into the final image. (see the cited quotation below for more information)
- "FSR is composed of two main passes:
- An upscaling pass called EASU (Edge-Adaptive Spatial Upsampling) that also performs edge reconstruction. In this pass the input frame is analyzed and the main part of the algorithm detects gradient reversals – essentially looking at how neighboring gradients differ – from a set of input pixels. The intensity of the gradient reversals defines the weights to apply to the reconstructed pixels at display resolution.
- A sharpening pass called RCAS (Robust Contrast-Adaptive Sharpening) that extracts pixel detail in the upscaled image."{{Cite web |title=AMD FidelityFX™ Super Resolution 1 (FSR 1) |url=https://gpuopen.com/fidelityfx-superresolution/ |access-date=2024-05-25 |website=AMD GPUOpen |language=en-GB}}
- FSR 2 is a temporal upscaler based on a modified Lanczos requiring an aliased lower resolution image and utilising the temporal data (such as motion vectors and frame history) and then applies its own antialiasing pass which replaces the game's built in antialiasing solution.
- FSR 3 adds frame generation and "native antialiasing". Frame generation increases the perceived frame rate of a game. "Native antialiasing", similar to Nvidia's DLAA, can be used without upscaling for improved antialiasing; it can also be combined with frame generation and Anti-Lag+.{{cite web|url=https://www.theverge.com/2023/8/25/22372077/amd-starfield-dlss-fsr-exclusive-frank-azor"|title=AMD claims there's nothing stopping Starfield from adding Nvidia DLSS|access-date=6 September 2023|date=24 August 2023|publisher=The Verge}}
The standard presets for FSR by AMD can be found in the table below. Note that these presets are not the only way in which the algorithm can be used, they are simply presets for input/output resolutions. Certain titles, such as Dota 2 have offered resolution sliders to fine tune the scaling percentage or dynamically scaling the internal render resolution depending on the FPS cap. AMD has also created a command line interface tool which allows the user to upscale any image using FSR1/EASU as in addition to other upsampling methods such as Bilinear Interpolation. It also allows the user to run various stages of the FSR pipeline, such as RCAS independently.{{Citation |title=GPUOpen-Effects/FidelityFX-CLI |date=2024-05-21 |url=https://github.com/GPUOpen-Effects/FidelityFX-CLI |access-date=2024-05-25 |publisher=GPUOpen Effects}}
FSR 2 can also be modded into nearly any game supporting DLSS by swapping the DLSS DLL with a translation layer DLL that maps the DLSS API calls to FSR 2 API calls.{{cite web |last=Sims |first=Daniel |date=July 5, 2022 |title=Unofficial FSR 2.0 mod arrives to several more games including Dying Light 2, RDR 2 and Death Stranding |url=https://www.techspot.com/news/95194-amd-fsr-20-mod-comes-several-more-games.html |website=TechSpot |language=en-US}}
{{notelist|refs=
{{efn|name=scale-factor| The linear scale factor used for upsampling the input resolution to the output resolution. For example, a scene rendered at 540p with a 2.00x scale factor would have an output resolution of 1080p.}}
{{efn|name=render-scale| The linear render scale, compared to the output resolution, that the technology uses to render scenes internally before upsampling. For example, a 1080p scene with a 50% render scale would have an internal resolution of 540p.}}
{{efn|name=preset-disclaimer| The algorithm does not necessarily need to be implemented using these presets; it is possible for the implementer to define custom input and output resolutions.}}
{{efn|name="minor-version"|FSR versions stated in italic present hotfixes or minor updates.}}
}}
== Frame Generation ==
FSR 3 adds frame generation, a technique that creates new frames in between existing ones by using motion interpolation. Launching in September 2023, FSR 3 uses a combination of FSR 2 and optical flow analysis, which runs using asynchronous compute (as opposed to Nvidia's DLSS 3 which uses dedicated hardware). Because FSR 3 uses a software-based solution, it is compatible with GPUs from AMD, Nvidia, and Intel as well as the ninth generation of video game consoles. To combat additional latency inherent to the frame generation process, AMD has a driver-level feature called Anti-Lag, which only runs on AMD GPUs.
AMD Fluid Motion Frames (AFMF) is a driver-level frame generation technology launching in Q1 2024 which is compatible with all DirectX 11 and DirectX 12 games, however it runs on RDNA 2 and RDNA 3 GPUs. AFMF uses optical flow analysis but not motion vectors, so it can only interpolate a new frame between two traditionally rendered frames. AFMF currently is not compatible with VSYNC.
== Tools ==
The official AMD directory lists:{{Cite web|url=https://github.com/GPUOpen-LibrariesAndSDKs/|title = GPUOpen Libraries & SDKS|website = GitHub}}
Having been released by ATI Technologies under the BSD license in 2006 HLSL2GLSL is not part of GPUOpen. Whether similar tools for SPIR-V will be available remains to be seen, as is the official release of the Vulkan (API) itself. Source-code that has been defined as being part of GPUOpen is also part of the Linux kernel (e.g. amdgpu and amdkfd{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/gpu/drm/amd?id=refs/tags/v4.2 |title=Linux kernel 4.2 /drivers/gpu/drm/amd}}), Mesa 3D and LLVM.
== Software development kits ==
class="wikitable" style="font-size:85%; text-align:left"
! width="260" | Name ! Source ! API ! OS ! Task |
style="text-align:left" | Advanced Media Framework (AMF) SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/AMF GitHub] | DirectX 12 || Linux, Windows 64-bit || Light-weight, portable multimedia framework that abstracts away most of the platform and API-specific details. |
---|
style="text-align:left" | AMD GPU Services (AGS) SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK GitHub] | DirectX || Windows 64-bit || |
style="text-align:left" | LiquidVR SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/LiquidVR GitHub] | Direct3D 11 || Windows || improves the smoothness of virtual reality.{{cite web |url=http://heise.de/-2566652 |title=LiquidVR: Neues Virtual-Reality-SDK von AMD |author=Heinz Heise |language=de |date=2015-03-04}} The aim is to reduce latency between hardware so that the hardware can keep up with the user's head movement, eliminating the motion sickness. A particular focus is on dual GPU setups where each GPU will now render for one eye individually of the display |
style="text-align:left" | Radeon Machine Learning (RML) SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/RadeonML GitHub] | DirectX 12, Metal, OpenCL || Linux, OS X, Windows || |
style="text-align:left" | Radeon ProRender SDK (formerly FireRender)
| [https://github.com/GPUOpen-LibrariesAndSDKs/RadeonProRenderSDK GitHub] | OpenCL || Linux, macOS, Windows || physically-based rendering engine |
style="text-align:left" | RadeonRays SDK (formerly FireRays)
| [https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK GitHub] | DirectX 12, Vulkan || Linux 64-bit, OS X, Windows 64-bit || A high efficiency, high performance heterogeneous ray tracing intersection library for GPU and CPU or APU on any platform. |
style="text-align:left" | RapidFire SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/RapidFire_SDK GitHub] | DirectX, OpenGL || Windows || facilitates the use of AMD's video compression acceleration SIP blocks VCE (H.264 encoder) and UVD (H.264 decoder) for "Cloud gaming"/off-site rendering |
style="text-align:left" | True Audio Next (TAN) SDK
| [https://github.com/GPUOpen-LibrariesAndSDKs/TAN GitHub] | OpenCL || Windows 64-bit || SDK for Radeon GPU accelerated and multi-core high-performance audio signal processing. |
= Professional Compute =
{{Update section|date=January 2022}}
As of 2022, AMD compute software ecosystem is regrouped under the ROCm metaproject.
File:Linux AMD graphics stack.svg
Software around Heterogeneous System Architecture (HSA), General-Purpose computing on Graphics Processing Units (GPGPU) and High-Performance Computing (HPC)
== {{anchor|HIP}}Radeon Open Compute (ROCm) ==
{{Main|ROCm}}
AMD's "Boltzmann Initiative" (named after Ludwig Boltzmann) was announced in November 2015 at the SuperComputing15{{cite web |url=http://www.anandtech.com/show/9792/amd-sc15-boltzmann-initiative-announced-c-and-cuda-compilers-for-amd-gpus |title=AMD@SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs |author=AnandTech |date=2015-11-16}}{{cite web |url=http://heise.de/-2922782 |title=Supercomputer: AMD startet Software-Offensive "Boltzmann" |author=Heinz Heise |language=de |date=2015-11-17}}{{cite web |url=http://www.3dcenter.org/news/amds-boltzmann-initiative-geht-direkt-gegen-nvidias-cuda |title=AMDs Boltzmann-Initiative geht direkt gegen nVidias CUDA |author=3dcenter.org |language=de |date=2015-11-16}}{{cite web |url=https://www.amd.com/en-us/press-releases/Pages/boltzmann-initiative-2015nov16.aspx |title=AMD Launches 'Boltzmann Initiative' |author=AMD |date=2015-11-16}}{{cite web |url=https://community.amd.com/community/amd-business/blog/2015/11/16/a-defining-moment-for-heterogeneous-computing |title=A Defining Moment for Heterogeneous Computing |author=AMD |date=2015-11-16}} and productized as the Radeon Open Compute platform (ROCm). It aims to provide an alternative to Nvidia's CUDA which includes a tool to port CUDA source-code to portable (HIP) source-code which can be compiled on both HCC and NVCC.
- Radeon Open Compute Kernel (ROCK) driver
- Radeon Open Compute Runtime (ROCR) runtime
- HCC: Heterogeneous Compute Compiler
- HIP: C++ Heterogeneous-Compute Interface for Portability
== Heterogeneous System Architecture ==
{{Main|Heterogeneous System Architecture}}
- HSAIL-GDB: provides an GNU Debugger-based debugging environment for HSA Intermediate Layer (HSAIL)
- HSA Runtime APIs
- Linux amdkfd v1.6.1 release for Kaveri & Carrizo
== Various {{dc|deprecated}} ==
- clFFT library for Fast Fourier transform written in OpenCL
- hcFFT library for Fast Fourier transform written in HCC-optimized C++
Availability
GPUOpen are available under the MIT license to the general public through GitHub starting on January 26, 2016.
There is interlocking between GPUOpen and well established and widespread free software projects, e.g. Linux kernel, Mesa 3D and LLVM.
See also
References
{{Reflist|30em}}
External links
- {{Official website|https://gpuopen.com/}}
- [https://www.pcgamingwiki.com/wiki/List_of_games_that_support_high-fidelity_upscaling List of games that support high-fidelity upscaling] - List moved from Wikipedia to PCGamingWiki
{{AMD graphics}}
Category:Free and open-source software