2012-03-20 5 views
0

私はTegra 250 T20を搭載したアンドロイド銀河タブ10.1用のアプリケーションを開発しています。 forループを持つGLSLのシェーダーを作成しています。私はいくつかの条件の下で早期にfor()ループを終了させたい。NVIDIA tegra2のAndroid GLSLフラグメントシェーダ

私が見てきたのは、シェイダーコンパイラがループを解き、解かれていないコード全体が実行されているため、パフォーマンスが低下するということです。

ここに質問があります:Tegra 250 T20は実行フローの指示をまったくサポートしていますか?もしそうなら、どのように実際にそれらを使用するようにコンパイラーに指示することができますか?

ありがとうございました。

ETA:glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION)は、 "OpenGL ES GLSL 1.00"を返します。

また、GLSLで処理できない場合、どうすればARBアセンブリ言語で書くことができますか?

ETA2:GL_EXTENSIONSはこれを持っている: GL_NV_platform_binary GL_OES_rgb8_rgba8 GL_OES_EGL_sync GL_OES_fbo_render_mipmap GL_NV_depth_nonlinear GL_NV_draw_path GL_NV_texture_npot_2D_mipmap GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_vertex_half_float GL_NV_framebuffer_vertex_attrib_array GL_NV_coverage_sample GL_OES_mapbuffer GL_ARB_draw_buffers GL_EXT_Cg_shader GL_EXT _packed_float GL_OES_texture_half_float GL_OES_texture_float GL_EXT_texture_array GL_OES_compressed_ETC1_RGB8_texture GL_EXT_texture_compression_latc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_NV_get_tex_image GL_NV_read_buffer GL_NV_shader_framebuffer_fetch GL_NV_fbo_color_attachments GL_EXT_bgra GL_EXT_texture_format_BGRA8888 GL_EXT_unpack_subimage

GL_NV_texture_compression_s3tc_update

答えて

1

ほとんどの埋め込みプラットフォーム上では、バージョン120-GLSLのみをサポートするすべてのplattformはどんな種類の動的ループもサポートしていないと思います。例:変数を宣言してループのループ頻度を判断することはできません。

唯一の可能性は、該当する場合は複数の条件ブロックで分割することです。

+0

ありがとうございました! glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION)はこれを返します:OpenGL ES GLSL 1.00。 – dashxdr

+0

はい:運が悪いようです。 – devsnd

1

Neigher Tegra頂点シェーダユニットまたはフラグメントシェーダユニットは、動的制御フローをサポートしています。コンパイル時にアンロール可能なループが必要です。他のほとんどのOpenGL ES 2.0実装は動的な制御フローをサポートしていますが、標準ではそれを必要としません。

関連する問題