From 2e16dd1350703865104253a9d871e4c0a3257933 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 28 Apr 2015 10:08:17 +0200 Subject: [PATCH] mesa: Add queries for GL_SHADER_STORAGE_BUFFER MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit These handle querying the buffer name attached to a giving binding point as well as the start offset and size of that buffer. Reviewed-by: Tapani Pälli Reviewed-by: Kristian Høgsberg --- src/mesa/main/get.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index e643d3a5e36..2390850a0af 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1001,6 +1001,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu case GL_UNIFORM_BUFFER_BINDING: v->value_int = ctx->UniformBuffer->Name; break; + /* GL_ARB_shader_storage_buffer_object */ + case GL_SHADER_STORAGE_BUFFER_BINDING: + v->value_int = ctx->ShaderStorageBuffer->Name; + break; /* GL_ARB_timer_query */ case GL_TIMESTAMP: if (ctx->Driver.GetTimestamp) { @@ -1939,6 +1943,33 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) v->value_int = ctx->UniformBufferBindings[index].Size; return TYPE_INT; + /* ARB_shader_storage_buffer_object */ + case GL_SHADER_STORAGE_BUFFER_BINDING: + if (!ctx->Extensions.ARB_shader_storage_buffer_object) + goto invalid_enum; + if (index >= ctx->Const.MaxShaderStorageBufferBindings) + goto invalid_value; + v->value_int = ctx->ShaderStorageBufferBindings[index].BufferObject->Name; + return TYPE_INT; + + case GL_SHADER_STORAGE_BUFFER_START: + if (!ctx->Extensions.ARB_shader_storage_buffer_object) + goto invalid_enum; + if (index >= ctx->Const.MaxShaderStorageBufferBindings) + goto invalid_value; + v->value_int = ctx->ShaderStorageBufferBindings[index].Offset < 0 ? 0 : + ctx->ShaderStorageBufferBindings[index].Offset; + return TYPE_INT; + + case GL_SHADER_STORAGE_BUFFER_SIZE: + if (!ctx->Extensions.ARB_shader_storage_buffer_object) + goto invalid_enum; + if (index >= ctx->Const.MaxShaderStorageBufferBindings) + goto invalid_value; + v->value_int = ctx->ShaderStorageBufferBindings[index].Size < 0 ? 0 : + ctx->ShaderStorageBufferBindings[index].Size; + return TYPE_INT; + /* ARB_texture_multisample / GL3.2 */ case GL_SAMPLE_MASK_VALUE: if (index != 0) -- 2.30.2