As what Ilia said .. please move the extension checks first and then check for the value. There is no reason to repeat mistakes done in the past, also there are already getters with correct behavior with image_load_store and shader_atomic_counters in this same function.

Otherwise looks good to me;
Reviewed-by: Tapani Pälli <tapani.pa...@intel.com>

On 09/10/2015 04:36 PM, Iago Toral Quiroga wrote:
These handle querying the buffer name attached to a giving binding point
as well as the start offset and size of that buffer.
---
  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 d5df530..24442f3 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) {
@@ -1935,6 +1939,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 (index >= ctx->Const.MaxShaderStorageBufferBindings)
+         goto invalid_value;
+      if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+         goto invalid_enum;
+      v->value_int = 
ctx->ShaderStorageBufferBindings[index].BufferObject->Name;
+      return TYPE_INT;
+
+   case GL_SHADER_STORAGE_BUFFER_START:
+      if (index >= ctx->Const.MaxShaderStorageBufferBindings)
+         goto invalid_value;
+      if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+         goto invalid_enum;
+      v->value_int = ctx->ShaderStorageBufferBindings[index].Offset < 0 ? 0 :
+                     ctx->ShaderStorageBufferBindings[index].Offset;
+      return TYPE_INT;
+
+   case GL_SHADER_STORAGE_BUFFER_SIZE:
+      if (index >= ctx->Const.MaxShaderStorageBufferBindings)
+         goto invalid_value;
+      if (!ctx->Extensions.ARB_shader_storage_buffer_object)
+         goto invalid_enum;
+      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)

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to