Выпуск спецификации OpenGL 4.6
Наиболее интересным новшеством OpenGL 4.6 является возможность обработки переносимого промежуточного представления шейдеров SPIR-V, изначально разработанного для API Vulkan. SPIR-V универсален для всех платформ и может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров. Избавление драйвера от компилятора шейдеров существенно упрощает драйвер, ускоряет загрузку кода для GPU и делает драйвер независимым от высокоуровневых языков разработки программ для GPU. Для преобразования шейдеров на языке GLSL в представление SPIR-V развивается компилятор glslang, в который уже добавлена поддержка GLSL 4.60.
В основной состав спецификации OpenGL 4.6 включено 11 расширений:
- GL_ARB_gl_spirv и GL_ARB_spirv_extensions для стандартизации поддержки SPIR-V в OpenGL;
- GL_ARB_indirect_parameters и GL_ARB_shader_draw_parameters для снижения нагрузки на CPU при выполнении операций в пакетном режиме, связанных с рендерингом большого числа геометрических примитивов;
- GL_ARB_pipeline_statistics_query и GL_ARB_transform_feedback_overflow_query для стандартизации в OpenGL ранее специфичных для Direct3D средств для получения статистики о ходе выполнения шейдеров и отлавливания переполнения буферов;
- GL_ARB_texture_filter_anisotropic (бывшее расширение GL_EXT_texture_filter_anisotropic) с реализацией метода улучшения визуального качества текстур, на который ранее распространялись патентные ограничения;
- GL_ARB_polygon_offset_clamp (бывшее расширение GL_EXT_polygon_offset_clamp) для устранения часто встречающегося визуального артефакта "утечка света" (light leak), возникающего при отрисовке теней;
- GL_ARB_shader_atomic_counter_ops и GL_ARB_shader_group_vote с реализацией дополнительных функций шейдеров, расширяющих функциональность и производительность решений для рабочего стола (реализация атомарных счётчиков и функции для ускорения композитинга на процессорах SIMD);
- GL_KHR_no_error, позволяет снизить нагрузку на драйвер при выполнении операций, которые заведомо не могут привести к ошибке. При помощи данного расширения приложение может отключить код проверки ошибок в драйвере, что положительно сказывается на производительности;
Добавлено три новшества, которые в дальнейшем будут оформлены как расширения OpenGL:
- GL_KHR_parallel_shader_compile - позволяет приложениям запустить сразу несколько потоков компиляции шейдеров;
- WGL_ARB_create_context_no_error и GXL_ARB_create_context_no_error для отключения контекста обработки ошибок в WGL или GLX.
Для улучшения переносимости с API Vulkan и Direct3D в спецификации OpenGL и OpenGL ES включена порция необязательных расширений для низкоуровневых манипуляций с объектами в памяти и управления синхронизацией выполнения операций с GPU: GL_EXT_memory_object* и GL_EXT_semaphore*. Указанные расширения позволяют импортировать в OpenGL-приложения объекты Vulkan для их привязки к текстурам или буферам в памяти. Для совместимости с Direct3D добавлено расширение GL_EXT_win32_keyed_mutex.
Источник: http://www.opennet.ru/opennews/art.shtml?num=46952
|
0 | Tweet | Нравится |
|