On 2015-06-03 00:00:59, Iago Toral Quiroga wrote: > This includes the array of bindings, the current buffer bound to the > GL_SHADER_STORAGE_BUFFER target and a set of general limits and default > values for shader storage buffers. > --- > src/mesa/main/bufferobj.c | 5 +++++ > src/mesa/main/config.h | 2 ++ > src/mesa/main/context.c | 6 ++++++ > src/mesa/main/mtypes.h | 38 ++++++++++++++++++++++++++++++++++++++ > 4 files changed, 51 insertions(+) > > diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c > index 66dee68..c5d4ada 100644 > --- a/src/mesa/main/bufferobj.c > +++ b/src/mesa/main/bufferobj.c > @@ -112,6 +112,11 @@ get_buffer_target(struct gl_context *ctx, GLenum target) > return &ctx->UniformBuffer; > } > break; > + case GL_SHADER_STORAGE_BUFFER: > + if (ctx->Extensions.ARB_shader_storage_buffer_object) { > + return &ctx->ShaderStorageBuffer; > + } > + break; > case GL_ATOMIC_COUNTER_BUFFER: > if (ctx->Extensions.ARB_shader_atomic_counters) { > return &ctx->AtomicBuffer; > diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h > index 5a66a4e..551aad1 100644 > --- a/src/mesa/main/config.h > +++ b/src/mesa/main/config.h > @@ -171,8 +171,10 @@ > #define MAX_PROGRAM_LOCAL_PARAMS 4096 > #define MAX_UNIFORMS 4096 > #define MAX_UNIFORM_BUFFERS 15 /* + 1 default uniform buffer */ > +#define MAX_SHADER_STORAGE_BUFFERS 15
This is just to copy the ubo value? > /* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ > #define MAX_COMBINED_UNIFORM_BUFFERS (MAX_UNIFORM_BUFFERS * 6) > +#define MAX_COMBINED_SHADER_STORAGE_BUFFERS (MAX_SHADER_STORAGE_BUFFERS * > 6) > #define MAX_ATOMIC_COUNTERS 4096 > /* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ > #define MAX_COMBINED_ATOMIC_BUFFERS (MAX_UNIFORM_BUFFERS * 6) > diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c > index 8a59b5e..8577e43 100644 > --- a/src/mesa/main/context.c > +++ b/src/mesa/main/context.c > @@ -615,6 +615,12 @@ _mesa_init_constants(struct gl_constants *consts, gl_api > api) > consts->MaxUniformBlockSize = 16384; > consts->UniformBufferOffsetAlignment = 1; > > + /** GL_ARB_shader_storage_buffer_object */ > + consts->MaxCombinedShaderStorageBlocks = 36; Spec has 8. I guess 36 > 8, so this may be okay, but where is 36 from? > + consts->MaxShaderStorageBufferBindings = 36; Spec has 8. Same comment/question as above. > + consts->MaxShaderStorageBlockSize = 16 * 1024 * 1024; > + consts->ShaderStorageBufferOffsetAlignment = 1; Spec has 256. -Jordan > + > /* GL_ARB_explicit_uniform_location, GL_MAX_UNIFORM_LOCATIONS */ > consts->MaxUserAssignableUniformLocations = > 4 * MESA_SHADER_STAGES * MAX_UNIFORMS; > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 03b8e48..741930d 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3370,6 +3370,15 @@ struct gl_constants > GLuint UniformBufferOffsetAlignment; > /** @} */ > > + /** @{ > + * GL_ARB_shader_storage_buffer_object > + */ > + GLuint MaxCombinedShaderStorageBlocks; > + GLuint MaxShaderStorageBufferBindings; > + GLuint MaxShaderStorageBlockSize; > + GLuint ShaderStorageBufferOffsetAlignment; > + /** @} */ > + > /** > * GL_ARB_explicit_uniform_location > */ > @@ -4015,6 +4024,20 @@ struct gl_uniform_buffer_binding > GLboolean AutomaticSize; > }; > > +struct gl_shader_storage_buffer_binding > +{ > + struct gl_buffer_object *BufferObject; > + /** Start of shader storage block data in the buffer */ > + GLintptr Offset; > + /** Size of data allowed to be referenced from the buffer (in bytes) */ > + GLsizeiptr Size; > + /** > + * glBindBufferBase() indicates that the Size should be ignored and only > + * limited by the current size of the BufferObject. > + */ > + GLboolean AutomaticSize; > +}; > + > /** > * ARB_shader_image_load_store image unit. > */ > @@ -4262,6 +4285,12 @@ struct gl_context > struct gl_buffer_object *UniformBuffer; > > /** > + * Current GL_ARB_shader_storage_buffer_object binding referenced by > + * GL_SHADER_STORAGE_BUFFER target for glBufferData, glMapBuffer, etc. > + */ > + struct gl_buffer_object *ShaderStorageBuffer; > + > + /** > * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1. > * This is set up using glBindBufferRange() or glBindBufferBase(). They > are > * associated with uniform blocks by glUniformBlockBinding()'s state in > the > @@ -4271,6 +4300,15 @@ struct gl_context > UniformBufferBindings[MAX_COMBINED_UNIFORM_BUFFERS]; > > /** > + * Array of shader storage buffers for ARB_shader_storage_buffer_object > + * and GL 4.3. This is set up using glBindBufferRange() or > + * glBindBufferBase(). They are associated with shader storage blocks by > + * glShaderStorageBlockBinding()'s state in the shader program. > + */ > + struct gl_shader_storage_buffer_binding > + ShaderStorageBufferBindings[MAX_COMBINED_SHADER_STORAGE_BUFFERS]; > + > + /** > * Object currently associated with the GL_ATOMIC_COUNTER_BUFFER > * target. > */ > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev