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 <ito...@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@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev