[Mesa-dev] [PATCH v5 00/70] ARB_shader_storage_buffer_object (mesa, i965)

Samuel Iglesias Gonsálvez siglesias at igalia.com
Mon Sep 14 23:44:38 PDT 2015



On 15/09/15 07:10, Samuel Iglesias Gonsálvez wrote:
> Hi Mark,
> 
> On 15/09/15 01:14, Mark Janes wrote:
>> I tested this series, and found a few issues:
>>
>>  - `make check` fails the dispatch sanity tests in Mesa
>>
> 
> I'm going to take a look at this.
> 

Just figured out that I forgot to uncomment glShaderStorageBlockBinding
in struct function common_desktop_functions_possible at
src/mesa/main/tests/dispatch_sanity.cpp.

I am going to write a follow-up patch fixing this.

Thanks for reporting it :-)

Sam

>>  - The branch doesn't rebase cleanly on top of master (this isn't wrong,
>>    it just surprised me, since you sent out the series so recently)
>>
> 
> As we add a lot of changes, sometimes a minor change upstream forces us
> to modify a little bit our patches by hand when rebasing. For example,
> when someone adds a new intrinsic operation or something like that.
> 
> I am going to check it too.
> 
>>  - piglit.spec.arb_uniform_buffer_object.getintegeri_v fails
>>
> 
> This is a known issue. I have a patch for piglit to fix it, pending to
> be merged:
> 
> http://lists.freedesktop.org/archives/piglit/2015-May/015972.html
> 
>> On the positive side,
>> deqp-gles3.functional.ubo.random.all_shared_buffer.24 appears to be
>> fixed by this series.  On bsw, there are 7 other deqp tests that are
>> fixed.
>>
> 
> \o/
> 
> Thanks!
> 
> Sam
> 
>> -Mark
>>
>>
>> Iago Toral Quiroga <itoral at igalia.com> writes:
>>
>>> Hi,
>>>
>>> this is the latest version of the ARB_shader_storage_buffer_object
>>> implementation. A good part of the frontend bits for this are already in
>>> master, but this adds some more missing pieces, specifically std430 and
>>> memory qualifiers. Additionally, this provides the i965 implementation.
>>>
>>> Changes in this version include:
>>>
>>> - A new implementation of std430: we no longer have to propagate the layout
>>> qualifier information down to the type of each buffer variable, which makes
>>> the implementation a lot easier.
>>>
>>> - Added a Nir/Vec4 implementation for all the pieces: loads, stores, atomics
>>> and unsized arrays.
>>>
>>> - A new implementation for computing the length of unsized arrays in SSBO
>>> definitions that pushes less work to the backends.
>>>
>>> - A bunch of fixes to various patches throughout the series.
>>>
>>> - All the review feedback addressed.
>>>
>>> This branch no longer depends on other uncommitted work, the few  remaining
>>> patches we needed (a vec4 implementation of Curro's IR builder together with
>>> some helper functions) are now part of this series (patches 33-35).
>>>
>>> We have not dropped the old vec4_visitor implementation from the patch set,
>>> however, now that Nir/Vec4 has been enabled by default and that there are
>>> patches in the mailing list that address the shader-db regressions it looks
>>> like we might not be interested in these patches any more, feel free to skip
>>> the review of these if that is the case, they are patches:
>>>
>>> Patch 16: i965/vec4: Implement ir_unop_get_buffer_size
>>> Patch 39: i965/vec4: Implement __intrinsic_store_ssbo
>>> Patch 43: i965/vec4: Implement __intrinsic_load_ssbo
>>> Patch 53: i965/vec4: Implement lowered SSBO atomic intrinsics
>>>
>>> Finally, notice that there are 23 patches in this series that already have
>>> a Reviewed-by.
>>>
>>> Development branch:
>>>
>>> https://github.com/Igalia/mesa.git
>>> branch itoral-ARB_shader_storage_buffer_object-v5
>>>
>>> Piglit:
>>>
>>> All SSBO piglit tests are in piglit master under
>>> tests/spec/arb_shader_storage_buffer_object.
>>>
>>> Samuel has a modified version of Ian's branch for random testing of UBOs that
>>> he used to verify the implementation of std430. We found a few bugs thanks to
>>> that! If someone wants to play with it, this modified version is here:
>>>
>>> https://github.com/Igalia/piglit.git
>>> branch ssbo-random-tests-std430
>>>
>>> Antia Puentes (1):
>>>   glsl: Mark as active all elements of shared/std140 block arrays
>>>
>>> Francisco Jerez (3):
>>>   i965/vec4: Introduce VEC4 IR builder.
>>>   i965/vec4: Import helpers to convert vectors into arrays and back.
>>>   i965/vec4: Import surface message builder functions.
>>>
>>> Iago Toral Quiroga (29):
>>>   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
>>>   nir: Implement __intrinsic_store_ssbo
>>>   i965/nir/fs: Implement nir_intrinsic_store_ssbo
>>>   i965/nir/vec4: Implement nir_intrinsic_store_ssbo
>>>   i965/vec4: Implement __intrinsic_store_ssbo
>>>   nir: Implement __intrinsic_load_ssbo
>>>   i965/nir/fs: Implement nir_intrinsic_load_ssbo
>>>   i965/nir/vec4: Implement nir_intrinsic_load_ssbo
>>>   i965/vec4: Implement __intrinsic_load_ssbo
>>>   nir/glsl_to_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
>>>   glsl: lower SSBO atomic intrinsics
>>>   nir: Implement lowered SSBO atomic intrinsics
>>>   i965/nir/fs: Implement nir_intrinsic_ssbo_atomic_*
>>>   i965/nir/vec4: Implement nir_intrinsic_ssbo_atomic_*
>>>   i965/vec4: Implement lowered SSBO atomic intrinsics
>>>   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: Do not allow assignments to read-only buffer variables
>>>   glsl: Do not allow reads from write-only buffer variables
>>>   docs: Mark ARB_shader_storage_buffer_object as done for i965
>>>
>>> Kristian Høgsberg (1):
>>>   glsl: atomic counters can be declared as buffer-qualified variables
>>>
>>> Samuel Iglesias Gonsalvez (36):
>>>   mesa: set MAX_SHADER_STORAGE_BUFFERS to 15.
>>>   i965: set ARB_shader_storage_buffer_object related constant values
>>>   glsl: return error if unsized arrays are found in OpenGL ES
>>>   glsl: add support for unsized arrays in shader storage blocks
>>>   glsl: Add parser/compiler support for unsized array's length()
>>>   glsl: implement unsized array length
>>>   nir: Implement ir_unop_get_buffer_size
>>>   i965/vec4: Implement VS_OPCODE_GET_BUFFER_SIZE
>>>   i965/vec4/nir: implement nir_intrinsic_get_buffer_size
>>>   i965/vec4: Implement ir_unop_get_buffer_size
>>>   i965/fs: Implement FS_OPCODE_GET_BUFFER_SIZE
>>>   i965/fs/nir: implement nir_intrinsic_get_buffer_size
>>>   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: layout qualifier can appear more than once since OpenGL 4.20
>>>   glsl: ignore default qualifier declarations when checking for
>>>     duplicate layout qualifiers
>>>   glsl: refactor parser processing of an interface block definition
>>>   glsl: allow default qualifiers for shader storage block definitions
>>>   glsl: Add std430 related member functions to glsl_type class
>>>   glsl: Add parser/compiler support for std430 interface packing
>>>     qualifier
>>>   glsl: Add std430 interface packing support to
>>>     program_resource_visitor's member functions
>>>   glsl: add std430 interface packing support to ssbo related operations
>>>   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
>>>   glsl: shader storage blocks use different max block size values than
>>>     uniforms
>>>   glsl: use ir_rvalue instead of ir_dereference in auxiliary functions
>>>   mesa: add glShaderStorageBlockBinding()
>>>   glsl: fix UNIFORM_BUFFER_START or UNIFORM_BUFFER_SIZE query when no
>>>     buffer object is bound
>>>   glsl: Allow memory qualifiers on shader storage buffer blocks
>>>   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
>>>   mesa: enable ARB_shader_storage_buffer_object extension for GLES 3.1
>>>   i965: Enable ARB_shader_storage_buffer_object extension for gen7+
>>>
>>>  docs/GL3.txt                                       |   4 +-
>>>  src/glsl/ast.h                                     |   9 +
>>>  src/glsl/ast_array_index.cpp                       |   3 +-
>>>  src/glsl/ast_function.cpp                          |  50 +-
>>>  src/glsl/ast_to_hir.cpp                            | 222 +++++++-
>>>  src/glsl/ast_type.cpp                              |   2 +
>>>  src/glsl/builtin_functions.cpp                     | 215 +++++++-
>>>  src/glsl/glsl_lexer.ll                             |  10 +-
>>>  src/glsl/glsl_parser.yy                            | 196 +++----
>>>  src/glsl/glsl_parser_extras.cpp                    | 141 ++++-
>>>  src/glsl/glsl_parser_extras.h                      |   9 +-
>>>  src/glsl/glsl_types.cpp                            | 238 +++++++-
>>>  src/glsl/glsl_types.h                              |  33 +-
>>>  src/glsl/ir.cpp                                    |   8 +
>>>  src/glsl/ir.h                                      |  33 +-
>>>  src/glsl/ir_uniform.h                              |   5 +
>>>  src/glsl/ir_validate.cpp                           |  11 +
>>>  src/glsl/link_uniform_block_active_visitor.cpp     |  23 +
>>>  src/glsl/link_uniform_blocks.cpp                   |  51 +-
>>>  src/glsl/link_uniforms.cpp                         | 107 +++-
>>>  src/glsl/linker.cpp                                | 174 ++++--
>>>  src/glsl/linker.h                                  |   7 +-
>>>  src/glsl/lower_ubo_reference.cpp                   | 435 ++++++++++++++-
>>>  src/glsl/nir/glsl_to_nir.cpp                       | 184 ++++++-
>>>  src/glsl/nir/nir_intrinsics.h                      |  55 +-
>>>  src/glsl/nir/nir_lower_phis_to_scalar.c            |   2 +
>>>  .../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/Makefile.sources         |   3 +
>>>  src/mesa/drivers/dri/i965/brw_context.c            |  16 +
>>>  src/mesa/drivers/dri/i965/brw_context.h            |   6 +
>>>  src/mesa/drivers/dri/i965/brw_defines.h            |   4 +
>>>  src/mesa/drivers/dri/i965/brw_fs.cpp               |   1 +
>>>  src/mesa/drivers/dri/i965/brw_fs.h                 |   5 +
>>>  .../dri/i965/brw_fs_channel_expressions.cpp        |   2 +
>>>  src/mesa/drivers/dri/i965/brw_fs_generator.cpp     |  47 ++
>>>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp           | 235 ++++++++
>>>  .../drivers/dri/i965/brw_fs_vector_splitting.cpp   |   1 +
>>>  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               |  11 +
>>>  src/mesa/drivers/dri/i965/brw_vec4_builder.h       | 602 +++++++++++++++++++++
>>>  src/mesa/drivers/dri/i965/brw_vec4_generator.cpp   |  31 ++
>>>  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp         | 306 +++++++++++
>>>  .../drivers/dri/i965/brw_vec4_surface_builder.cpp  | 332 ++++++++++++
>>>  .../drivers/dri/i965/brw_vec4_surface_builder.h    |  69 +++
>>>  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp     | 369 ++++++++++++-
>>>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c   |  72 ++-
>>>  src/mesa/drivers/dri/i965/intel_buffer_objects.c   |   2 +
>>>  src/mesa/drivers/dri/i965/intel_extensions.c       |   1 +
>>>  src/mesa/main/config.h                             |   2 +-
>>>  src/mesa/main/get.c                                |  44 +-
>>>  src/mesa/main/get_hash_params.py                   |  16 +
>>>  src/mesa/main/mtypes.h                             |   3 +-
>>>  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                    |   2 +
>>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp         |   5 +
>>>  64 files changed, 4511 insertions(+), 315 deletions(-)
>>>  create mode 100644 src/mapi/glapi/gen/ARB_shader_storage_buffer_object.xml
>>>  create mode 100644 src/mesa/drivers/dri/i965/brw_vec4_builder.h
>>>  create mode 100644 src/mesa/drivers/dri/i965/brw_vec4_surface_builder.cpp
>>>  create mode 100644 src/mesa/drivers/dri/i965/brw_vec4_surface_builder.h
>>>
>>> -- 
>>> 1.9.1
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>> _______________________________________________
>> 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