23 & 26-31 Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
On Tue, Jan 22, 2013 at 12:51 AM, Ian Romanick <i...@freedesktop.org> wrote: > So here it is. > > This is the last of the UBO instance and array instance rework for the > linker. It's a giant pile of patches, so let me explain what's going > on. > > Previous to this patch series, information about the layout of a UBO was > created at compile-time during ast-to-ir translation. This made it > somewhere between difficult and impossible to implement several require > features for OpenGL ES 3.0 conformance. > > 1. Uniform blocks with an instance name. These blocks have different > scoping rules, and the fields are exposed to applications differently > through the GL API. In the shader, these are accessed like structures. > > 2. Arrays of uniform blocks. These basically compound the issues of > instance names. For example, to query the layout of an instance array > block, you do *not* use the array index. > > 3. Marking unused block members and unused blocks as not active. This > was actually way more annoying to deal than I had expected. Even with > the std140 layout, if a block member is never used in a shader, it > should not show up in the active list. > > All of these issues led me to a design that does all of the layout > during linking. This allows our usual dead variable elimination and a > bunch of other nice things. > > To do this, I added a new type called GLSL_TYPE_INTERFACE. Interfaces > work mostly like structures, but they have additional semantic > limitations (imposed by the language). Once that was in place in the > compiler front-end, the linker just needed to detect unused blocks and > block members, cross-validate the blocks, and assign the offsets. > > The bulk of the added code is in link_uniform_blocks. This is the real > work-horse of the whole deal. The functions that do all the > intra-shader layouts and name assignments for the blocks live here. > > Other than the few cases mentioned in individual commit messages, there > are no commit-to-commit piglit or gles3conform regressions. I don't > believe there are any commit-to-commit build failures, but I'll double > check that before I push. > > With this series, i965 passes all of the gles3conform UBO tests on IVB. > I believe there is still one issue on SNB, but I haven't tested it. > > src/glsl/Makefile.sources | 2 + > src/glsl/ast.h | 12 ++- > src/glsl/ast_to_hir.cpp | 248 > +++++++++++++++++++++++++++++++------------------- > src/glsl/builtin_types.h | 74 +++++++-------- > src/glsl/glsl_parser.yy | 82 ++++++++++++----- > src/glsl/glsl_symbol_table.cpp | 14 +-- > src/glsl/glsl_symbol_table.h | 1 - > src/glsl/glsl_types.cpp | 94 +++++++++++++++---- > src/glsl/glsl_types.h | 43 ++++++++- > src/glsl/hir_field_selection.cpp | 3 +- > src/glsl/ir.cpp | 1 - > src/glsl/ir.h | 33 ++++--- > src/glsl/ir_clone.cpp | 12 ++- > src/glsl/link_uniform_block_active_visitor.cpp | 162 > +++++++++++++++++++++++++++++++++ > src/glsl/link_uniform_block_active_visitor.h | 62 +++++++++++++ > src/glsl/link_uniform_blocks.cpp | 313 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/glsl/link_uniform_initializers.cpp | 6 +- > src/glsl/link_uniforms.cpp | 250 > +++++++++++++++++++++++++++++++++++---------------- > src/glsl/linker.cpp | 25 ++---- > src/glsl/linker.h | 45 +++++++++- > src/glsl/lower_ubo_reference.cpp | 104 ++++++++++++++++++--- > src/glsl/opt_dead_code.cpp | 7 +- > src/glsl/tests/uniform_initializer_utils.cpp | 3 + > src/mesa/drivers/dri/i965/brw_fs.cpp | 8 +- > src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 6 +- > src/mesa/drivers/dri/i965/brw_shader.cpp | 8 +- > src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 10 ++- > src/mesa/main/mtypes.h | 27 ++++++ > src/mesa/main/uniforms.c | 2 +- > src/mesa/program/ir_to_mesa.cpp | 26 ++++-- > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 8 +- > 31 files changed, 1355 insertions(+), 336 deletions(-) > > _______________________________________________ > 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