CygwinでllvmpipeなOpenGLESが動く


いつのまにか、CygwinのパッケージにOpenGLES1/2が追加されていた。Mesaの実装なのでllvmpipeで動く。これでGLESソフトウェア実装猛レースができるな...

  1. Mesa llvmpipe Cygwin/X
  2. ANGLE DX9 + SwiftShader
  3. ANGLE DX11 + WARP

たぶんANGLE+WARPが最速。一切測定してないけど。

プログラムのビルド

以前書いたOpenVGと同様。GLEWの追加インストールが必要(何故かCygwinパッケージに無い)。
OpenVG同様EGLを必要とするので、cygserverを起動した状態でX11を起動する必要がある。

oku@spring /opt/mesa-demos/egl/opengles2
$ ./es2_info.exe
EGL_VERSION: 1.4 (Gallium)
EGL_VENDOR: Mesa Project
EGL_EXTENSIONS:
    EGL_KHR_image_base, EGL_KHR_reusable_sync, EGL_KHR_fence_sync,
    EGL_KHR_surfaceless_context
EGL_CLIENT_APIS: OpenGL OpenGL_ES OpenGL_ES2 OpenVG
GL_VERSION: OpenGL ES 3.0 Mesa 10.2.5
GL_RENDERER: Gallium 0.4 on llvmpipe (LLVM 3.4, 256 bits)
GL_EXTENSIONS:
    GL_EXT_blend_minmax, GL_EXT_multi_draw_arrays,
    GL_EXT_texture_format_BGRA8888, GL_OES_compressed_ETC1_RGB8_texture,
    GL_OES_depth24, GL_OES_element_index_uint, GL_OES_fbo_render_mipmap,
    GL_OES_mapbuffer, GL_OES_rgb8_rgba8, GL_OES_standard_derivatives,
    GL_OES_stencil8, GL_OES_texture_3D, GL_OES_texture_npot,
    GL_OES_EGL_image, GL_OES_depth_texture, GL_OES_packed_depth_stencil,
    GL_EXT_texture_type_2_10_10_10_REV, GL_OES_get_program_binary,
    GL_APPLE_texture_max_level, GL_EXT_discard_framebuffer,
    GL_EXT_read_format_bgra, GL_NV_fbo_color_attachments,
    GL_OES_EGL_image_external, GL_OES_vertex_array_object, GL_EXT_texture_rg,
    GL_EXT_unpack_subimage, GL_NV_draw_buffers, GL_NV_read_buffer,
    GL_EXT_map_buffer_range, GL_OES_depth_texture_cube_map,
    GL_OES_surfaceless_context, GL_EXT_color_buffer_float,
    GL_EXT_separate_shader_objects, GL_EXT_shader_integer_mix

oku@spring /opt/mesa-demos/egl/opengles2
$ ldd ./es2_info.exe
        ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x77520000)
        KERNEL32.DLL => /cygdrive/c/Windows/SYSTEM32/KERNEL32.DLL (0x76b60000)
        KERNELBASE.dll => /cygdrive/c/Windows/SYSTEM32/KERNELBASE.dll (0x76ca0000)
        cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
        cygEGL-1.dll => /usr/bin/cygEGL-1.dll (0x6ffe0000)
        cygGLESv2-2.dll => /usr/bin/cygGLESv2-2.dll (0x6fef0000)
        cygX11-6.dll => /usr/bin/cygX11-6.dll (0x6d120000)
        cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x695e0000)
        cygglapi-0.dll => /usr/bin/cygglapi-0.dll (0x68f20000)
        cygxcb-1.dll => /usr/bin/cygxcb-1.dll (0x633c0000)
        cygXau-6.dll => /usr/bin/cygXau-6.dll (0x6d100000)
        cygXdmcp-6.dll => /usr/bin/cygXdmcp-6.dll (0x6c140000)