Консорциум Khronos, занимающийся разработкой графических стандартов, отметил двадцатипятилетие с момента основания стандарта OpenGL публикацией (https://www.khronos.org/news/press/khronos-releases-opengl-4...) новой версии спецификации OpenGL 4.6 (https://khronos.org/registry/OpenGL/index_gl.php), которая стала первым обновлением с момента появления графического API Vulkan (https://www.opennet.ru/opennews/art.shtml?num=41773), пришедшего на смену OpenGL. Для оценки возможностей новой версии API на реальном оборудовании компания NVIDIA выпустила (https://developer.nvidia.com/opengl-driver) бета-версию (381.26.11) драйвера с поддержкой OpenGL 4.6. Сообщается, что любые GPU NVIDIA для которых уже имеется поддержка OpenGL 4.5 являются совместимыми и с OpenGL 4.6. Из открытых драйверов к поддержке новой спецификации наиболее близки (https://mesamatrix.net/) драйверы Intel i965, Nouveau (nvc0) и RadeonSI, в которых реализовано 5 из 11 новых расширений OpenGL 4.6.
Наиболее интересным новшеством OpenGL 4.6 является возможность обработки переносимого промежуточного представления шейдеров SPIR-V (https://www.khronos.org/registry/spir-v/), изначально разработанного для API Vulkan. SPIR-V универсален для всех платформ и может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров. Избавление драйвера от компилятора шейдеров существенно упрощает драйвер, ускоряет загрузку кода для GPU и делает драйвер независимым от высокоуровневых языков разработки программ для GPU. Для преобразования шейдеров на языке GLSL в представление SPIR-V развивается компилятор glslang (https://github.com/KhronosGroup/glslang), в который уже добавлена поддержка GLSL 4.60.
В основной состав спецификации OpenGL 4.6 включено 11 расширений:
- GL_ARB_gl_spirv (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_g...) и GL_ARB_spirv_extensions (https://khronos.org/registry/OpenGL/extensions/ARB/ARB_spirv...) для стандартизации поддержки SPIR-V в OpenGL;
- GL_ARB_indirect_parameters (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_i...) и GL_ARB_shader_draw_parameters (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_s...) для снижения нагрузки на CPU при выполнении операций в пакетном режиме, связанных с рендерингом большого числа геометрических примитивов;
- GL_ARB_pipeline_statistics_query (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_p...) и GL_ARB_transform_feedback_overflow_query (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_t...) для стандартизации в OpenGL ранее специфичных для Direct3D средств для получения статистики о ходе выполнения шейдеров и отлавливания переполнения буферов;
- GL_ARB_texture_filter_anisotropic (https://khronos.org/registry/OpenGL/extensions/ARB/ARB_textu...) (бывшее расширение GL_EXT_texture_filter_anisotropic) с реализацией метода улучшения визуального качества текстур, на который ранее распространялись патентные ограничения;
- GL_ARB_polygon_offset_clamp (https://khronos.org/registry/OpenGL/extensions/ARB/ARB_polyg...) (бывшее расширение GL_EXT_polygon_offset_clamp) для устранения часто встречающегося визуального артефакта "утечка света" (light leak), возникающего при отрисовке теней;
- GL_ARB_shader_atomic_counter_ops (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_s...) и GL_ARB_shader_group_vote (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_s...) с реализацией дополнительных функций шейдеров, расширяющих функциональность и производительность решений для рабочего стола (реализация атомарных счётчиков и функции для ускорения композитинга на процессорах SIMD);
- GL_KHR_no_error (https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_n...), позволяет снизить нагрузку на драйвер при выполнении операций, которые заведомо не могут привести к ошибке. При помощи данного расширения приложение может отключить код проверки ошибок в драйвере, что положительно сказывается на производительности;
Добавлено три новшества, которые в дальнейшем будут оформлены как расширения OpenGL:
- GL_KHR_parallel_shader_compile (https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_p...) - позволяет приложениям запустить сразу несколько потоков компиляции шейдеров;
- WGL_ARB_create_context_no_error и GXL_ARB_create_context_no_error (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_c...) для отключения контекста обработки ошибок в WGL или GLX.
Для улучшения переносимости с API Vulkan и Direct3D в спецификации OpenGL и OpenGL ES включена (https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_e...) порция необязательных расширений для низкоуровневых манипуляций с объектами в памяти и управления синхронизацией выполнения операций с GPU: GL_EXT_memory_object* и GL_EXT_semaphore*. Указанные расширения позволяют импортировать в OpenGL-приложения объекты Vulkan для их привязки к текстурам или буферам в памяти. Для совместимости с Direct3D добавлено расширение GL_EXT_win32_keyed_mutex.
URL: https://www.khronos.org/news/press/khronos-releases-opengl-4...
Новость: http://www.opennet.ru/opennews/art.shtml?num=46952