3

GMA500 グラフィックス ハードウェアを搭載した Intel Atom z530 で実行される組み込み OpenGL グラフィックス アプリケーションに取り組んでいます。(GMA500 が内部の PowerVR であることは理解していますが、よくわかりません)。Ubuntu 9.10 Karmic Koala で Tungsten Graphics "Gallium" ドライバーを実行しています。また、1 GB の使用可能なシステム メモリがあることも知っておく必要があります。

ここに問題があります: 512x512x32 のテクスチャ (それぞれ約 1MB) の束を割り当てるコードがあります。これらのうち約 118 ~ 120 になると、OpenGL から「メモリ不足」エラーが発生し、コンソールにも次のメッセージが表示されます。「エラー: INTEL_ESCAPE_ALLOC_REGION が失敗しました」。

これは、「上部」を見ながらの簡単な測定値とともに、テクスチャの最大 128 MB の制限に達していることを示しています。奇妙なことに、このアーキテクチャには専用のビデオ RAM がなく、共有されています。OpenGL がテクスチャにシステム RAM を使用していることは確かです。これは、「空き」RAM が「トップ」で下がっていることがわかるからです。では、なぜ「メモリ不足」エラーが発生するのでしょうか? 私は、opengl が利用可能なシステム RAM をより多く使用することを期待しています。なぜそのような厳しい制限があるのでしょうか? この明らかな「ハードリミット」の設定を変更する方法はありますか?

ありがとう!クリス


glxinfo からの出力は次のとおりです。

$ glxinfo

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_hyperpipe, 
    GLX_SGIX_swap_barrier, GLX_SGIX_fbconfig, GLX_MESA_copy_sub_buffer
client glx vendor string: SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_allocate_memory, 
    GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap
GLX version: 1.2
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_swap_control, 
    GLX_OML_swap_method, GLX_SGI_make_current_read, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_EXT_texture_from_pixmap
OpenGL vendor string: Tungsten Graphics, Inc.
OpenGL renderer string: Gallium 0.1, pipe/psb/Poulsbo on IEGD
OpenGL version string: 2.0 Mesa 7.1
OpenGL shading language version string: 1.10
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_fragment_program, 
    GL_ARB_fragment_shader, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_ARB_occlusion_query, GL_ARB_pixel_buffer_object, 
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shader_objects, 
    GL_ARB_shading_language_100, GL_ARB_shading_language_120, GL_ARB_shadow, 
    GL_ARB_texture_border_clamp, GL_ARB_texture_compression, 
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_non_power_of_two, GL_ARB_texture_rectangle, 
    GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object, 
    GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ARB_window_pos, 
    GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, 
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, 
    GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract, 
    GL_EXT_clip_volume_hint, GL_EXT_compiled_vertex_array, 
    GL_EXT_copy_texture, GL_EXT_draw_range_elements, 
    GL_EXT_framebuffer_object, GL_EXT_framebuffer_blit, GL_EXT_fog_coord, 
    GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, 
    GL_EXT_pixel_buffer_object, GL_EXT_point_parameters, 
    GL_EXT_polygon_offset, GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, 
    GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture, 
    GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod_bias, 
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, 
    GL_EXT_texture_rectangle, GL_EXT_vertex_array, GL_APPLE_packed_pixels, 
    GL_ATI_blend_equation_separate, GL_ATI_separate_stencil, 
    GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat, 
    GL_INGR_blend_func_separate, GL_MESA_ycbcr_texture, GL_MESA_window_pos, 
    GL_NV_blend_square, GL_NV_light_max_exponent, GL_NV_point_sprite, 
    GL_NV_texture_rectangle, GL_NV_texgen_reflection, GL_OES_read_format, 
    GL_SGI_color_matrix, GL_SGIS_generate_mipmap, 
    GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, 
    GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays

    ...truncated visuals part...
4

3 に答える 3

5

共有ビデオ メモリは、使用可能なすべての RAM をテクスチャに使用できるという意味ではありません。通常、グラフィックス ユニットはシステム メモリのスライスのみを取得します。これは、システムの残りの部分ではまったく使用できません。あなたの場合、それは128MiBかもしれません。これは、オンボード チップセット グラフィックスで使用される AGP アパーチャや、Intel Core 統合グラフィックスのフレームバッファ サイズと同じです。

OpenGL は純粋な仮想オブジェクト モデルを宣言するため、各オブジェクトのコピーを「永続的な」メモリに保持する必要があります (GPU のメモリの内容は、VT スイッチ、GPU のリセットなどによっていつでも無効になる可能性があります)。通常のシステムメモリから消費されるもの。

于 2011-01-12T23:58:51.580 に答える
3

小さいまたは圧縮されたテクスチャ、またはパレット化されたテクスチャを使用します。また、GPUリソ​​ースを消費するジオメトリ/ディスプレイリストにも注意してください。

(GL実装がそのようなテクスチャをサポートしていない場合は、シェーダーで自分でパレットルックアップを実行できます。)

于 2011-01-12T21:46:54.373 に答える
1

ミップマッピングを行うために作成されるテクスチャの低解像度のコピーを考慮に入れましたか?

レンダリング速度を上げ、エイリアシングアーティファクトを減らすことを目的とした、メインテクスチャに付随する事前に計算され最適化された画像のコレクション。

これらは2の累乗で減少するため、メインテクスチャに256x256、128x128、64x64、...の画像が表示されます。これにより、単一の画像がある場合よりもはるかに速くテクスチャメモリに食い込みます。

ウィキペディアで使用している例では、元のテクスチャは256x256であり、ミップマップテクスチャを1x1まで取得します。彼らの計算による

これらすべてのミップマップに必要なストレージスペースの増加は、元のテクスチャの3分の1です。

もちろん、これはオフにしていないことを前提としています。

アクセスできるメモリの量を増やす方法については、申し訳ありません。

于 2011-01-12T21:31:24.983 に答える