среда, 27 мая 2009 г.

AMD OpenGL 3.0

На некоторое время отошёл от нововведений в OpenGL, но вот вчера поставил свежий драйвер на свою AMD(ATI) HD 2400 и обнаружил что расширений прибыло:

GL_ARB_draw_instanced
GL_ARB_framebuffer_object
GL_ARB_framebuffer_sRGB
GL_ARB_half_float_pixel
GL_ARB_half_float_vertex
GL_ARB_instanced_arrays
GL_ARB_map_buffer_range
GL_ARB_shader_texture_lod (убрали GL_ATI_xxx_lod)
GL_ARB_texture_compression_rgtc
GL_ARB_vertex_array_object
GL_EXT_bindable_uniform
GL_EXT_draw_buffers2
GL_EXT_gpu_shader4
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_rgtc
GL_EXT_texture_integer
GL_EXT_transform_feedback
GL_NV_conditional_render
GL_NV_copy_depth_to_color (не думал что доступно в железе, может хаком сделали)
WGL_AMDX_gpu_association
WGL_ARB_create_context

+Появилась возможность создавать forward compatible контекст OpenGL 3.0.

Неплохо, только зная AMD(ATI), у меня появились подозрения в работоспособности всего этого богатства. Т. к. SM 4.0 карты от NVIDIA у меня нет (старый GF 6600 способен только на OpenGL 2.1), решил попробовать поиграться с этими features на AMD.

Как я и предполагал, ошибки есть.

Во-первых, forward compatible создаётся нормально, но при попытке вызвать glGetStringi(GL_EXTENSIONS, 0) программа падает (гуглил, у других также падало, или возвращало NULL, у NVIDIA в этом месте тоже проблемы). Другого способа достучаться до поддерживаемых расширений в forward контексте нет. Плюс не фурычит NVIDIA Cg, т. к. понято что там внутри старый вызов glGetString(GL_EXTENSIONS), который возвращает NULL, так что скомпилировать даже простейший шейдер в ARBvp/fp не получается (профили требуют наличия расширений). Пока занавес.

Во-вторых, Conditional Render. Если успешно создать 3.0 контекст, то по идее все entry points из OpenGL 3.0 должны стать доступными. На практике glBeginConditionalRender / glEndConditionalRender оказались недоступны. Но как позже оказалось, это вина GLEW, т. к. получается получить адреса этих функций вручную. Пофиксил.

В остальном пока багов не встретил, демки из GPU Caps Viewer работают нормально (хотя моё старое Z-Trek Demo (2007) всё так же не запускается).

2 комментария:

  1. Странно, что две ошибки из трёх, которые вроде бы были адресованны к AMD(ATI), оказались ошибками в Cg и GLEW.

    Постепенно всё будет исправлено. В первом драйвере с поддержкой GL3.0, например, даже текстуру забиндить без ошибки нельзя было :)

    ОтветитьУдалить
  2. ATI вообще непонятно как тестирует свои драйверы. Достаточно просто запустить пару простых демок и написать test case для тривиальных проверок, но это просто никто не делает.

    Ты и сам знаешь, что у них внутри OpenGL драйвера настоящая каша из нового и legacy кода, так что всё равно всё плачевно. Исправить положение может только новый драйвер from scratch, тот что под forward compatible.

    ОтветитьУдалить