[Mesa-dev] [PATCH 7/9] glsl : Linker support for UBO
Brian Paul
brianp at vmware.com
Mon Oct 17 08:42:28 PDT 2011
On 10/16/2011 04:37 PM, vlj wrote:
> v2 :
> - Fix format issue thank to Brian Paul comments.
> - UBOs are now sent to program correctly.
I only have whitespace suggestions for this file. The new code should
be formatted the same as the existing code. Some examples below.
> ---
> src/glsl/linker.cpp | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 191 insertions(+), 1 deletions(-)
>
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index ba81c59..7d85d4e 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -65,6 +65,7 @@
> */
>
> #include "main/core.h"
> +#include "main/hash.h"
> #include "glsl_symbol_table.h"
> #include "ir.h"
> #include "program.h"
> @@ -784,6 +785,61 @@ get_main_function_signature(gl_shader *sh)
> return NULL;
> }
>
> +/**
> + * TODO : write the function
> + * This function should check consistency between 2 UBO having same name
> + * from different shaders :
> + * - Same layout
> + * - Same variables (name and type) in same order
> + * - Same matrix layout (ie row/column major)
> + */
> +static bool validate_separate_ubo(const ubo& first, const ubo& second)
> +{
> + return true;
> +}
The function should look like:
static bool
validate_separate_ubo(const ubo &first, const ubo &second)
{
return true;
}
> +
> +/**
> + * At intrastage, when several shaders of same type are merged in a single one,
> + * this function generates UBOs of the newly created shader from them and
> + * performs necessary check.
> + */
> +static void merge_intrastage_ubo ( gl_shader_program* prog, struct gl_shader& merged_shader,
> + struct gl_shader **shader_list, unsigned num_shaders)
> +{
> + hash_table *ht = hash_table_ctor(0, hash_table_string_hash,
> + hash_table_string_compare);
> + merged_shader.UBOCount = 0;
> + unsigned& index = merged_shader.UBOCount;
> + if(!merged_shader.UniformBufferObjects)
> + merged_shader.UniformBufferObjects = (struct ubo*) malloc(MAX_UBO_IN_SHADER * sizeof(struct ubo));
> + for (unsigned shad_id=0; shad_id< num_shaders; shad_id++)
> + {
The opening brace should be on the same line as the for (). See other
loops in the file.
> + for(unsigned ubo_id=0; ubo_id< shader_list[shad_id]->UBOCount; ubo_id++)
> + {
> + ubo* current_ubo =&(shader_list[shad_id]->UniformBufferObjects[ubo_id]);
> + ubo* sh = (ubo*) hash_table_find(ht,current_ubo->Name);
> + if(!sh)
> + {
if (!sh) {
[...more examples omitted...]
-Brian
More information about the mesa-dev
mailing list