diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 6a8c80bf535..18fa67d2d74 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -180,12 +180,12 @@ get_buffer_target(struct gl_context *ctx, GLenum target) } 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; diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 96819fad68b..f1c0d042baf 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -407,6 +407,12 @@ static const int extra_ARB_shader_atomic_counters_and_geometry_shader[] = { 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 @@ -422,6 +428,12 @@ static const int extra_ARB_shader_image_load_store_and_tessellation[] = { 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), @@ -527,7 +539,6 @@ EXTRA_EXT2(ARB_texture_cube_map_array, OES_texture_cube_map_array); 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); @@ -2617,7 +2628,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) /* 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; @@ -2626,7 +2637,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2635,7 +2646,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2653,7 +2664,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2662,7 +2673,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2671,7 +2682,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2717,7 +2728,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2728,7 +2739,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) } 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; @@ -2737,7 +2748,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2746,7 +2757,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2755,7 +2766,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; @@ -2764,7 +2775,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) 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; diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py index c4511269256..318b639014d 100644 --- a/src/mesa/main/get_hash_params.py +++ b/src/mesa/main/get_hash_params.py @@ -505,21 +505,21 @@ descriptor=[ [ "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" ], diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 88544179f6e..04428258232 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -914,7 +914,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, } 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;