[Mesa-dev] [PATCH 00/32] UBOs for OpenGL ES 3.0

Jordan Justen jljusten at gmail.com
Fri Jan 25 02:04:27 PST 2013


23 & 26-31
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

On Tue, Jan 22, 2013 at 12:51 AM, Ian Romanick <idr at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list