[Mesa-dev] [PATCH v2 00/82] ARB_shader_storage_buffer_object (mesa, i965)
Iago Toral Quiroga
itoral at igalia.com
Wed Jun 3 00:00:50 PDT 2015
Link to v1:
http://lists.freedesktop.org/archives/mesa-dev/2015-May/084196.html
Changes in v2:
- Drop obsolete FS visitor support
- Add FS NIR implementation
- Use "is_shader_storage" flag names instead of "is_buffer" (Jordan)
- Modify lower_ubo_reference to merge emit_sso_writes and emit_ubo_loads into a
single function (Jordan)
- Rename ir_var_buffer to ir_var_shader_storage (Jordan)
Development branch with the patches and some dependencies (*):
git clone -b itoral-ARB_shader_storage_buffer_object-v2.0 https://github.com/Igalia/mesa.git
(*) The i965 implementation needs to use untyped read/write messages
to implement SSBO reads/writes which are also used in the implementation
of ARB_shader_image_load_store that Curro is working on. The branch
linked above includes these patches from Curro as well as a general bugfix
(not SSBO-specific) Antia that is necessary for correct behavior in some
scenarios involving instance arrays.
Piglit repository including SSBO tests:
git clone -b arb_shader_storage_buffer_object-v1 https://github.com/Igalia/piglit.git
Antia Puentes (1):
glsl: Consider active all elements of a shared/std140 block array
Iago Toral Quiroga (46):
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: Do not do CSE for expressions involving SSBO loads
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
mesa: Add new IR node ir_ssbo_store
glsl: Lower shader storage buffer object writes to ir_ssbo_store
glsl: Do constant folding on ir_ssbo_store
i965: Use 16-byte offset alignment for shader storage buffers
i965: Implement DriverFlags.NewShaderStorageBuffer
i965: Set MaxShaderStorageBuffers for compute shaders
i965: Upload Shader Storage Buffer Object surfaces
i965: handle visiting of ir_var_shader_storage variables
i965/fs: Do not split buffer variables
i965/fs: Do not include the header with a pixel mask in untyped read
messages
i965/vec4: Implement SSBO writes
nir: implement ir_ssbo_store
i965/nir/fs: Implement SSBO writes
i965/vec4: Implement SSBO reads
nir: implement ir_binop_ssbo_load
i965/nir/fs: Implement SSBO reads
nir: ignore an instruction's dest if it hasn't any
glsl: Rename atomic counter functions
glsl: Add atomic functions from ARB_shader_storage_buffer_object
nir: Add SSBO atomic operations
i965/nir/fs: Implement SSBO atomics
i965/vec4: Implement SSBO atomics
glsl: First argument to atomic functions must be a buffer variable
mesa: Add queries for GL_SHADER_STORAGE_BUFFER
glsl: Allow use of memory qualifiers with
ARB_shader_storage_buffer_object.
glsl: Apply memory qualifiers to buffer variables
glsl: Allow memory layout qualifiers on shader storage buffer objects
glsl: Do not allow assignments to read-only variables
glsl: Do not allow reads from write-only variables
docs: Mark ARB_shader_storage_buffer_object as done for i965.
i965/vec4: Skip dependency control for opcodes emitting multiple
instructions
Kristian Høgsberg (7):
glsl: Add ir_var_shader_storage
glsl: Implement parser support for 'buffer' qualifier
glsl: link buffer variables and shader storage buffer interface blocks
glsl: Add ir_binop_ssbo_load expression operation.
glsl: lower SSBO reads to ir_binop_ssbo_load expressions
i965: do not emit_bool_to_cond_code with ssbo load expressions
glsl: atomic counters can be declared as buffer-qualified variables
Samuel Iglesias Gonsalvez (28):
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: add support for unsized arrays in shader storage blocks
glsl: Add parser/compiler support for unsized array's length()
nir: add shader storage buffer's unsized array length calculation
i965/vec4: Implement unsized array's length calculation
i965/fs: Implement generator code for unsized array's length
calculation
i965/fs/nir: implement unsized array's length calculation
i965/wm: emit null buffer surfaces when null buffers are attached
i965/wm: surfaces should have the API buffer size, not the drm buffer
size
glsl: Add parser/compiler support for std430 interface packing
qualifier
glsl: propagate interface packing information to arrays of scalars,
vectors.
glsl: propagate std430 packing qualifier to struct's members and array
of structs
glsl: add std430 interface packing support to ssbo writes and unsized
array length
glsl: a shader storage buffer must be smaller than the maximum size
allowed
glsl: number of active shader storage blocks must be within allowed
limits
glsl: ignore buffer variables when counting uniform components
mesa: add glShaderStorageBlockBinding()
glsl: fix UNIFORM_BUFFER_START or UNIFORM_BUFFER_SIZE query when no
buffer object is bound
main: Add SHADER_STORAGE_BLOCK and BUFFER_VARIABLE support for
ARB_program_interface_query
main/tests: add ARB_shader_storage_buffer_object tokens to
enum_strings
glapi: add ARB_shader_storage_block_buffer_object
mesa: Add getters for the GL_ARB_shader_storage_buffer_object max
constants
i965: Enable ARB_shader_storage_buffer_object extension for gen7+
docs/GL3.txt | 2 +-
src/glsl/ast.h | 12 +
src/glsl/ast_array_index.cpp | 6 +-
src/glsl/ast_function.cpp | 37 ++
src/glsl/ast_to_hir.cpp | 362 ++++++++++--
src/glsl/ast_type.cpp | 4 +-
src/glsl/builtin_functions.cpp | 215 ++++++-
src/glsl/builtin_types.cpp | 3 +-
src/glsl/builtin_variables.cpp | 5 +-
src/glsl/glcpp/glcpp-parse.y | 3 +
src/glsl/glsl_lexer.ll | 11 +-
src/glsl/glsl_parser.yy | 110 +++-
src/glsl/glsl_parser_extras.cpp | 65 ++-
src/glsl/glsl_parser_extras.h | 7 +
src/glsl/glsl_symbol_table.cpp | 16 +-
src/glsl/glsl_types.cpp | 203 +++++--
src/glsl/glsl_types.h | 48 +-
src/glsl/hir_field_selection.cpp | 15 +-
src/glsl/ir.cpp | 14 +
src/glsl/ir.h | 84 ++-
src/glsl/ir_function.cpp | 1 +
src/glsl/ir_hierarchical_visitor.cpp | 18 +
src/glsl/ir_hierarchical_visitor.h | 2 +
src/glsl/ir_hv_accept.cpp | 23 +
src/glsl/ir_print_visitor.cpp | 15 +-
src/glsl/ir_print_visitor.h | 1 +
src/glsl/ir_reader.cpp | 2 +
src/glsl/ir_rvalue_visitor.cpp | 21 +
src/glsl/ir_rvalue_visitor.h | 3 +
src/glsl/ir_uniform.h | 5 +
src/glsl/ir_validate.cpp | 18 +
src/glsl/ir_visitor.h | 2 +
src/glsl/link_interface_blocks.cpp | 15 +-
src/glsl/link_uniform_block_active_visitor.cpp | 24 +
src/glsl/link_uniform_block_active_visitor.h | 1 +
src/glsl/link_uniform_blocks.cpp | 36 +-
src/glsl/link_uniform_initializers.cpp | 3 +-
src/glsl/link_uniforms.cpp | 49 +-
src/glsl/linker.cpp | 166 ++++--
src/glsl/linker.h | 1 +
src/glsl/loop_unroll.cpp | 1 +
src/glsl/lower_named_interface_blocks.cpp | 5 +-
src/glsl/lower_ubo_reference.cpp | 645 ++++++++++++++++-----
src/glsl/lower_variable_index_to_cond_assign.cpp | 1 +
src/glsl/nir/glsl_to_nir.cpp | 105 +++-
src/glsl/nir/nir.h | 1 +
src/glsl/nir/nir_intrinsics.h | 35 +-
src/glsl/nir/nir_lower_atomics.c | 3 +-
src/glsl/nir/nir_lower_io.c | 9 +-
src/glsl/nir/nir_lower_phis_to_scalar.c | 2 +
src/glsl/nir/nir_print.c | 5 +-
src/glsl/nir/nir_validate.c | 6 +-
src/glsl/opt_constant_folding.cpp | 16 +
src/glsl/opt_constant_propagation.cpp | 8 +
src/glsl/opt_constant_variable.cpp | 7 +
src/glsl/opt_copy_propagation.cpp | 2 +-
src/glsl/opt_cse.cpp | 33 +-
src/glsl/opt_dead_code.cpp | 9 +-
src/glsl/opt_structure_splitting.cpp | 5 +-
src/glsl/opt_tree_grafting.cpp | 9 +-
.../glapi/gen/ARB_shader_storage_buffer_object.xml | 36 ++
src/mapi/glapi/gen/GL4x.xml | 18 +-
src/mapi/glapi/gen/Makefile.am | 1 +
src/mapi/glapi/gen/gl_API.xml | 6 +-
src/mesa/drivers/dri/i965/brw_context.c | 2 +
src/mesa/drivers/dri/i965/brw_context.h | 6 +
src/mesa/drivers/dri/i965/brw_defines.h | 4 +
src/mesa/drivers/dri/i965/brw_eu_emit.c | 4 +-
src/mesa/drivers/dri/i965/brw_fs.cpp | 1 +
src/mesa/drivers/dri/i965/brw_fs.h | 4 +
.../dri/i965/brw_fs_channel_expressions.cpp | 3 +
src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 47 ++
src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 277 +++++++++
.../drivers/dri/i965/brw_fs_vector_splitting.cpp | 1 +
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 35 +-
src/mesa/drivers/dri/i965/brw_shader.cpp | 6 +
src/mesa/drivers/dri/i965/brw_state_upload.c | 1 +
src/mesa/drivers/dri/i965/brw_vec4.cpp | 1 +
src/mesa/drivers/dri/i965/brw_vec4.h | 8 +
src/mesa/drivers/dri/i965/brw_vec4_generator.cpp | 35 ++
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 362 +++++++++++-
src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 70 ++-
src/mesa/drivers/dri/i965/intel_buffer_objects.c | 2 +
src/mesa/drivers/dri/i965/intel_extensions.c | 1 +
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/get.c | 38 +-
src/mesa/main/get_hash_params.py | 12 +
src/mesa/main/mtypes.h | 57 +-
src/mesa/main/program_resource.c | 7 +-
src/mesa/main/shader_query.cpp | 265 ++++++++-
src/mesa/main/tests/enum_strings.cpp | 15 +
src/mesa/main/uniforms.c | 52 ++
src/mesa/main/uniforms.h | 4 +
src/mesa/program/ir_to_mesa.cpp | 10 +
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 16 +
98 files changed, 3873 insertions(+), 460 deletions(-)
create mode 100644 src/mapi/glapi/gen/ARB_shader_storage_buffer_object.xml
--
1.9.1
More information about the mesa-dev
mailing list