[Mesa-dev] [PATCH v4 (part2) 44/59] mesa: Add queries for GL_SHADER_STORAGE_BUFFER

Ilia Mirkin imirkin at alum.mit.edu
Wed Aug 5 09:23:55 PDT 2015


On Wed, Aug 5, 2015 at 4:30 AM, Iago Toral Quiroga <itoral at igalia.com> 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 307a5ff..e2bfb5f 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -1044,6 +1044,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) {
> @@ -1932,6 +1936,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;

It definitely strikes me as odd as checking the ext second, after
other things. Is there a reason for doing it this way? (Same below.)

> +      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)
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list