# GPUOpen

GPUOpen es un paquete de software de middleware desarrollado originalmente por Radeon Technologies Group de Advanced Micro Devices (AMD) que ofrece efectos visuales avanzados para juegos de computadora. Fue lanzado en 2016. GPUOpen sirve como una alternativa y un competidor directo de Nvidia GameWorks. GPUOpen es similar a GameWorks en que abarca varias tecnologías gráficas diferentes como sus componentes principales que antes eran independientes y estaban separados entre sí. Sin embargo, GPUOpen es un software de código completamente abierto, a diferencia de GameWorks, que es propietario y cerrado.

## Historia

GPUOpen se anunció el 15 de diciembre de 2015, y se lanzó el 26 de enero de 2016.

## Razón fundamental

Nicolas Thibieroz, gerente sénior de ingeniería de juegos en todo el mundo de AMD, argumenta que "puede ser difícil para los desarrolladores aprovechar su inversión en I+D tanto en consolas como en PC debido a la disparidad entre las dos plataformas" y que "las bibliotecas propietarias o las cadenas de herramientas con las API "black box" evita que los desarrolladores accedan al código con fines de mantenimiento, portabilidad u optimizaciones". Él dice que las próximas arquitecturas, como la serie RX 400 de AMD, "incluyen muchas características que no están expuestas hoy en las API de gráficos de PC".
AMD diseñó GPUOpen para ser una pila de middleware de código abierto competidora lanzada bajo la licencia MIT. Las bibliotecas están destinadas a aumentar la portabilidad del software entre consolas de videojuegos, PC y también computación de alto rendimiento.

## Componentes

GPUOpen unifica muchas de las herramientas y soluciones previamente separadas de AMD en un solo paquete, y también las abre completamente bajo la licencia MIT. GPUOpen también facilita que los desarrolladores obtengan acceso a la GPU de bajo nivel.
Además, AMD quiere otorgar a los desarrolladores interesados el tipo de "acceso directo" de bajo nivel a sus GPU basadas en GCN, que supera las posibilidades de Direct3D 12 o Vulkan. AMD mencionó, por ejemplo, un acceso de bajo nivel a los motores informáticos asíncronos (ACE). El ACE implementa "Cómputo asíncrono", pero no se puede configurar libremente en Vulkan o Direct3D 12.
GPUOpen se compone de varios componentes principales, herramientas y SDK.

### Juegos y CGI

Software para imágenes generadas por computadora (CGI) utilizado en el desarrollo de juegos de computadora y películas por igual.

#### Bibliotecas de efectos visuales

Bibliotecas de efectos visuales GPUOpen :
| Nombre | API | Fuente | Descripción |
| TressFX | DirectX 12, Vulkan | GitHub | Esta biblioteca de efectos visuales permite la creación de cabello, pelaje y hierba realistas. |
| GeometryFX | DirectX 11 | GitHub | Esta biblioteca permite un fácil acceso al filtrado de triángulos basado en computación. |
| DepthOfFieldFX | DirectX 11 | GitHub | Esta biblioteca otorga acceso a una implementación de profundidad de campo optimizada para la arquitectura de GPU GCN a través de un sombreador de cómputo. |
| ShadowFX | DirectX11, DirectX12 | GitHub | Esta biblioteca otorga acceso a una implementación para el filtrado de sombra diferido que está optimizado para la arquitectura de GPU GCN. |
| FidelityFX | DirectX 11, DirectX 12, Vulkan | GitHub | FidelityFX es un conjunto de efectos visuales y bibliotecas auxiliares de efectos. |

#### FidelityFX

Componentes de FidelityFX :
| Nombre | Algoritmo | Fuente | Descripción |
| FidelityFX CAS | Nitidez adaptativa de contraste | GitHub | Este algoritmo agudiza de forma adaptativa una imagen o escena mientras minimiza los artefactos. |
| FidelityFX CACAO | Oclusión ambiental de cómputo adaptativo combinado | GitHub | Este algoritmo es una implementación optimizada de oclusión ambiental de muestreo adaptable. |
| FidelityFX LPM | Mapeador de conservación de luminancia | GitHub | Este algoritmo se utiliza para asignar tonos a la luminancia de un píxel RGB en lugar de asignar tonos al color del píxel. |
| FidelityFX SPD | Remuestreador de un solo paso | GitHub | Este algoritmo, optimizado para la arquitectura GPU RDNA, se utiliza para generar 12 niveles de MIP para una textura dada. |
| FidelityFX SSSR | Reflejos estocásticos del espacio de la pantalla | GitHub | Este algoritmo se utiliza para agregar reflejos en el espacio de la pantalla a un cuadro o escena. |
| FidelityFX VS | Sombreado variable | GitHub | Este algoritmo se utiliza para generar sombreado de tasa variable basado en imágenes utilizando la luminancia de las muestras en el cuadro anterior. |
| FidelityFX Parallel Sort | Clasificación Radix | GitHub | Este algoritmo proporciona una ordenación de radix basada en computación. |
| FidelityFX Denoiser | Eliminador de ruido de sombras y reflejos | GitHub | Este algoritmo proporciona funcionalidad de eliminación de ruido para sombras con trazado de rayos y reflejos con trazado de rayos o espacio de pantalla. |
| FidelityFX Super Resolution 1 | Muestreador ascendente espacial | GitHub | Este algoritmo se usa para aumentar la muestra de una imagen o cuadro a una resolución más alta utilizando solo la información espacial proporcionada en el cuadro de entrada. |
| FidelityFX Super Resolution 2 | Mejora temporal | GitHub | Este algoritmo se utiliza para aumentar la escala de fotogramas a una resolución más alta utilizando la información temporal proporcionada por los fotogramas de entrada. |

#### FidelityFX Super Resolution

FidelityFX Super Resolution (FSR) se utiliza para aumentar la muestra de una imagen de entrada a una resolución más alta. Hay dos versiones de FSR con una técnica de escalado y una calidad de imagen distintivas. FSR 1 es un escalador espacial basado en el algoritmo Lanczos que requiere una imagen de menor resolución con alias, mientras que FSR 2 es un escalador temporal basado en un Lanczos modificado que requiere una imagen con alias de menor resolución y utiliza los datos temporales (como vectores de movimiento e historial de fotogramas), y luego aplica su propio pase de suavizado que reemplaza la solución de suavizado temporal del juego. Los ajustes preestablecidos estándar para FSR de AMD se pueden encontrar en la siguiente tabla. Tenga en cuenta que estos ajustes preestablecidos no son la única forma en que se puede usar el algoritmo, son simplemente ajustes preestablecidos para resoluciones de entrada/salida. Ciertos títulos, como Dota 2, han ofrecido controles deslizantes de resolución para ajustar el porcentaje de escalado o escalar dinámicamente la resolución de procesamiento interna según el límite de FPS.
Historial de versiones :
| Versión | Fecha de lanzamiento | Características destacadas |
| 1.0 / 1.0.1 | junio 2021 | Lanzamiento de FidelityFX Super Resolution (FSR), código fuente disponible en julio de 2021. |
| 1.0.2 | noviembre 2021 | Revisión de nitidez excesiva Robust Contrast-Adaptive Sharpening (RCAS). |
| 2.0.1 / 2.0.1a | marzo 2022 | Lanzamiento de FidelityFX Super Resolution 2.0 (FSR2), código fuente disponible en junio de 2022. |
| 2.1.0 | septiembre 2022 | Efecto fantasma reducido y mejora de la calidad de escalado. Farming Simulator 2022 fue uno de los primeros en adoptarlo con el parche 1.7.1. |
| 2.1.1 | septiembre 2022 | |
| 2.1.2 | octubre 2022 | |
| 2.2.0 / 2.2.0a | noviembre 2022 | Mejoras en el rango HDR, reducción de artefactos fantasma y parpadeo. Código fuente disponible en febrero de 2023. |
Preajustes estándar de FSR :
| Ajuste preestablecido de calidad | Factor de escala | Escala de renderizado |
| Calidad ultra $_{soloenv1.0}$ | 1,30x | 77,0% |
| Calidad | 1.50x | 66,6% |
| Equilibrado | 1.70x | 58,8% |
| Rendimiento | 2.00x | 50,0% |
| Ultra rendimiento $_{desdev2.0}$ | 3.00x | 33,3% |
FSR 2 también se puede modificar en casi cualquier juego compatible con DLSS intercambiando la DLL de DLSS con una DLL de capa de traducción que mapea las llamadas de la API de DLSS a las llamadas de la API de FSR 2.

#### Herramientas

El directorio oficial de AMD enumera:
| Nombre | código fuente | API | Sistema operativo | Tarea |
| CodeXL | CodeXL | Direct3D, OpenGL, OpenCL, Vulkan | Linux Windows | Conjunto de herramientas de desarrollo de software que incluye un depurador de GPU, un perfilador de GPU, un perfilador de CPU, un analizador de núcleo OpenCL estático y varios complementos. |
| Analizador estático para AMD CodeXL | amd-codexl-analyzer | Direct3D, OpenGL, OpenCL | Linux Windows 64bit | Compilador fuera de línea y análisis de rendimiento CLI: herramienta para procesar: núcleos OpenCL, sombreadores HLSL y sombreadores GLSL parte del conjunto de herramientas AMD CodeXL requiere la instalación de Radeon Software Crimson Edition o AMD Catalyst para ejecutar esta herramienta. |
| Complemento D3D 12 para GPU PerfStudio | amd-gpuperfstudio-dx12 | Direct3D 12 | Windows | Un complemento para GPU PerfStudio GPU perfstudio |
| Tootle | amd-tootle | agnostic | Linux Windows | Herramienta de optimización de orden de triángulos; desarrollado originalmente en 2006; se puede integrar fácilmente como parte de una cadena de herramientas de preprocesamiento de renderizado o malla Cf. http://mgarland.org/files/papers/quadrics.pdf |
Habiendo sido lanzado por ATI Technologies bajo la licencia BSD en 2006, HLSL2GLSL no es parte de GPUOpen. Queda por ver si habrá disponibles herramientas similares para SPIR-V, al igual que el lanzamiento oficial de Vulkan (API). El código fuente que se ha definido como parte de GPUOpen también forma parte del kernel de Linux (por ejemplo, amdgpu y amdkfd), Mesa 3D y LLVM.

#### Kits de desarrollo de software

| Nombre | Fuente | API | Sistema operativo | Tarea |
| Advanced Media Framework (AMF) SDK | GitHub | DirectX 12 | Windows 64-bit | Marco multimedia portátil y liviano que abstrae la mayor parte de la plataforma y los detalles específicos de la API. |
| FireRays (RadeonRays) SDK | GitHub | agnostic | 64-bit Linux, OS X, 64-bit Windows | Una biblioteca de intersección de trazado de rayos heterogéneos de alta eficiencia y alto rendimiento para GPU y CPU o APU en cualquier plataforma. |
| FireRender (ProRender) SDK | GitHub | | | motor de renderizado basado en la física |
| LiquidVR SDK | GitHub | Direct3D 11 | Windows | mejora la suavidad de la realidad virtual. El objetivo es reducir la latencia entre el hardware para que el hardware pueda seguir el ritmo del movimiento de la cabeza del usuario, eliminando el mareo por movimiento. Un enfoque particular está en las configuraciones de doble GPU donde cada GPU ahora renderizará para un ojo individualmente de la pantalla |
| RapidFire SDK | GitHub | | | facilita el uso de los bloques SIP de aceleración de compresión de video de AMD VCE (codificador H.264) y UVD (descodificador H.264) para "juegos en la nube"/renderización fuera del sitio |
| True Audio Next (TAN) SDK | GitHub | OpenCL | Windows 64-bit | SDK para procesamiento de señales de audio de alto rendimiento acelerado por GPU Radeon y multinúcleo. |

### Cómputo profesional

A partir de 2022, el ecosistema de software informático de AMD se reagrupa bajo el metaproyecto ROCm.
Software en torno a la arquitectura de sistemas heterogéneos (HSA), computación de propósito general en unidades de procesamiento de gráficos (GPGPU) y computación de alto rendimiento (HPC).

#### Radeon Open Compute (ROCm)

La "Iniciativa Boltzmann" de AMD (llamada así por Ludwig Boltzmann) se anunció en noviembre de 2015 en SuperComputing15 y se convirtió en la plataforma Radeon Open Compute (ROCm). Su objetivo es proporcionar una alternativa a CUDA de Nvidia, que incluye una herramienta para transferir el código fuente de CUDA al código fuente portátil (HIP) que se puede compilar tanto en HCC como en NVCC.
* Controlador Radeon Open Compute Kernel (ROCK)
* Tiempo de ejecución Radeon Open Compute Runtime (ROCR)
* HCC: Heterogeneous Compute Compiler
* HIP: C++ Heterogeneous-Compute Interface for Portability

#### Heterogeneous System Architecture

* HSAIL-GDB: proporciona un entorno de depuración basado en GNU Debugger para HSA Intermediate Layer (HSAIL)
* HSA Runtime APIs
* Lanzamiento de Linux amdkfd v1.6.1 para Kaveri & Carrizo

#### Various deprecated

* Biblioteca clFFT para transformada rápida de Fourier escrita en OpenCL
* Biblioteca hcFFT para la transformada rápida de Fourier escrita en C++ optimizado para HCC

## Disponibilidad

GPUOpen están disponibles bajo la licencia MIT para el público en general a través de GitHub a partir del 26 de enero de 2016.
Existe un entrelazamiento entre GPUOpen y proyectos de software libre bien establecidos y generalizados, p. Núcleo de Linux, Mesa 3D y LLVM.