2012-03-20 2 views
0

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

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

Возникает вопрос: поддерживает ли 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, не поддерживают какой-либо динамический цикл. Например: вы не можете объявить переменную, чтобы определить, как часто цикл должен зацикливаться.

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

+0

Спасибо за ваш ответ! GlGetString (GLES20.GL_SHADING_LANGUAGE_VERSION) возвращает это: OpenGL ES GLSL 1.00. – dashxdr

+0

Да: так вам показалось, что вам не повезло. – devsnd

1

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