Commit e67da8d2 authored by Dave Airlie's avatar Dave Airlie Committed by Marge Bot

llvmpipe: enable robust buffer access + GL 4.3, GLES 3.2 and robust buffer access behaviour

Turning on robust buffer access enables GLES 3.2, also
finished GL 4.3 support.

The post depth coverage fail is expected, it's a test bug
This also introduce a fail in the invalid flag test that I can't reproduce out of CI.
Reviewed-by: default avatarRoland Scheidegger <sroland@vmware.com>
Part-of: <!5971>
parent 6d3cefe7
Pipeline #180846 failed with stages
in 17 minutes and 16 seconds
......@@ -391,12 +391,6 @@ spec/arb_es3_1_compatibility/preprocessor/disabled-undefined-core.geom: skip
spec/arb_es3_1_compatibility/preprocessor/disabled-undefined-core.tesc: skip
spec/arb_es3_1_compatibility/preprocessor/disabled-undefined-core.tese: skip
spec/arb_es3_1_compatibility/preprocessor/disabled-undefined-core.vert: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.comp: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.frag: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.geom: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.tesc: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.tese: skip
spec/arb_es3_1_compatibility/preprocessor/enabled-core.vert: skip
spec/arb_explicit_attrib_location/preprocessor/disabled-defined-compat.frag: skip
spec/arb_explicit_attrib_location/preprocessor/disabled-defined-compat.vert: skip
spec/arb_explicit_attrib_location/preprocessor/disabled-defined-core.comp: skip
......@@ -711,8 +705,6 @@ spec/arb_shader_storage_buffer_object/compiler/atomiccompswap-implicit-conversio
spec/arb_shader_storage_buffer_object/compiler/atomicmin-array-element-implicit-conversion.vert: crash
spec/arb_shader_storage_buffer_object/compiler/atomicmin-implicit-conversion.vert: crash
spec/arb_shader_storage_buffer_object/compiler/atomicmin-swizzle-implicit-conversion.vert: crash
spec/arb_shader_storage_buffer_object/compiler/unused-array-element.comp: skip
spec/arb_shader_storage_buffer_object/compiler/unused-array-element.frag: skip
spec/arb_shader_storage_buffer_object/preprocessor/disabled-defined-compat.frag: skip
spec/arb_shader_storage_buffer_object/preprocessor/disabled-defined-compat.vert: skip
spec/arb_shader_storage_buffer_object/preprocessor/disabled-defined-core.comp: skip
......@@ -2311,80 +2303,7 @@ spec/glsl-1.50/compiler/compatibility/gl_secondarycolor.vert: skip
spec/glsl-1.50/compiler/compatibility/gl_textureenvcolor.frag: skip
spec/glsl-1.50/compiler/compatibility/gl_texturematrix.frag: skip
spec/glsl-1.50/compiler/compatibility/gl_vertex.vert: skip
spec/glsl-4.30/compiler/legal-aggregate-initializer-sequence-operator-abuse.frag: skip
spec/glsl-4.40/compiler/inout-parameter-qualifier.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-array-uvec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-struct-uvec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/default-interface_block-uvec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-int.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-ivec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-ivec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-ivec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-uint.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-uvec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-uvec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-array-uvec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-int.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-ivec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-ivec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-ivec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-int.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-ivec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-ivec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-ivec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-uint.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-uvec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-uvec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-struct-uvec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-uint.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-uvec2.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-uvec3.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/flat-interface_block-uvec4.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-array-uvec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-int-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-ivec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-ivec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-ivec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-struct-uvec4-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-uint-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-uvec2-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-uvec3-bad.frag: skip
spec/glsl-es-3.20/compiler/flat_interpolation/smooth-interface_block-uvec4-bad.frag: skip
spec/intel_conservative_rasterization/compiler/inner_coverage.gl.frag: skip
spec/intel_conservative_rasterization/compiler/inner_coverage.gl.vert: skip
spec/intel_conservative_rasterization/compiler/inner_coverage.gles.frag: skip
......@@ -2654,10 +2573,10 @@ spec/oes_texture_storage_multisample_2d_array/preprocessor/disabled-undefined-es
summary:
name: results
---- --------
pass: 12182
pass: 12263
fail: 2
crash: 4
skip: 2647
skip: 2566
timeout: 0
warn: 0
incomplete: 0
......
fast_color_clear/fcc-write-after-clear: skip
glx/extension string sanity: fail
glx/glx-buffer-age: skip
glx/glx-buffer-age vblank_mode=0: skip
......@@ -27,6 +26,7 @@ glx/glx-visuals-depth: fail
glx/glx-visuals-depth -pixmap: fail
glx/glx-visuals-stencil: fail
glx/glx-visuals-stencil -pixmap: fail
glx/glx_arb_create_context/invalid flag: fail
glx/glx_arb_create_context_es2_profile/invalid opengl es version: fail
glx/glx_arb_create_context_no_error/no error: skip
glx/glx_arb_create_context_robustness/invalid reset notification strategy: skip
......@@ -80,7 +80,6 @@ shaders/activeprogram-bad-program: skip
shaders/activeprogram-get: skip
shaders/createshaderprogram-attached-shaders: skip
shaders/createshaderprogram-bad-type: skip
shaders/glsl-bug-110796: fail
shaders/glsl-fs-fogscale/gs-out and fs: skip
shaders/glsl-fs-fogscale/vs, gs and fs: skip
shaders/sso-simple: skip
......@@ -391,7 +390,6 @@ spec/!opengl 3.1/draw-buffers-errors: skip
spec/!opengl 3.2/gl-3.2-adj-prims pv-first: fail
spec/!opengl 3.2/layered-rendering/clear-color-mismatched-layer-count: fail
spec/!opengl 4.2/gl-max-vertex-attrib-stride: skip
spec/!opengl 4.3/get_glsl_version: skip
spec/!opengl 4.5/compare-framebuffer-parameter-with-get: skip
spec/!opengl 4.5/named-framebuffer-draw-buffers-errors: skip
spec/!opengl 4.5/named-framebuffer-read-buffer-errors: skip
......@@ -500,9 +498,7 @@ spec/arb_internalformat_query/misc. api error checks: skip
spec/arb_pipeline_statistics_query/arb_pipeline_statistics_query-frag: fail
spec/arb_pixel_buffer_object/cubemap npot pbo: fail
spec/arb_pixel_buffer_object/cubemap pbo: fail
spec/arb_post_depth_coverage/arb_post_depth_coverage-basic: skip
spec/arb_post_depth_coverage/arb_post_depth_coverage-multisampling: skip
spec/arb_post_depth_coverage/arb_post_depth_coverage-sample-shading: skip
spec/arb_post_depth_coverage/arb_post_depth_coverage-multisampling: fail
spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceindex/'vs_input2[1][0]' on gl_program_input: fail
spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-async_cpu_read_before-gl_int: fail
spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-async_cpu_read_before-gl_unsigned_int: fail
......@@ -1521,7 +1517,7 @@ spec/intel_conservative_rasterization/intel_conservative_rasterization-invalid:
spec/intel_conservative_rasterization/intel_conservative_rasterization-invalid_gles3: skip
spec/intel_conservative_rasterization/intel_conservative_rasterization-tri: skip
spec/intel_conservative_rasterization/intel_conservative_rasterization-tri_gles3: skip
spec/intel_performance_query/intel_performance_query-issue_2235: fail
spec/intel_performance_query/intel_performance_query-issue_2235: skip
spec/khr_texture_compression_astc/array-gl/12x12 block dim: fail
spec/khr_texture_compression_astc/array-gl/5x5 block dim: fail
spec/khr_texture_compression_astc/array-gles/12x12 block dim: fail
......@@ -1672,10 +1668,10 @@ wgl/wgl-sanity: skip
summary:
name: results
---- --------
pass: 23025
pass: 23029
fail: 201
crash: 0
skip: 1446
skip: 1442
timeout: 0
warn: 6
incomplete: 0
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -166,29 +166,29 @@ GL 4.2, GLSL 4.20 -- all DONE: i965/gen7+, nvc0, r600, radeonsi, llvmpipe, virgl
GL_ARB_map_buffer_alignment DONE (all drivers)
GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, virgl
GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, llvmpipe, virgl
GL_ARB_arrays_of_arrays DONE (all drivers that support GLSL 1.30)
GL_ARB_ES3_compatibility DONE (all drivers that support GLSL 3.30)
GL_ARB_clear_buffer_object DONE (all drivers)
GL_ARB_compute_shader DONE (freedreno/a5xx+, i965, llvmpipe, softpipe, v3d)
GL_ARB_copy_image DONE (i965, nv50, softpipe, llvmpipe, swr)
GL_ARB_compute_shader DONE (freedreno/a5xx+, i965, softpipe, v3d)
GL_ARB_copy_image DONE (i965, nv50, softpipe, swr)
GL_KHR_debug DONE (all drivers)
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
GL_ARB_fragment_layer_viewport DONE (i965, nv50, llvmpipe, softpipe, swr)
GL_ARB_framebuffer_no_attachments DONE (freedreno, i965, llvmpipe, softpipe, v3d)
GL_ARB_fragment_layer_viewport DONE (i965, nv50, softpipe, swr)
GL_ARB_framebuffer_no_attachments DONE (freedreno, i965, softpipe, v3d)
GL_ARB_internalformat_query2 DONE (all drivers)
GL_ARB_invalidate_subdata DONE (all drivers)
GL_ARB_multi_draw_indirect DONE (freedreno, i965, llvmpipe, softpipe, swr, v3d)
GL_ARB_multi_draw_indirect DONE (freedreno, i965, softpipe, swr, v3d)
GL_ARB_program_interface_query DONE (all drivers)
GL_ARB_robust_buffer_access_behavior DONE (i965)
GL_ARB_shader_image_size DONE (freedreno/a5xx+, i965, llvmpipe, softpipe, v3d)
GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, i965, llvmpipe, softpipe, v3d)
GL_ARB_stencil_texturing DONE (freedreno, i965/hsw+, nv50, llvmpipe, softpipe, swr, v3d)
GL_ARB_texture_buffer_range DONE (freedreno, nv50, i965, softpipe, llvmpipe, swr)
GL_ARB_shader_image_size DONE (freedreno/a5xx+, i965, softpipe, v3d)
GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, i965, softpipe, v3d)
GL_ARB_stencil_texturing DONE (freedreno, i965/hsw+, nv50, softpipe, swr, v3d)
GL_ARB_texture_buffer_range DONE (freedreno, nv50, i965, softpipe, swr)
GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30)
GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample)
GL_ARB_texture_view DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr)
GL_ARB_texture_view DONE (freedreno, i965, nv50, softpipe, swr)
GL_ARB_vertex_attrib_binding DONE (all drivers)
......@@ -242,22 +242,22 @@ GL 4.6, GLSL 4.60 -- all DONE: radeonsi
(*) softpipe and llvmpipe advertise 16x anisotropy but simply ignore the setting
These are the extensions cherry-picked to make GLES 3.1
GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, r600, radeonsi, virgl, v3d
GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, r600, radeonsi, virgl, v3d, llvmpipe
GL_ARB_arrays_of_arrays DONE (all drivers that support GLSL 1.30)
GL_ARB_compute_shader DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
GL_ARB_draw_indirect DONE (freedreno, i965/gen7+, llvmpipe, softpipe, swr)
GL_ARB_compute_shader DONE (freedreno/a5xx+, i965/gen7+, softpipe)
GL_ARB_draw_indirect DONE (freedreno, i965/gen7+, softpipe, swr)
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
GL_ARB_framebuffer_no_attachments DONE (freedreno, i965/gen7+, llvmpipe, softpipe)
GL_ARB_framebuffer_no_attachments DONE (freedreno, i965/gen7+, softpipe)
GL_ARB_program_interface_query DONE (all drivers)
GL_ARB_shader_atomic_counters DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
GL_ARB_shader_image_load_store DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
GL_ARB_shader_image_size DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
GL_ARB_shader_atomic_counters DONE (freedreno/a5xx+, i965/gen7+, softpipe)
GL_ARB_shader_image_load_store DONE (freedreno/a5xx+, i965/gen7+, softpipe)
GL_ARB_shader_image_size DONE (freedreno/a5xx+, i965/gen7+, softpipe)
GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, i965/gen7+, softpipe)
GL_ARB_shading_language_packing DONE (all drivers)
GL_ARB_separate_shader_objects DONE (all drivers)
GL_ARB_stencil_texturing DONE (freedreno, nv50, llvmpipe, softpipe, swr)
GL_ARB_texture_multisample (Multisample textures) DONE (freedreno/a5xx+, i965/gen7+, nv50, llvmpipe, softpipe, panfrost)
GL_ARB_stencil_texturing DONE (freedreno, nv50, softpipe, swr)
GL_ARB_texture_multisample (Multisample textures) DONE (freedreno/a5xx+, i965/gen7+, nv50, softpipe, panfrost)
GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample)
GL_ARB_vertex_attrib_binding DONE (all drivers)
GS5 Enhanced textureGather DONE (freedreno, i965/gen7+)
......@@ -270,7 +270,7 @@ GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, r600, radeonsi, virgl, v3d
glGetBooleani_v - restrict to GLES enums
gl_HelperInvocation support DONE (i965, r600)
GLES3.2, GLSL ES 3.2 -- all DONE: i965/gen9+, radeonsi, virgl
GLES3.2, GLSL ES 3.2 -- all DONE: i965/gen9+, radeonsi, virgl, llvmpipe
GL_EXT_color_buffer_float DONE (all drivers)
GL_KHR_blend_equation_advanced DONE (freedreno/a6xx, i965, nvc0, panfrost)
......
GL_ARB_compute_variable_group_size on Iris.
GL_ARB_gpu_shader5 on llvmpipe
GL_ARB_post_depth_coverage on llvmpipe
GL 4.2 on llvmpipe
GL 4.3 on llvmpipe
GLES 3.2 on llvmpipe
GL_EXT_shader_group_vote on GLES3.
GL_EXT_texture_shadow_lod on llvmpipe
VK_AMD_texture_gather_bias_lod on RADV.
VK_AMD_gpu_shader_half_float on RADV/ACO.
VK_AMD_gpu_shader_int16 on RADV/ACO.
......
......@@ -204,7 +204,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL: {
struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
return lscreen->use_tgsi ? 330 : 420;
return lscreen->use_tgsi ? 330 : 430;
}
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
return 140;
......@@ -312,6 +312,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
return 1;
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
return 1;
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
return 32;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment