OpenGL extension NV.gpu_program5_mem_extended
This module customises the behaviour of the OpenGL.raw.GL.NV.gpu_program5_mem_extended to provide a more Python-friendly API
Overview (from the spec)
This extension provides a new set of storage modifiers that can be used by NV_gpu_program5 assembly program instructions loading from or storing to various forms of GPU memory. In particular, we provide support for loads and stores using the storage modifiers:
.F16X2 .F16X4 .F16 (for 16-bit floating-point scalars/vectors) .S8X2 .S8X4 (for 8-bit signed integer vectors) .S16X2 .S16X4 (for 16-bit signed integer vectors) .U8X2 .U8X4 (for 8-bit unsigned integer vectors) .U16X2 .U16X4 (for 16-bit unsigned integer vectors)
These modifiers are allowed for the following load/store instructions:
LDC Load from constant buffer
LOAD Global load STORE Global store
LOADIM Image load (via EXT_shader_image_load_store) STOREIM Image store (via EXT_shader_image_load_store)
LDB Load from storage buffer (via NV_shader_storage_buffer_object) STB Store to storage buffer (via NV_shader_storage_buffer_object)
LDS Load from shared memory (via NV_compute_program5) STS Store to shared memory (via NV_compute_program5)
For assembly programs prior to this extension, it was necessary to access memory using packed types and then unpack with additional shader instructions.
Similar capabilities have already been provided in the OpenGL Shading Language (GLSL) via the NV_gpu_shader5 extension, using the extended data types provided there (e.g., "float16_t", "u8vec4", "s16vec2").
The official definition of this extension is available here: