[Mesa-dev] [PATCH v3 (part1) 00/26] ARB_shader_storage_buffer_object (mesa)

Iago Toral Quiroga itoral at igalia.com
Fri Jul 10 03:13:19 PDT 2015


As discussed with Jordan, this v3-part1 series contains a good part of the
frontend stuff (most of which has already been reviewed). The idea is to get
this landed ahead, since some of the remaining patches (specifically the i965
backend stuff) depends on ther patches from Curro that have not landed yet.

For reference, this v3-part1 series does not include all the frontend bits,
specifically it lacks: support for the optional unsized array at the bottom of
SSBO definitions, implementation of layout mode std430, getters and queries
for GL_SHADER_STORAGE_BUFFER targets and glShaderStorageBlockBinding.

Link to the original v2:
http://lists.freedesktop.org/archives/mesa-dev/2015-June/085562.html

Development branch with this series:
git clone -b itoral-ARB_shader_storage_buffer_object-v3-part1 https://github.com/Igalia/mesa.git

For reference, here is a repository with the full v3 series (together with the
patches from Curro it depends on):
git clone -b itoral-ARB_shader_storage_buffer_object-v3 https://github.com/Igalia/mesa.git

Piglit repository including SSBO tests:
git clone -b arb_shader_storage_buffer_object-v2 https://github.com/Igalia/piglit.git

Notice that if you intent to run these with this v3-part1 series you will need
to use:
MESA_EXTENSION_OVERRIDE="GL_ARB_shader_storage_buffer_object"

There are no piglit regressions with this series except for
arb_program_interface_query-getprogramresourceiv, but that is expected since
that test was edited some weeks to incorporate a SSBO in one of the shaders, so
it will abort when it hits that (since the NIR and i965 backend bits are not
included with this v3-part1 series).

As for the SSBO specific piglit tests present in the aforementioned repository,
the results are the ones expected and can be observed here:
http://paste.ubuntu.com/11854375/

Some notes on these results:

- crashes: mostly due to the fact that this part1 series does not provide the
NIR implementation of the new intrinsics, so they hit an assert. The
shader-storage-block-different-size crash is fixed with a patch from Antia that
was part of one of our dEQP series and was also included at the end of our
v2 series: http://lists.freedesktop.org/archives/mesa-dev/2015-June/085642.html
- Other than that, compiler/link tests generally pass and failed tests are
related to missing features (like unsized arrays or queries) or missing i965
backend implementation.

With the full v3 series there are no regressions (except for the
one we discussed with the v1 of this series that is actually a bogus UBO test
for which we sent a fix to piglit).

Iago Toral Quiroga (15):
  mesa: rename is_in_uniform_block to is_in_buffer_block
  nir: add nir_var_shader_storage
  glsl: Identify active uniform blocks that are buffer blocks as such.
  mesa: Add shader storage buffer support to struct gl_context
  mesa: Initialize and free shader storage buffers
  mesa: Implement _mesa_DeleteBuffers for target
    GL_SHADER_STORAGE_BUFFER
  mesa: Implement _mesa_BindBuffersBase for target
    GL_SHADER_STORAGE_BUFFER
  mesa: Implement _mesa_BindBuffersRange for target
    GL_SHADER_STORAGE_BUFFER
  mesa: Implement _mesa_BindBufferBase for target
    GL_SHADER_STORAGE_BUFFER
  mesa: Implement _mesa_BindBufferRange for target
    GL_SHADER_STORAGE_BUFFER
  glsl: Don't do tree grafting on buffer variables
  glsl: Do not kill dead assignments to buffer variables or SSBO
    declarations.
  glsl: Don't do constant propagation on buffer variables
  glsl: Don't do constant variable on buffer variables
  glsl: Don't do copy propagation on buffer variables

Kristian Høgsberg (3):
  glsl: Add ir_var_shader_storage
  glsl: Implement parser support for 'buffer' qualifier
  glsl: link buffer variables and shader storage buffer interface blocks

Samuel Iglesias Gonsalvez (8):
  mesa: define ARB_shader_storage_buffer_object extension
  mesa: add MaxShaderStorageBlocks to struct gl_program_constants
  glsl: enable binding layout qualifier usage for shader storage buffer
    objects
  glsl: shader buffer variables cannot have initializers
  glsl: buffer variables cannot be defined outside interface blocks
  glsl: fix error messages in invalid declarations of shader storage
    blocks
  glsl: Lower shader storage buffer object writes to GLSL IR instrinsics
  glsl: Lower shader storage buffer object loads to GLSL IR instrinsics

 src/glsl/ast.h                                   |   1 +
 src/glsl/ast_to_hir.cpp                          |  81 +++-
 src/glsl/ast_type.cpp                            |   3 +-
 src/glsl/builtin_variables.cpp                   |   5 +-
 src/glsl/glcpp/glcpp-parse.y                     |   3 +
 src/glsl/glsl_lexer.ll                           |   1 +
 src/glsl/glsl_parser.yy                          |  33 +-
 src/glsl/glsl_parser_extras.cpp                  |  65 +--
 src/glsl/glsl_parser_extras.h                    |   7 +
 src/glsl/glsl_symbol_table.cpp                   |  16 +-
 src/glsl/ir.cpp                                  |   3 +
 src/glsl/ir.h                                    |  10 +-
 src/glsl/ir_function.cpp                         |   1 +
 src/glsl/ir_print_visitor.cpp                    |   3 +-
 src/glsl/ir_reader.cpp                           |   2 +
 src/glsl/link_interface_blocks.cpp               |  15 +-
 src/glsl/link_uniform_block_active_visitor.cpp   |   7 +-
 src/glsl/link_uniform_block_active_visitor.h     |   1 +
 src/glsl/link_uniform_blocks.cpp                 |   4 +
 src/glsl/link_uniform_initializers.cpp           |   7 +-
 src/glsl/link_uniforms.cpp                       |  14 +-
 src/glsl/linker.cpp                              |   6 +-
 src/glsl/loop_unroll.cpp                         |   1 +
 src/glsl/lower_named_interface_blocks.cpp        |   5 +-
 src/glsl/lower_ubo_reference.cpp                 | 498 +++++++++++++++++------
 src/glsl/lower_variable_index_to_cond_assign.cpp |   1 +
 src/glsl/nir/glsl_to_nir.cpp                     |   4 +
 src/glsl/nir/nir.h                               |   1 +
 src/glsl/nir/nir_lower_atomics.c                 |   3 +-
 src/glsl/nir/nir_lower_io.c                      |   9 +-
 src/glsl/nir/nir_print.c                         |   5 +-
 src/glsl/nir/nir_validate.c                      |   6 +-
 src/glsl/opt_constant_propagation.cpp            |   8 +
 src/glsl/opt_constant_variable.cpp               |   7 +
 src/glsl/opt_copy_propagation.cpp                |   2 +-
 src/glsl/opt_dead_code.cpp                       |  11 +-
 src/glsl/opt_structure_splitting.cpp             |   5 +-
 src/glsl/opt_tree_grafting.cpp                   |   9 +-
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp   |   2 +-
 src/mesa/main/bufferobj.c                        | 380 +++++++++++++++++
 src/mesa/main/config.h                           |   2 +
 src/mesa/main/context.c                          |   8 +
 src/mesa/main/extensions.c                       |   1 +
 src/mesa/main/mtypes.h                           |  54 +++
 src/mesa/program/ir_to_mesa.cpp                  |   2 +-
 45 files changed, 1076 insertions(+), 236 deletions(-)

-- 
1.9.1



More information about the mesa-dev mailing list