On 09/23/2011 07:53 AM, vlj wrote:
---
src/mesa/main/mtypes.h | 47 ++++++++++++++++++++++++++++++++++++++++++++-
src/mesa/main/shaderobj.c | 7 ++++++
2 files changed, 53 insertions(+), 1 deletions(-)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index f2eb889..49ae2fa 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1696,6 +1696,14 @@ struct gl_array_attrib
struct gl_buffer_object *ElementArrayBufferObj;
};
+/**
+ * UBO state
+ */
+struct gl_ubo_attribs {
Structures in mtypes.h have the opening brace on a separate line.
+ struct gl_buffer_object *UniformObj;
+ GLint ActiveUBO;
+};
+
/**
* Feedback buffer state
@@ -1840,6 +1848,10 @@ struct gl_program_parameter_list;
struct gl_uniform_list;
+struct gl_uniform_buffer_object_list {
+ unsigned count;
+};
s/count/Count/
+
/**
* Base class for any kind of program object
*/
@@ -1873,6 +1885,7 @@ struct gl_program
struct gl_program_parameter_list *Varying;
/** Vertex program user-defined attributes */
struct gl_program_parameter_list *Attributes;
+ struct gl_uniform_buffer_object_list *Uniform_buffer_objects;
/** Map from sampler unit to texture unit (set by glUniform1i()) */
GLubyte SamplerUnits[MAX_SAMPLERS];
@@ -2138,6 +2151,26 @@ struct gl_sl_pragmas
GLboolean Debug; /**< defaults off */
};
+#define MAX_UBO_IN_SHADER 8
+#define MAX_VARIABLES_IN_UBO 8
#defines like this are typically put in the config.h file.
+
+struct UBOVariableInfo {
+ char* name;
+ unsigned index;
+ const struct glsl_type* Type;
+ unsigned location;
+ unsigned size;
+ unsigned offset;
+ unsigned stride;
+};
Please capitalize the first letter of those members to match the
conventions of other structures.
Also, we typically use the GL types in these structures, so "GLuint
Stride", for example.
+
+struct ubo {
+ char* name;
+ unsigned index;
+ struct UBOVariableInfo* storage_layout;
+ unsigned number_of_variables;
Does number_of_variables indicate the size of the array pointed to by
the storage_layout member? There should be a comment explaining that.
+ unsigned bound_buffer;
+};
/**
* A GLSL vertex or fragment shader object.
@@ -2163,9 +2196,10 @@ struct gl_shader
/** Shaders containing built-in functions that are used for linking. */
struct gl_shader *builtins_to_link[16];
unsigned num_builtins_to_link;
+ struct ubo UniformBufferObjects[MAX_UBO_IN_SHADER];
+ unsigned UBOCount;
};
-
Undo whitespace change.
/**
* A GLSL program object.
* Basically a linked collection of vertex and fragment shaders.
@@ -2203,6 +2237,8 @@ struct gl_shader_program
struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */
struct gl_geometry_program *GeometryProgram; /**< Linked geometry prog */
struct gl_uniform_list *Uniforms;
+
+
Undo whitespace change.
struct gl_program_parameter_list *Varying;
GLboolean LinkStatus; /**< GL_LINK_STATUS */
GLboolean Validated;
@@ -2219,6 +2255,10 @@ struct gl_shader_program
* \c NULL.
*/
struct gl_shader *_LinkedShaders[MESA_SHADER_TYPES];
+
+
Needless whitespace.
+ struct ubo* UniformBufferObjects[MAX_UBO_IN_SHADER];
+ unsigned ubo_count;
};
@@ -3285,6 +3325,11 @@ struct gl_context
struct gl_pixelstore_attrib DefaultPacking; /**< Default params */
/*@}*/
+ /** \name Attributes for UBO */
+ /*@{*/
+ struct gl_ubo_attribs Uniform_Buffer_Object;
+ /*@}*/
You don't need the @-grouping stuff for a single member.
Remove underscores from the member.
+
/** \name Other assorted state (not pushed/popped on attribute stack) */
/*@{*/
struct gl_pixelmaps PixelMaps;
diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c
index f128648..b7e9467 100644
--- a/src/mesa/main/shaderobj.c
+++ b/src/mesa/main/shaderobj.c
@@ -125,6 +125,13 @@ _mesa_delete_shader(struct gl_context *ctx, struct
gl_shader *sh)
{
if (sh->Source)
free((void *) sh->Source);
+ for(unsigned i = 0; i< sh->UBOCount; i++) {
+ free(sh->UniformBufferObjects[i].name);
+ for(unsigned j = 0; j<
sh->UniformBufferObjects[i].number_of_variables;j++) {
+ free(sh->UniformBufferObjects[i].storage_layout[j].name);
+ }
+ free(sh->UniformBufferObjects[i].storage_layout);
+ }
Please use space: "for ("
Don't declare the loop counters inside the for-loop. It won't compile
with MSVC's C compiler.
_mesa_reference_program(ctx,&sh->Program, NULL);
ralloc_free(sh);
}
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev