[Mesa-dev] [PATCH v5 56/70] mesa: Add queries for GL_SHADER_STORAGE_BUFFER

Tapani Pälli tapani.palli at intel.com
Tue Sep 15 03:20:12 PDT 2015


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.palli at 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)
>


More information about the mesa-dev mailing list