}
break;
case GL_SHADER_STORAGE_BUFFER:
- if (ctx->Extensions.ARB_shader_storage_buffer_object) {
+ if (ctx->Extensions.ARB_shader_storage_buffer_object || _mesa_is_gles31(ctx)) {
return &ctx->ShaderStorageBuffer;
}
break;
case GL_ATOMIC_COUNTER_BUFFER:
- if (ctx->Extensions.ARB_shader_atomic_counters) {
+ if (ctx->Extensions.ARB_shader_atomic_counters || _mesa_is_gles31(ctx)) {
return &ctx->AtomicBuffer;
}
break;
EXTRA_END
};
+static const int extra_ARB_shader_atomic_counters_es31[] = {
+ EXT(ARB_shader_atomic_counters),
+ EXTRA_API_ES31,
+ EXTRA_END
+};
+
static const int extra_ARB_shader_image_load_store_and_geometry_shader[] = {
EXTRA_EXT_SHADER_IMAGE_GS,
EXTRA_END
EXTRA_END
};
+static const int extra_ARB_shader_image_load_store_es31[] = {
+ EXT(ARB_shader_image_load_store),
+ EXTRA_API_ES31,
+ EXTRA_END
+};
+
/* HACK: remove when ARB_compute_shader is actually supported */
static const int extra_ARB_compute_shader_es31[] = {
EXT(ARB_compute_shader),
EXTRA_EXT(ARB_texture_buffer_range);
EXTRA_EXT(ARB_texture_multisample);
EXTRA_EXT(ARB_texture_gather);
-EXTRA_EXT(ARB_shader_atomic_counters);
EXTRA_EXT(ARB_draw_indirect);
EXTRA_EXT(ARB_shader_image_load_store);
EXTRA_EXT(ARB_query_buffer_object);
/* ARB_shader_storage_buffer_object */
case GL_SHADER_STORAGE_BUFFER_BINDING:
- if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+ if (!ctx->Extensions.ARB_shader_storage_buffer_object && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxShaderStorageBufferBindings)
goto invalid_value;
return TYPE_INT;
case GL_SHADER_STORAGE_BUFFER_START:
- if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+ if (!ctx->Extensions.ARB_shader_storage_buffer_object && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxShaderStorageBufferBindings)
goto invalid_value;
return TYPE_INT;
case GL_SHADER_STORAGE_BUFFER_SIZE:
- if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+ if (!ctx->Extensions.ARB_shader_storage_buffer_object && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxShaderStorageBufferBindings)
goto invalid_value;
return TYPE_INT;
case GL_ATOMIC_COUNTER_BUFFER_BINDING:
- if (!ctx->Extensions.ARB_shader_atomic_counters)
+ if (!ctx->Extensions.ARB_shader_atomic_counters && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxAtomicBufferBindings)
goto invalid_value;
return TYPE_INT;
case GL_ATOMIC_COUNTER_BUFFER_START:
- if (!ctx->Extensions.ARB_shader_atomic_counters)
+ if (!ctx->Extensions.ARB_shader_atomic_counters && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxAtomicBufferBindings)
goto invalid_value;
return TYPE_INT64;
case GL_ATOMIC_COUNTER_BUFFER_SIZE:
- if (!ctx->Extensions.ARB_shader_atomic_counters)
+ if (!ctx->Extensions.ARB_shader_atomic_counters && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxAtomicBufferBindings)
goto invalid_value;
case GL_IMAGE_BINDING_NAME: {
struct gl_texture_object *t;
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
}
case GL_IMAGE_BINDING_LEVEL:
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
return TYPE_INT;
case GL_IMAGE_BINDING_LAYERED:
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
return TYPE_INT;
case GL_IMAGE_BINDING_LAYER:
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
return TYPE_INT;
case GL_IMAGE_BINDING_ACCESS:
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
return TYPE_INT;
case GL_IMAGE_BINDING_FORMAT:
- if (!ctx->Extensions.ARB_shader_image_load_store)
+ if (!ctx->Extensions.ARB_shader_image_load_store && !_mesa_is_gles31(ctx))
goto invalid_enum;
if (index >= ctx->Const.MaxImageUnits)
goto invalid_value;
[ "TEXTURE_BUFFER_OFFSET_ALIGNMENT", "CONTEXT_INT(Const.TextureBufferOffsetAlignment), extra_ARB_texture_buffer_range" ],
# GL_ARB_shader_image_load_store / GLES 3.1
- [ "MAX_IMAGE_UNITS", "CONTEXT_INT(Const.MaxImageUnits), extra_ARB_shader_image_load_store" ],
- [ "MAX_VERTEX_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxImageUniforms), extra_ARB_shader_image_load_store" ],
- [ "MAX_FRAGMENT_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxImageUniforms), extra_ARB_shader_image_load_store" ],
- [ "MAX_COMBINED_IMAGE_UNIFORMS", "CONTEXT_INT(Const.MaxCombinedImageUniforms), extra_ARB_shader_image_load_store" ],
+ [ "MAX_IMAGE_UNITS", "CONTEXT_INT(Const.MaxImageUnits), extra_ARB_shader_image_load_store_es31" ],
+ [ "MAX_VERTEX_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxImageUniforms), extra_ARB_shader_image_load_store_es31" ],
+ [ "MAX_FRAGMENT_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxImageUniforms), extra_ARB_shader_image_load_store_es31" ],
+ [ "MAX_COMBINED_IMAGE_UNIFORMS", "CONTEXT_INT(Const.MaxCombinedImageUniforms), extra_ARB_shader_image_load_store_es31" ],
# GL_ARB_shader_atomic_counters / GLES 3.1
- [ "ATOMIC_COUNTER_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_shader_atomic_counters" ],
- [ "MAX_ATOMIC_COUNTER_BUFFER_BINDINGS", "CONTEXT_INT(Const.MaxAtomicBufferBindings), extra_ARB_shader_atomic_counters" ],
- [ "MAX_ATOMIC_COUNTER_BUFFER_SIZE", "CONTEXT_INT(Const.MaxAtomicBufferSize), extra_ARB_shader_atomic_counters" ],
- [ "MAX_VERTEX_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxAtomicBuffers), extra_ARB_shader_atomic_counters" ],
- [ "MAX_VERTEX_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxAtomicCounters), extra_ARB_shader_atomic_counters" ],
- [ "MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers), extra_ARB_shader_atomic_counters" ],
- [ "MAX_FRAGMENT_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters), extra_ARB_shader_atomic_counters" ],
- [ "MAX_COMBINED_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.MaxCombinedAtomicBuffers), extra_ARB_shader_atomic_counters" ],
- [ "MAX_COMBINED_ATOMIC_COUNTERS", "CONTEXT_INT(Const.MaxCombinedAtomicCounters), extra_ARB_shader_atomic_counters" ],
+ [ "ATOMIC_COUNTER_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_ATOMIC_COUNTER_BUFFER_BINDINGS", "CONTEXT_INT(Const.MaxAtomicBufferBindings), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_ATOMIC_COUNTER_BUFFER_SIZE", "CONTEXT_INT(Const.MaxAtomicBufferSize), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_VERTEX_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxAtomicBuffers), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_VERTEX_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxAtomicCounters), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_FRAGMENT_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_COMBINED_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.MaxCombinedAtomicBuffers), extra_ARB_shader_atomic_counters_es31" ],
+ [ "MAX_COMBINED_ATOMIC_COUNTERS", "CONTEXT_INT(Const.MaxCombinedAtomicCounters), extra_ARB_shader_atomic_counters_es31" ],
# GL_ARB_texture_multisample / GLES 3.1
[ "TEXTURE_BINDING_2D_MULTISAMPLE", "LOC_CUSTOM, TYPE_INT, TEXTURE_2D_MULTISAMPLE_INDEX, extra_ARB_texture_multisample" ],
}
return;
case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
- if (!ctx->Extensions.ARB_shader_atomic_counters)
+ if (!ctx->Extensions.ARB_shader_atomic_counters && !_mesa_is_gles31(ctx))
break;
*params = shProg->data->NumAtomicBuffers;