[Mesa-dev] [PATCH] glsl: Allow any sort of sampler array indexing with GLSL ES < 3.00
Tapani Pälli
tapani.palli at intel.com
Tue Apr 7 03:40:37 PDT 2015
On 04/07/2015 01:22 PM, Francisco Jerez wrote:
> Tapani Pälli <tapani.palli at intel.com> writes:
>
>> From: Kalyan Kondapally <kalyan.kondapally at intel.com>
>>
>> Dynamic indexing of sampler arrays is prohibited by GLSL ES 3.00.
>> Earlier versions allow 'constant-index-expression' indexing, where
>> index can contain a loop induction variable.
>>
>> Patch allows dynamic indexing for sampler arrays when GLSL ES < 3.00.
>> This change makes 'sampler-array-index.frag' parser test in Piglit
>> pass + fishgl.com works when running Chrome on OpenGL ES 2.0 backend.
>>
>> v2: small change and some more commit message (Tapani)
>>
>> Signed-off-by: Kalyan Kondapally <kalyan.kondapally at intel.com>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84225
>
> Looks good, but did you check what happens now if the shader uses actual
> variable indexing (i.e. which lowering cannot turn into a constant) on
> an implementation that doesn't support it? Hopefully no crashes or
> hangs?
I could test something like this, can you throw example of a good victim
platform and some ugly corner case? I have a shader_test that has
expression with a uniform in it as index as a starter.
As a plan B, I think loop analysis could store some information which
can be then used for additional validation of array index in a later
step (skip it in AST and check only later for ES 1.00).
>> ---
>> src/glsl/ast_array_index.cpp | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/glsl/ast_array_index.cpp b/src/glsl/ast_array_index.cpp
>> index ecef651..b2609b6 100644
>> --- a/src/glsl/ast_array_index.cpp
>> +++ b/src/glsl/ast_array_index.cpp
>> @@ -226,7 +226,7 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
>> * dynamically uniform expression is undefined.
>> */
>> if (array->type->element_type()->is_sampler()) {
>> - if (!state->is_version(130, 100)) {
>> + if (!state->is_version(130, 300)) {
>> if (state->es_shader) {
>> _mesa_glsl_warning(&loc, state,
>> "sampler arrays indexed with non-constant "
>> --
>> 2.1.0
More information about the mesa-dev
mailing list