[Mesa-dev] [PATCH v5 00/70] ARB_shader_storage_buffer_object (mesa, i965)
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Sep 14 22:10:18 PDT 2015
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.
> - 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