Фрагмент шейдера Android GLSL на NVIDIA tegra2 - PullRequest
0 голосов
/ 20 марта 2012

Я разрабатываю приложение для Android Galaxy Tab 10.1, которое имеет Tegra 250 T20.Я пишу шейдер в GLSL, который имеет цикл for ().Я хочу, чтобы цикл for () завершался досрочно при некоторых условиях.

Я вижу, что шейдерный компилятор размотал цикл и выполняется весь код размотки, что снижает производительность.

Вот вопрос: поддерживает ли Tegra 250 T20 инструкции выполнения?И если да, то как я могу сказать компилятору использовать их на самом деле.

Большое спасибо за любые ответы.

ETA: glGetString (GLES20.GL_SHADING_LANGUAGE_VERSION) возвращает "OpenGL ESGLSL 1.00 ".

Кроме того, если GLSL не может справиться с этим, как я могу написать на языке ассемблера ARB, чтобы сделать это самому?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

Ответы [ 2 ]

1 голос
/ 20 марта 2013

Ни вершинный, ни фрагментный шейдерные блоки Tegra не поддерживают динамический поток управления;вам нужно, чтобы циклы были развернуты во время компиляции.Большинство других реализаций OpenGL ES 2.0 поддерживают динамический поток управления, но стандарт не требует этого.

1 голос
/ 20 марта 2012

На большинстве встроенных платформ - я полагаю, что все платформы, которые поддерживают только версию 120 - GLSL не поддерживает никакой динамической зацикливания. Например: вы не можете объявить переменную, чтобы определить, как часто цикл должен зацикливаться.

Единственная возможность - разделить его на несколько условных блоков, если применимо.

...