※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Desktop GPU와 OpenGL ES 3.1 API

(원문 : Desktop GPU と OpenGL ES 3.1 API)

OpenGL ES는 Mobile등에서 사용되는 API지만, Desktop 대상 OpenGL에도 적극적으로 이식되어 호환성을 가지게 되었습니다. OpenGL 4.5에서는 GL_ARB_ES3_1_compatibility를 지원하여, OpenGL ES 3.1 API로도 쓸 수 있습니다.

2015/06/25 현재 Windows에서의 대응상황 (beta driver 포함)

Windows           Desktop API   Mobile API
-------------------------------------------------------------
GeForce           OpenGL 4.5    OpenGL ES 3.1 AEP
RADEON            OpenGL 4.5    OpenGL ES 3.1
Intel 4000 (Gen7) OpenGL 4.0    OpenGL ES 3.1    IvyBridge세대
Intel 4600 (7.5)  OpenGL 4.3    OpenGL ES 3.1    Haswell세대

Intel과 GeForce는 OpenGL ES 3.1 Context를 다시 만들 필요가 있습니다. RADEON의 경우는 OpenGL 4.5 Context 그대로 사용합니다. Desktop GPU에서 OpenGL ES를 사용하는 방법에 대해서는 아래 페이지에 정리해두었습니다.

Intel HD Graphics (D3D11 세대)는 OpenGL 4.5에 대응하지 않지만, 새 드라이버에서 OpenGL ES 3.1에 대응합니다. 구체적으로는 Ivy Bridge 세대의 Intel HD Graphics 4000/2500 이후로, BayTrail의 HD Graphics도 포함됩니다.

Intel HD Graphics 4000 (Ivy Bridge) Windows 8.1 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.4226
GL_RENDERER: Intel(R) HD Graphics 4000
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.4226
Intel HD Graphics (BayTrail-T Atom Z3740) Windows 10 x86

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.3993
GL_RENDERER: Intel(R) HD Graphics
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.3993
Intel HD Graphics 4600 (Haswell) Windows 10 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.15.4235
GL_RENDERER: Intel(R) HD Graphics 4600
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10 - Build 10.18.15.4235

GeForce처럼 GL_ANDROID_extension_pack_es31a (AEP)는 없습니다만, Tessellator/GeometryShader 등 일부 기능은 독자적으로 대응이 이루어져있습니다. OpenGL ES 3.1 context에서는 다음 extension이 포함되어 있다는 것을 알 수 있습니다.

GL_INTEL_tessellation
GL_INTEL_geometry_shader

GeForce는 OpenGL ES 3.1 context로 AEP를 지원합니다. 다만 GPU에 따라서는 AEP에서 필요한 일부기능(ASTC Texture)을 소프트웨어로 에뮬레이션하는 것 같습니다. NVIDIA는 Mobile 용으로 GLES Emulator Library를 릴리즈하지 않으므로 그것을 겸하고 있는 것일지도 모릅니다.

RADEON는 OpenGL 4.x 그대로이므로 딱히 기능제한은 없습니다. 따라서 언제든지 GLES API로 OpenGL 4.x에 해당하는 기능을 쓸 수 있습니다.

GPU 별 상세는 아래 페이지에 실어두었습니다. 가능한 범위에서 각 OpenGL ES 3.1 context의 결과도 포함되어있습니다.

관련 글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Android Nexus 6 Adreno 420도 OpenGL ES 3.1 AEP 대응 (Direct3D 11 상당)

(원문 : Android Nexus 6 Adreno 420 も OpenGL ES 3.1 AEP 対応 (Direct3D 11相当))

Nexus 6의 GPU Adreno 420는 OpenGL ES 3.1 AEP(Android Extension Pack)에 대응한다는 것을 알게 되었습니다.

OpenGL ES 3.1은 ComputeShader에 대응합니다. 거기에 더해 OpenGL ES 3.1 AEP에서는 Tessellator (HullShader/DomainShader,TCS/TES)나 GeometryShader 등 Direct3D 11 상당하는 기능이 추가욉니다.

지금까지 판명된 OpenGL ES 3.0 이상에 대응하는 GPU

                SoC               GPU           OpenGL
------------------------------------------------------------------
Kindle Fire HD6 MediaTek MT8135   PowerVR G6430 OpenGL ES 3.0
iPhone/iPad     Apple A7/A8       PowerVR G6430 OpenGL ES 3.0
MeMO Pad ME176  BayTrail-T Z3745  HD Graphics   OpenGL ES 3.0
LG G Watch W100 Snapdragon 400    Adreno 305    OpenGL ES 3.0
Nexus 7(2013)   Snapdragon S4 Pro Adreno 320    OpenGL ES 3.0
Nexus 5         Snapdragon 800    Adreno 330    OpenGL ES 3.0

Nexus 10        Exynos 5 Dual     Mali-T604     OpenGL ES 3.1

Nexus 6         Snapdragon 805    Adreno 420    OpenGL ES 3.1 AEP
Nexus 9         NVIDIA Tegra K1   Kepler(192)   OpenGL ES 3.1 AEP

Nexus 9의 Tegra K1에 이어, 신형 Nexus는 둘다 AEP에 대응하게 되었습니다.

이하 Nexus 6 Snapdargon 805 APQ8084의 GL Extension

Extension:
GL_EXT_debug_marker
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_vertex_half_float
GL_OES_framebuffer_object
GL_OES_rgb8_rgba8
GL_OES_compressed_ETC1_RGB8_texture
GL_AMD_compressed_ATC_texture
GL_KHR_texture_compression_astc_ldr
GL_OES_texture_npot
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_OES_texture_3D
GL_EXT_color_buffer_float
GL_EXT_color_buffer_half_float
GL_QCOM_alpha_test
GL_OES_depth24
GL_OES_packed_depth_stencil
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_EXT_sRGB
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_EXT_texture_type_2_10_10_10_REV
GL_EXT_texture_sRGB_decode
GL_OES_element_index_uint
GL_EXT_copy_image
GL_EXT_geometry_shader
GL_EXT_tessellation_shader
GL_OES_texture_stencil8
GL_EXT_shader_io_blocks
GL_OES_shader_image_atomic
GL_OES_sample_variables
GL_EXT_texture_border_clamp
GL_EXT_multisampled_render_to_texture
GL_OES_shader_multisample_interpolation
GL_EXT_draw_buffers_indexed
GL_EXT_gpu_shader5
GL_EXT_robustness
GL_EXT_texture_buffer
GL_OES_texture_storage_multisample_2d_array
GL_OES_sample_shading
GL_OES_get_program_binary
GL_EXT_debug_label
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent
GL_QCOM_tiled_rendering
GL_ANDROID_extension_pack_es31a
GL_EXT_primitive_bounding_box
GL_OES_standard_derivatives
GL_OES_vertex_array_object
GL_KHR_debug

관련 글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Android 5.0 Nexus 10 Mali-T604는 OpenGL ES 3.1 대응

(원문 : Android 5.0 Nexus 10 Mali-T604 は OpenGL ES 3.1 対応)

OS의 갱신이 시작되어, 어떤 단말은 사용할 수 있는 API가 늘어났습니다. Nexus 10(Exynos 5 Dual 5250)는 Android 5.0에서 OpenGL ES 3.1을 사용할 수 있게 되었습니다. Tegra K1과 달리 AEP에는 대응하지 않습니다.

GL_VERSION: OpenGL ES 3.1
GL_RENDERER: Mali-T604
GL_VENDOR: ARM
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10

자세한 내용은 Extension 페이지↓에 추가했습니다.

아래는 갖고 있는 단말로 조사한 결과입니다.

Nexus의 OpenGL API
Nexus         SoC       GPU          Android 4.4     Android 5.0
----------------------------------------------------------------------
Nexus 7 2012  Tegra 3   ULP GeForce  OpenGL ES 2.0   OpenGL ES 2.0
Nexus 7 2013  APQ8064   Adreno320    OpenGL ES 3.0   OpenGL ES 3.0
Nexus 5       MSM8974   Adreno330    OpenGL ES 3.0   OpenGL ES 3.0
Nesus 10      Exynos 5D Mali-T604    OpenGL ES 3.0   OpenGL ES 3.1
Nesus 9       Tegra K1  Kepler       --              OpenGL ES 3.1 AEP

Amazon Kindle Fire도 Fire OS 4로 갱신되어, Android 4.4 기반이 되었습니다. GPU가 대응하는 경우 OpenGL ES 3.0를 사용할 수 있게 되었습니다.

Amazon Fire의 OpenGL API
Fire               SoC       GPU          FireOS 3       FireOS 4
----------------------------------------------------------------------
Kindle Fire HDX 7  MSM8974 Adreno 330     OpenGL ES 2.0  OpenGL ES 3.0
Fire HD 6          MT8135  PowerVR G6200  --             OpenGL ES 3.0

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

CPU 부하가 낮은 새 3D API

(원문 : CPU 負荷が低い 新しい 3D API)

작년 AMD Mantle을 시작으로 DirectX 12가 발표되고, 얼마전에는 Apple로부터 Metal도 등장했습니다. DirectX 11 이후 정체 혹은 안정되어 있던 상태가 일변, 새로운 GPU용 API로의 흐름이 가속되고 있습니다. 모두가 DirectX11, OpenGL과는 호환성이 없는 새로운 API 집합입니다.

지금까지와 느낌이 크게 다른 건 CPU를 위한 쇄신이라는 점입니다. 새로운 묘화기능에 대한 대응은 없고 딱히 GPU의 하드웨어 성능 추가를 목적으로 한 것도 아닙니다. 목적은 CPU 부하의 경감입니다.

API           Platform   Beta SDK   GPUs
-------------------------------------------------------------
Mantle        Windows    2014/5     RADEON GCN
Direct3D 12   Windows    ?          GCN,Fermi,Kepler,Maxwell
Metal         iOS 8      2014/6     PowerVR G6430

그만큼 높아진 CPU의 부하가 문제가 되고 있다는 말이 되겠습니다.

지금까지는 공통 API의 호환성을 댓가로 두터운 드라이버 레이어가 존재했고, 성능이 향상됨에 따라 CPU가 전송하는 커맨드의 규모도 커졌습니다. Multi Core CPU의 사용이 일반화되었음에도 불구하고, 구태의연한 OpenGL은 스레드를 통한 최적화를 가로막고 있었습니다.

드라이버의 오버헤드는 게임 전용기(Game Console)과 범용기 PC/Smartphone의 큰 차이 중 하나입니다.

간단하게

고정기능은 단계적으로 줄어들어, 3D 묘화에 필요한 알고리즘의 대부분이 애플리케이션 측의 소프트웨어로 구현되게 되었습니다. 범용화가 진행되고 GPU의 용도가 넓어지면서, 기존의 고도의 기능이나 드라이버의 두터운 보호가 오히려 프로그래밍의 자유도를 막기도 합니다.

원래 GPU는 진화속도가 빨라, 기능도 성능도 사용방법도 단기간에 변화해왔습니다. Desktop에서 Mobile로 바뀌어도 마찬가지입니다. 하이레벨에서 통합된 API로는 큰 변화에 따라가기가 힘듭니다. 뭐든지 해주는 명령은 편리하지만, 사양을 정하기 위해서는 어느 정도 쓰임새가 결정되어야 하기 때문입니다. 변경이 빈번해질수록 설계는 보다 심플해지고, 의존을 줄이는 방향으로 진행됩니다.

Direct3D 10에서는 Shader의 통합과 리소스의 Buffer화 같은 개혁이 이루어졌습니다. 실제로 사용해보면 리소스 관리는 생각했던 것처럼 간단하지 않다는 것을 알게 됩니다. Resource View에는 자잘한 플래그 설정이 필요하고, 익숙해질때까지는 조합의 제한으로 고민했습니다. 정말로 자유롭다고 느낀 것은 Direct3D 11의 ComputeShader부터입니다. 용도도 데이터의 사용도 모두 프로그래머가 정할 수 있습니다.

Texture Atlas는 복수의 텍스처를 거대한 텍스처에 통합합니다. 안쪽 배치는 프로그래머가 스스로 관리해야 합니다만, 그 대신 셰이더는 uv만으로 필요한 텍스처를 읽어들일 수 있습니다. 만약 GPU의 메모리 전부를 거대한 한장의 텍스처로 볼 수 있다면 uv는 포인터와 거의 같다고 볼 수 있겠습니다. 현재 리소스 관리는 프로그래머에게 개방되어 있지 않지만, Texture Atlas는 그 제한을 넘기 위한 수법의 하나로 볼 수 있습니다.

OpenGL의 Shader 명령은 DirectX보다도 상당히 나중에 디자인된지라, Uniform의 배치나 셰이더 사이의 바인드도 자동화되어 있습니다. OpenGL 3.x 이후는 메모리 배치를 프로그래머가 정할 수 있게 되었고, 4.x 이후는 심볼의 바인드도 단순한 번호지정으로 바뀌었습니다. Direct3D의 로우레벨 명령에 가까워지고 있습니다.

GPU는 범용성을 늘리고 있습니다만, 호환성 유지를 위한 래핑은 필요 이상으로 복잡해진 감이 있습니다. 새로운 API에서는 CPU 부하의 저감과 동시에 보다 간단하고 쓰기 쉬운 API로의 복귀도 기대할 수 있습니다.

Command Buffer

묘화시에 CPU가 처리하는 것은 Command Buffer의 구축입니다. 말하자면 GPU(Command Processor)가 실행하는 프로그램 그 자체로, 애플리케이션은 프레임마다 동적으로 프로그램을 생성하는 것이라 할 수 있습니다.

드라이버는 GPU의 성능을 최대한 뽑아내게 만들어져있어, 쓸데없는 Command를 생략하는 등의 최적화 처리를 합니다. 하드웨어별로 구조가 다르므로, GPU Native한 형식으로 변환하는 작업도 필요합니다. GPU Command의 생성과 발행은 나름대로 비용이 들어가는 일입니다.

상태값은 Draw 타이밍에 필요하므로, Command의 생성은 묘화명령까지 지연됩니다. Draw 명령에 부하가 집중되어보이는 것은 그 때문입니다.

각종 Buffer화는 Command 부하경감수단의 하나입니다. 파이프라인 상태라면 묘화할때마다 Command Buffer에 쓰여지지만, Buffer에서는 미리 전송시켜둔 리소스를 어사인하는 것만으로 끝나기 때문입니다.

게임 전용기(Console)

게임 전용기는 PC와 사정이 크게 다릅니다.

  • 호환성의 족쇄가 없음
    • 하드웨어 호환성이 불필요(단일 하드)
    • 소프트웨어 호환성을 가지지 않음(SDK의 상위호환성을 가지지 않음)
  • 필요에 따라 더 로우레벨의 최적화수단이 준비됨
  • 하드 내부의 정보가 어느 정도 공개되어 있음

게임 전용기는 수년 사이클로 리프레시되고, 호환성 확보에는 전용 하드웨어 또는 소프트웨어 에뮬레이션이 이용됩니다. 그렇기에 소프트웨어(SDK) 호환성은 그다지 중요하지 않습니다.

처음부터 GPU Native한 형식을 사용할 수 있는 경우도 있고, CPU의 오버헤드도 PC와 비교하면 상당히 낮습니다.

필요에 따라 보다 로우레벨의 최적화가 가능한 것도 전용기의 특징입니다.

최근에는 그런 경우가 적어진 듯 하지만, 예를 들자면 GPU Command를 직접 조작할수 있는 경우 사전에 모델 데이터를 GPU Native한 Command 형식으로 변환해둘 수 있습니다. 메모리에 Buffer Data와 Command Buffer를 로드하는 것 만으로 묘화가 가능해집니다. 동적인 Command 생성과 비교하여 CPU 부하는 거의 생기지 않습니다. (다만 몇가지 트레이드 오프가 발생하므로 항상 최선의 방법이라고는 할 수 없음)

하드의 내부구조가 어느 정도 공개되어 있다는 점도 프로그래머의 부담을 줄여줍니다. 묘화 알고리즘의 설계시에 내부의 구조를 알고 있으면 어떤 방법이 효율이 좋은지 어느 정도 판단할 수 있어, 고민할 필요가 줄어듭니다.

호환성과 앞으로의 전망

  • 게임 전용기와의 차이가 적어진다
  • API의 분열
  • 새 API는 현재의 CPU/GPU 성능과 사용법에 맞춰 재설계되었습니다. 전체적인 동작효율이 올라가고, CPU 오버헤드가 경감되는 등 퍼포먼스 특성이 보다 게임 전용기에 가까워져갈 것입니다. 그 반면, 현재는 플랫폼별로 사양이 분단되어 있어, 호환성이라는 새로운 과제가 남겨집니다.

    OpenGL ES 2.0는 모바일에서 브라우저까지 플랫폼의 벽을 넘어 이용되고 있고, 통일된 API로서 큰 의미를 갖고 있습니다. 마찬가지로 앞으로도 OpenGL ES 3.0/3.1이 널리 이용될것인가하면 반드시 그럴 것 같지도 않습니다. 특히 iOS의 경우에는 Metal 대응기기와 일치하기에, 성능이나 기능을 위해 OpenGL ES 3.0을 선택할 메리트가 사라집니다.

                                          ES2.0  ES3.0  Metal
    ----------------------------------------------------------
    Apple A5/A6    PowerVR SGX543/554       Y      -      -
    Apple A7       PowreVR G6430            Y      Y      Y

    Android의 ES 3.0이나 Desktop의 OpenGL 4.x와 호환성을 가지기 위해서는 필요합니다만, 성능이나 쉬운 사용을 우선한다면 Metal이 선택될 가능성이 높습니다. 용도에 따라 적절하게 사용될 듯 합니다.

    그렇다고는 해도 각종 플랫폼에 개별적으로 대응하는 건 큰일입니다. OpenGL의 Low Overhead Profile이나 Multi thread Extension처럼, 플랫폼을 넘어선 새로운 사양의 등장을 기대합니다.

    관련 페이지

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Android의 새 BayTrail-T Intel HD Graphics

(원문 : Android の新しい GPU BayTrail-T Intel HD Graphics)

Bay Trail-T 탑재 Android 단말이 발매되었기에 간단하게 조사해보았습니다. Android 단말에 사용되는 GPU 종류에 Intel HD Graphics가 새롭게 추가되었습니다.

Qualcomm     Adreno
Imagination  PowerVR
NVIDIA       Tegra
ARM          Mali
Vivante      GC
Intel        HD Graphics   ← NEW

Adreno 320/330, Mali-T604, PowerVR G6430 (iOS) 다음으로 입수가능한 OpenGL ES 3.0 대응단말이 되었습니다.

대응하는 Extension은 다음과 같습니다.

// ASUS MeMO Pad 7 ME176 Android 4.4
// Atom Z3745 x86 RAM 1GB

GL_VENDOR: Intel
GL_RENDERER: Intel(R) HD Graphics for BayTrail
GL_VERSION: OpenGL ES 3.0 - Build eng.yunweiz.20140425.225700

GL_EXT_blend_minmax
GL_EXT_multi_draw_arrys
GL_SUN_multi_draw_arrys
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_compression_s3tc
GL_EXT_texture_lod_bias
GL_EXT_color_buffer_float
GL_EXT_packed_float
GL_EXT_texture_rg
GL_INTEL_performance_queries
GL_EXT_texture_storage
GL_OES_EGL_image
GL_OES_framebuffer_object
GL_OES_depth24
GL_OES_stencil8
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_ARM_rgba8
GL_OES_depth_texture
GL_EXT_color_buffer_half_float
GL_OES_vertex_half_float
GL_EXT_shadow_samplers
GL_OES_point_sprite
GL_OES_blend_subtract
GL_OES_blend_func_separate
GL_OES_blend_qeuation_separate
GL_OES_standard_derivatives
GL_OES_read_format
GL_OES_mapbuffer
GL_EXT_discard_framebuffer
GL_EXT_texture_format_BGRA8888
GL_OES_compressed_paletted_texture
GL_OES_ELG_image_external
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_fixed_point
GL_OES_vertex_array_object
GL_OES_get_program_binary
GL_OES_texture_3D
GL_OES_texture_cube_map
GL_OES_fbo_render_mipmap
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_OES_stencil_wrap
GL_OES_element_index_uint
GL_OES_texture_npot
GL_OES_texture_mirrored_repeat
GL_EXT_sRGB
GL_EXT_frag_depth
GL_APPLE_texture_max_level
GL_EXT_occlusion_query_boolean
GL_INTEL_timer_query
GL_ANGLE_texture_compression_dxt1
GL_ANGLE_texture_compression_dxt3
GL_ANGLE_texture_compression_dxt5
GL_EXT_texture_compression_dxt1
GL_OES_required_internalformat
GL_EXT_separate_shader_objects
GL_OES_surfaceless_context
GL_OES_EGL_sync
GL_EXT_robustness
GL_EXT_shader_texture_lod
GL_EXT_unpack_subimage
GL_EXT_read_format_bgra
GL_EXT_debug_marker
GL_KHR_blend_equation_advanced
GL_EXT_shader_integer_mix

대응하는 압축 텍스처 포맷은 ETC2/EAC, ETC1, DXT(S3TC). DirectX11 세대의 GPU라 기능쪽으로 걱정할 필요는 없을 것 같습니다.

Android 용으로는 BayTrail 외에도 새로운 Atom(Silvermont core) SoC로 Z3400/Z3500(Moorefield)가 발표되었습니다. 탑재 GPU는 Intel HD Graphics가 아닌 PowerVR G6400입니다.

실제로 2014/5/8에 au에서 Z3580를 탑재한 MeMO Pad 8이 발표되었습니다. 발매자체는 8월로 좀 더 있어야합니다.

Tablet            SoC   core clock   display    GPU
---------------------------------------------------------------------
MeMO Pad 7 ME176  Z3745  4  1.86GHz  1280x800   Intel HD Graphics 4EU
MeMO Pad 8 ME181  Z3745  4  1.86GHz  1280x800   Intel HD Graphics 4EU
MeMO Pad 8 (au)   Z3580  4  2.33GHz  1920x1200  PowerVR G6430

PowerVR G6430은 Full HD 모델에 사용됩니다. ME176/ME181의 화면사이즈는 대다수의 Windows Tablet과 마찬가지로 1280x800 이므로, 순수한 GPU 성능으로는 Intel HD Graphics (4EU)보다 PowerVR G6430 쪽이 높지 않을까 싶습니다.

SoC core CPU-clock  GPU                   GPU-clock  fop   GFLOPS
-----------------------------------------------------------------
Z3745  4  1.86GHz   Intel HD Graphics 4EU   778MHz    64     49.8
Z3580  4  2.33GHz   PowerVR G6430           533MHz   256    136.4

Android에서도 x86 단말이 드물지 않게 되었습니다. CPU 자체는 x64에도 대응합니다.

앞으로는 Android도 64bit에 대응하리라 생각됩니다만, 기존의 단말에 대해서 64bit 판이 제공될지는 알 수 없습니다. 당분간은 구입할 타이밍을 잡기 힘든 상태가 될 것 같습니다.

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

iOS7과 iPhone 5s의 sRGB 대응과 텍스처 포맷

(원문 : iOS7 と iPhone 5s の sRGB 対応とテクスチャフォーマット)

iPhone 5s가 발매되어 OpenGL ES 3.0 대응 단말이 늘어났습니다. OpenGL ES 3.0에 대응하는 입수가능 단말로서는 3종류째의 GPU입니다.

  • Nexus 10 ( Android 4.3 + Mali-T604 )
  • Nexus 7(2013)/Nexus 4 ( Android 4.3 + Adreno 320 )
  • iPhone 5s ( iOS 7 + Apple A7 GPU )

Nexus 10용으로 작성된 OpenGL ES 3.0의 묘화 코드도 iPhone 5s에서 쉽게 동작했습니다. 역시 Adreno 320에서는 아직 문제가 좀 남아있는 것 같습니다.

sRGB

OpenGL ES 3.0를 이용할 수 있는 것은 Apple A7를 탑재한 iPhone 5s 뿐이지만, iOS 7.0로 갱신함으로써 종래 단말에서도 기능확장이 이루어진 듯 합니다. 그 하나가 지난회 기사에서 이야기한 sRGB 대응입니다.

iPhone 5s의 OpenGL ES 3.0에서 sRGB를 다룰수 있게 된 것은 당연하지만, iPad 4나 iPhone 5 등 PowerVR SGX554MP/543MP에서도 extension으로 동등한 상호변환이 지원되게 되었습니다. (아래 페이지도 갱신)

예를 들면 PVRTC에서도 GL_EXT_pvrtc_sRGB에 의해 sRGB에서 리니어로 변환할 수 있게 되어 있습니다.

  • GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
  • GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
  • GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
  • GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT

지난번의 표↓를 갱신했습니다.

          OpenGL ES 3.0 での sRGB 対応
-----------------------------------------
ETC1         가능(ETC2)
ETC2         가능
PVRTC  (v1)  가능         (PowerVR 만)
PVRTC2 (v2)  가능         (PowerVR 만)
ATITC        불가         (Adreno 만)
ASTC         가능
S3TC(DXT1)   가능

iOS에서 대응하는 포맷은 PVRTC (v1)뿐으로 PVRTC2 (v2)는 포함되지 않는 것 같습니다. 또 프레임버퍼에 대해 리니어에서의 변환 GL_EXT_sRGB)도 지원하고 있습니다.

iOS는 원래 Renderbuffer를 직접 만들었으므로, EGL/WGL같은 기능선택은 불필요합니다. 또한 GLK (GLKit)이라면 한줄 바꾸는 것 만으로 대응되므로, Android에서 고생하던 것이 거짓말처럼 간단하게 처리되었습니다.

PowerVR SGX535 (iPhone4)는 미확인이지만, SGX543MP/554MP에서는 iOS 7.0 에서 Apple A7 GPU와 마찬가지로 동작하고 있음이 확인되었습니다.

텍스처 포맷

iOS에서도 OpenGL ES 3.0에서는 Android와 마찬가지로 ETC2/EAC를 이용할 수 있게 되었습니다. Android 등 다른 환경과 호환성을 유지하기 쉽게 되었습니다.

                           ETC1  ETC2/EAC  DXT(S3TC)  PVRTC(v1)  ATITC
----------------------------------------------------------------------
iOS PowerVR        ES 2.0   --     --        --        ◎         --
iOS PowerVR?       ES 3.0   ◎     ◎        --        ◎         --
Android PowerVR    ES 2.0   ◎     --        --        ◎         --
Android Tegra2/3/4 ES 2.0   ◎     --        ◎        --         --
Android Adreno200  ES 2.0   ◎     --        --        --         ◎
Android Adreno300  ES 3.0   ◎     ◎        --        --         ◎
Android Mali400    ES 2.0   ◎     --        --        --         --
Android Mali600    ES 3.0   ◎     ◎        --        --         --

Android의 모든 단말과 iOS ES 3.0 이후는 ETC1의 읽기가 가능합니다.

Android/iOS 구별없이 현 상황의 모든 OpenGL ES 3.0 디바이스에서 ETC2/EAC를 사용할 수 있습니다.

관련글

+ Recent posts