Rellena GpuCaps con las capacidades del contexto OpenGL activo: vendor, renderer, version, limites de compute workgroup, flags has_compute_shader/has_storage_buffer, y version CUDA runtime (deteccion en compile-time via CUDART_VERSION). Requiere contexto GL activo. Retorna false si el contexto no esta disponible.
gpu
opengl
cuda
caps
hardware
probe
gfx
compute
infra
gl_loader_cpp_gfx
false
error_go_core
gfx/gpu_check.h
gfx/gl_loader.h
cuda_runtime.h
cstring
string
false
cpp/functions/gfx/gpu_check.cpp
opengl
name
desc
out
Referencia a GpuCaps que se rellena con las capacidades detectadas. Se resetea al inicio de la llamada.
true si el contexto GL esta activo y gl_vendor no esta vacio; false si no hay contexto GL activo o el driver devuelve nullptr para GL_VENDOR.
gpu_check
Probing de capacidades GPU en runtime: OpenGL strings, compute shader support y CUDA.
Uso tipico
#include"gfx/gpu_check.h"#include"gfx/gl_loader.h"// Dentro de render(), despues del primer frame (contexto GL activo):
fn::gfx::GpuCapscaps;if(fn::gfx::gpu_check_caps(caps)){printf("GPU: %s\n",caps.gl_renderer.c_str());printf("Compute shaders: %s\n",caps.has_compute_shader?"yes":"no");if(!caps.cuda_runtime_version.empty())printf("CUDA runtime: %s\n",caps.cuda_runtime_version.c_str());}else{printf("No GL context active\n");}
Estructura GpuCaps
structGpuCaps{std::stringgl_vendor;// "NVIDIA Corporation"
std::stringgl_renderer;// "NVIDIA GeForce RTX 3080/PCIe/SSE2"
std::stringgl_version;// "4.6.0 NVIDIA 550.54.15"
intmax_compute_workgroup_count[3];// [65535, 65535, 65535] tipico NVIDIA
intmax_compute_workgroup_size[3];// [1024, 1024, 64] tipico
boolhas_compute_shader;// GL 4.3+ o ARB_compute_shader
boolhas_storage_buffer;// GL 4.3+ o ARB_shader_storage_buffer_object
std::stringcuda_runtime_version;// "12.4" o "" si no compilado con CUDA
};
CUDA detection
La version CUDA se detecta en compile time via el macro CUDART_VERSION de <cuda_runtime.h>. Si la app no esta compilada con el CUDA toolkit, cuda_runtime_version sera "". Para detection en runtime del toolkit del sistema, usar cuda_toolkit_check_bash_infra.
Requisito de contexto GL
Llamar siempre despues de crear el contexto GL. En apps que usan fn::run_app, el contexto esta activo desde el primer frame del render() callback. En Windows, fn::gfx::gl_loader_init() debe haberse llamado antes para que los punteros de funcion esten resueltos.
Uso previsto (fn doctor cpp-apps)
Esta funcion sera invocada por el audit de fn doctor cpp-apps para verificar que las apps C++ del registry tienen acceso a compute shaders cuando declaran dependencias de gpu_compute_program, gpu_dispatch, etc.
CMakeLists.txt
add_imgui_app(mi_appmain.cpp${CMAKE_SOURCE_DIR}/cpp/functions/gfx/gpu_check.cpp)# CUDA opcional: si la app compila con CUDA toolkit el header cuda_runtime.h
# estara disponible y FN_HAS_CUDA_RUNTIME se activara automaticamente.