On Tue, 2015-10-27 at 22:38 -0700, Jordan Justen wrote: > Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Samuel Iglesias Gonsálvez <sigles...@igalia.com> > Cc: Iago Toral Quiroga <ito...@igalia.com> > --- > src/glsl/linker.cpp | 14 ++++++++++++++ > src/glsl/standalone_scaffolding.cpp | 5 +++++ > src/mesa/main/mtypes.h | 7 +++++++ > 3 files changed, 26 insertions(+) > > diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp > index 3db2fd3..d925393 100644 > --- a/src/glsl/linker.cpp > +++ b/src/glsl/linker.cpp > @@ -4448,6 +4448,20 @@ link_shaders(struct gl_context *ctx, struct > gl_shader_program *prog) > &prog->ShaderStorageBlocks, > &prog->NumShaderStorageBlocks); > > + prog->UboInterfaceBlockIndex = > + ralloc_array(prog, int, prog->NumUniformBlocks); > + prog->SsboInterfaceBlockIndex = > + ralloc_array(prog, int, prog->NumShaderStorageBlocks); > + for (unsigned i = 0, u = 0, s = 0; > + i < prog->NumBufferInterfaceBlocks; > + i++) { > + if (prog->BufferInterfaceBlocks[i].IsShaderStorage) { > + prog->SsboInterfaceBlockIndex[s++] = i; > + } else { > + prog->UboInterfaceBlockIndex[u++] = i; > + } > + }
This loop is pretty much the same we have in split_ubos_and_ssbos and the functionality implements seems to belong in that function too, so maybe it would be better if we merged this loop in that function. I am thinking that we could pass two more arguments to split_ubos_and_ssbos that would be NULL in the first call (the one we do in the loop for all shader stages) and in the last call we do outside the loop for the shader program, we pass &prog->UboInterfaceBlockIndex and &prog->SsboInterfaceBlockIndex to get these setup. What do you think? > /* FINISHME: Assign fragment shader output locations. */ > > done: > diff --git a/src/glsl/standalone_scaffolding.cpp > b/src/glsl/standalone_scaffolding.cpp > index fe1d820..5c76295 100644 > --- a/src/glsl/standalone_scaffolding.cpp > +++ b/src/glsl/standalone_scaffolding.cpp > @@ -124,6 +124,11 @@ _mesa_clear_shader_program_data(struct gl_shader_program > *shProg) > shProg->InterfaceBlockStageIndex[i] = NULL; > } > > + ralloc_free(shProg->UboInterfaceBlockIndex); > + shProg->UboInterfaceBlockIndex = NULL; > + ralloc_free(shProg->SsboInterfaceBlockIndex); > + shProg->SsboInterfaceBlockIndex = NULL; > + > ralloc_free(shProg->AtomicBuffers); > shProg->AtomicBuffers = NULL; > shProg->NumAtomicBuffers = 0; > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index cce959e..c1cbe96 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -2725,6 +2725,13 @@ struct gl_shader_program > int *InterfaceBlockStageIndex[MESA_SHADER_STAGES]; > > /** > + * Indices into the BufferInterfaceBlocks[] array for Uniform Buffer > + * Objects and Shader Storage Buffer Objects. > + */ > + int *UboInterfaceBlockIndex; > + int *SsboInterfaceBlockIndex; > + > + /** > * Map of active uniform names to locations > * > * Maps any active uniform that is not an array element to a location. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev