platform/upstream/mesa.git
8 years agonir: Add opt_algebraic rules for xor with zero.
Matt Turner [Tue, 2 Feb 2016 00:34:46 +0000 (16:34 -0800)]
nir: Add opt_algebraic rules for xor with zero.

instructions in affected programs: 668 -> 664 (-0.60%)
helped: 4

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agoglsl: validate arrays of arrays on empty type delclarations
Timothy Arceri [Fri, 5 Feb 2016 02:08:19 +0000 (13:08 +1100)]
glsl: validate arrays of arrays on empty type delclarations

Fixes:
dEQP-GLES31.functional.shaders.arrays_of_arrays.invalid.empty_declaration_without_var_name_fragment
dEQP-GLES31.functional.shaders.arrays_of_arrays.invalid.empty_declaration_without_var_name_vertex

Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoi965: Use nir_lower_load_const_to_scalar().
Kenneth Graunke [Fri, 22 Jan 2016 00:37:20 +0000 (16:37 -0800)]
i965: Use nir_lower_load_const_to_scalar().

I don't know why, but we never hooked up this pass Eric wrote.
Otherwise, you can end up with stupid scalarized code such as:

   vec4 ssa_7 = load_const (0.0, 0.0, 0.0, 0.0)
   vec4 ssa_8 = ...
   vec1 ssa_9 = feq ssa_8, ssa_7
   vec1 ssa_10 = feq ssa_8.y, ssa_7.y
   vec1 ssa_11 = feq ssa_8, ssa_7.z
   vec1 ssa_12 = feq ssa_8.y, ssa_7.w

ssa_8.xyxy == <0, 0, 0, 0> should only take two feq instructions.

shader-db on Skylake:

total instructions in shared programs: 9121153 -> 9120749 (-0.00%)
instructions in affected programs: 32421 -> 32017 (-1.25%)
helped: 277
HURT: 69

total cycles in shared programs: 69003364 -> 69000912 (-0.00%)
cycles in affected programs: 899186 -> 896734 (-0.27%)
helped: 313
HURT: 403

This also prevents regressions when disabling channel expressions.

v2: Don't call opt_cse afterwards (requested by Matt).  It should
    happen in the optimization loop below anyway.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agomesa: remove now unused sampler index handing code
Timothy Arceri [Fri, 5 Feb 2016 22:38:55 +0000 (09:38 +1100)]
mesa: remove now unused sampler index handing code

Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: compute sampler index in ir_to_mesa rather than using UniformHash
Timothy Arceri [Fri, 5 Feb 2016 22:30:00 +0000 (09:30 +1100)]
mesa: compute sampler index in ir_to_mesa rather than using UniformHash

The aim of this is to work towards removing UniformHash from the program
struct so that we don't need to hold onto it in memory and pass it around
outside the linker.

Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoi965: Don't add barrier deps for FB write messages.
Kenneth Graunke [Thu, 4 Feb 2016 16:10:02 +0000 (08:10 -0800)]
i965: Don't add barrier deps for FB write messages.

There are never render target reads, so there are no scheduling hazards.

Giving the extra flexibility to the scheduler makes it possible to do
FB writes as soon as their sources are available, reducing register
pressure.  It also makes it possible to do the payload setup for more
than one FB write message at a time, which could better hide latency.

shader-db results on Skylake:

total instructions in shared programs: 9110254 -> 9110211 (-0.00%)
instructions in affected programs: 2898 -> 2855 (-1.48%)
helped: 3
HURT:   0
LOST:   0
GAINED: 1

A reduction in instruction counts is surprising, but legitimate:
the three shaders helped were spilling, and reducing register
pressure allowed us to issue fewer spills/fills.

total cycles in shared programs: 69035108 -> 68928820 (-0.15%)
cycles in affected programs: 4412402 -> 4306114 (-2.41%)
helped: 4457
HURT: 213

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
8 years agost/mesa: enable AoA for gallium drivers reporting GLSL 1.30
Dave Airlie [Thu, 4 Feb 2016 07:38:54 +0000 (17:38 +1000)]
st/mesa: enable AoA for gallium drivers reporting GLSL 1.30

Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agost/mesa: add atomic AoA support
Dave Airlie [Fri, 5 Feb 2016 02:00:38 +0000 (12:00 +1000)]
st/mesa: add atomic AoA support

reuse the sampler deref handling code to do the same
thing for atomics.

Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: drop unused nonconst sampler functions.
Dave Airlie [Fri, 5 Feb 2016 03:34:29 +0000 (13:34 +1000)]
mesa: drop unused nonconst sampler functions.

Since we fixed the glsl->tgsi conversion we no longer need
this function.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agost/mesa: handle indirect samplers in arrays/structs properly (v4.1)
Dave Airlie [Thu, 4 Feb 2016 06:48:18 +0000 (16:48 +1000)]
st/mesa: handle indirect samplers in arrays/structs properly (v4.1)

The state tracker never handled this properly, and it finally
annoyed me for the second time so I decided to fix it properly.

This is inspired by the NIR sampler lowering code and I only realised
NIR seems to do its deref ordering different to GLSL at the last
minute, once I got that things got much easier.

it fixes a bunch of tests in
tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/

v2: fix AoA tests when forced on.
I was right I didn't need all that code, fixing the AoA code
meant cleaning up a chunk of code I didn't like in the array
handling.

v3: start generalising the code a bit more for atomics.
v3.1: use UniformRemapTable

v4: handle uniforms differently using the param_index,
and go back to UniformStorage
fix issues identified by Timothy with deref handling.
v4.1: squash const fix and move handling 1D const out
of recursive function.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl/ir: add param index to variable.
Dave Airlie [Mon, 8 Feb 2016 01:09:29 +0000 (11:09 +1000)]
glsl/ir: add param index to variable.

We have a requirement to store the index into the mesa parameterlist
for uniforms. Up until now we've overwritten var->data.location with
this info. However this then stops us accessing UniformStorage,
which is needed to do proper dereferencing.

Add a new variable to ir_variable to store this value in, and change
the two uses to use it correctly.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agoi965: Rename define for the PIPE_CONTROL DC flush bit.
Francisco Jerez [Thu, 14 Jan 2016 20:20:46 +0000 (12:20 -0800)]
i965: Rename define for the PIPE_CONTROL DC flush bit.

Its previous name was somewhat misleading, this really behaves like a
RW cache flush rather than an invalidation.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: Invalidate state cache before L3 partitioning set-up.
Francisco Jerez [Thu, 14 Jan 2016 20:17:01 +0000 (12:17 -0800)]
i965: Invalidate state cache before L3 partitioning set-up.

The state cache is also L3-backed so it seems sensible to make sure
it's clean as we do for other RO caches before repartitioning the L3.
This wasn't part of my original L3 partitioning code because I was
able to reproduce hangs on Gen7 hardware when the state cache
invalidation happened asynchronously with previous 3D rendering, which
should no longer be possible after the previous change.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: Fix cache pollution race during L3 partitioning set-up.
Francisco Jerez [Thu, 14 Jan 2016 19:22:46 +0000 (11:22 -0800)]
i965: Fix cache pollution race during L3 partitioning set-up.

We need to split the stalling flush from the RO cache invalidation
into a different PIPE_CONTROL command to make sure that the top of the
pipe invalidation happens after any previous rendering is complete.
Otherwise it's possible for previous rendering to pollute the L3 cache
in the short window of time between RO invalidation and the completion
of the stalling flush.  Fixes rendering artifacts on Unigine Heaven,
Metro Last Light Redux and Metro 2033 Redux.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93540
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93599
Tested-by: Darius Spitznagel <d.spitznagel@goodbytez.de>
Tested-by: Martin Peres <martin.peres@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Don't emit unnecessary SEL instruction from emit_image_atomic().
Francisco Jerez [Sun, 7 Feb 2016 02:43:45 +0000 (18:43 -0800)]
i965/fs: Don't emit unnecessary SEL instruction from emit_image_atomic().

The SEL instruction with predication mode NONE emitted when the atomic
operation doesn't need to be predicated is a no-op and might rely on
undocumented hardware behaviour.  Noticed by chance while looking at
the assembly output.

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoi965/vec4: Update vec4 unit tests for commit 01dacc83ff.
Matt Turner [Mon, 8 Feb 2016 23:32:12 +0000 (15:32 -0800)]
i965/vec4: Update vec4 unit tests for commit 01dacc83ff.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94050

8 years agodri/common: include debug_output.h to silence warning
Brian Paul [Mon, 8 Feb 2016 17:52:02 +0000 (10:52 -0700)]
dri/common: include debug_output.h to silence warning

8 years agotgsi: minor whitespace fixes in tgsi_scan.c
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
tgsi: minor whitespace fixes in tgsi_scan.c

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agotgsi: s/true/TRUE/ in tgsi_scan.c
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
tgsi: s/true/TRUE/ in tgsi_scan.c

Just to be consistent.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agotgsi: use switches instead of big if/else ifs
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
tgsi: use switches instead of big if/else ifs

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agotgsi: break gigantic tgsi_scan_shader() function into pieces
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
tgsi: break gigantic tgsi_scan_shader() function into pieces

New functions for examining instructions, declarations, etc.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agost/mesa: minor formatting fixes in st_cb_bitmap.c
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
st/mesa: minor formatting fixes in st_cb_bitmap.c

8 years agomesa: move GL_ARB_debug_output code into new debug_output.c file
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
mesa: move GL_ARB_debug_output code into new debug_output.c file

The errors.c file had grown quite large so split off this extension
code into its own file.  This involved making a handful of functions
non-static.

Acked-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agogallium/util: whitespace, formatting fixes in u_debug_stack.c
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
gallium/util: whitespace, formatting fixes in u_debug_stack.c

8 years agogallium/util: whitespace, formatting fixes in u_staging.[ch] files
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
gallium/util: whitespace, formatting fixes in u_staging.[ch] files

Still some nonsensical comments.

8 years agogallium/util: switch over to new u_debug_image.[ch] code
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
gallium/util: switch over to new u_debug_image.[ch] code

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium/util: put image dumping functions into separate file
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
gallium/util: put image dumping functions into separate file

To try to reduce the clutter in u_debug.[ch]

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium/util: whitespace, formatting fixes in u_debug.c
Brian Paul [Mon, 8 Feb 2016 16:29:38 +0000 (09:29 -0700)]
gallium/util: whitespace, formatting fixes in u_debug.c

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agotrace: add missing pipe_context::clear_texture()
Samuel Pitoiset [Sun, 7 Feb 2016 22:27:48 +0000 (23:27 +0100)]
trace: add missing pipe_context::clear_texture()

This fixes a crash with bin/arb_clear_texture-base-formats and
probably some other tests which use clear_texture().

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agotrace: remove useless MALLOC() in trace_context_draw_vbo()
Samuel Pitoiset [Sun, 7 Feb 2016 21:33:33 +0000 (22:33 +0100)]
trace: remove useless MALLOC() in trace_context_draw_vbo()

There is no need to allocate memory when unwrapping the indirect buf.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agomesa/extensions: Fix NVX_gpu_memory_info lexicographical order.
Vinson Lee [Sat, 6 Feb 2016 07:16:31 +0000 (23:16 -0800)]
mesa/extensions: Fix NVX_gpu_memory_info lexicographical order.

Fixes MesaExtensionsTest.AlphabeticallySorted.

Fixes: 1d79b9958090 ("mesa: implement GL_NVX_gpu_memory_info (v2)")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94016
Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglsl: return cloned signature, not the builtin one
Ilia Mirkin [Sat, 6 Feb 2016 22:08:29 +0000 (17:08 -0500)]
glsl: return cloned signature, not the builtin one

The builtin data can get released with a glReleaseShaderCompiler call.
We're careful everywhere to clone everything that comes out of builtins
except here, where we accidentally return the signature belonging to the
builtin version, rather than the locally-cloned one.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Tested-by: Rob Herring <robh@kernel.org>
Cc: mesa-stable@lists.freedesktop.org
8 years agoglsl: make sure builtins are initialized before getting the shader
Ilia Mirkin [Sat, 6 Feb 2016 22:07:59 +0000 (17:07 -0500)]
glsl: make sure builtins are initialized before getting the shader

The builtin function shader is part of the builtin state, released
when glReleaseShaderCompiler is called. We must ensure that the
builtins have been (re)initialized before attempting to link with the
builtin shader.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Tested-by: Rob Herring <robh@kernel.org>
Cc: mesa-stable@lists.freedesktop.org
8 years agotgsi: use TGSI_WRITEMASK_XYZW instead of hardcoding the mask
Samuel Pitoiset [Sat, 6 Feb 2016 19:24:41 +0000 (20:24 +0100)]
tgsi: use TGSI_WRITEMASK_XYZW instead of hardcoding the mask

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Serge Martin <edb+mesa@sigluy.net>
8 years agoglsl: don't generate transform feedback candidate when not required
Timothy Arceri [Tue, 2 Feb 2016 22:46:56 +0000 (09:46 +1100)]
glsl: don't generate transform feedback candidate when not required

If we are not even looking for one don't bother generating a candidate
list.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: replace unreachable code with an assert()
Timothy Arceri [Tue, 2 Feb 2016 22:39:10 +0000 (09:39 +1100)]
glsl: replace unreachable code with an assert()

All interface blocks will have been lowered by this point so just
use an assert. Returning false would have caused all sorts of
problems if they were not lowered yet and there is an assert to
catch this later anyway.

We also update the tests to reflect this change.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agor600, compute: Do not overwrite pipe_resource.screen
Jan Vesely [Fri, 5 Feb 2016 22:54:57 +0000 (17:54 -0500)]
r600, compute: Do not overwrite pipe_resource.screen

found by inspection.

Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agor600g: Ignore format for PIPE_BUFFER targets
Jan Vesely [Fri, 5 Feb 2016 17:01:13 +0000 (12:01 -0500)]
r600g: Ignore format for PIPE_BUFFER targets

Fixes compute since 7dd31b81fee7fe40bd09cf3fbc324fcc32782479
gallium/radeon: support PIPE_CAP_SURFACE_REINTERPRET_BLOCKS

Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa/get: fix a breakage after rebase
Marek Olšák [Fri, 5 Feb 2016 18:38:40 +0000 (19:38 +0100)]
mesa/get: fix a breakage after rebase

trivial.

8 years agoi965/vec4: don't copy ATTR into 3src instructions with complex swizzles
Matt Turner [Mon, 18 Jan 2016 01:30:14 +0000 (20:30 -0500)]
i965/vec4: don't copy ATTR into 3src instructions with complex swizzles

The vec4 backend, at the end, does this:

    if (inst->is_3src()) {
       for (int i = 0; i < 3; i++) {
          if (inst->src[i].vstride == BRW_VERTICAL_STRIDE_0)
             assert(brw_is_single_value_swizzle(inst->src[i].swizzle));

So make sure that we use the same conditions when trying to
copy-propagate. UNIFORMs will be converted to vstride 0 in
convert_to_hw_regs, but so will ATTRs when interleaved (as will happen
in a GS with multiple attributes). Since the vstride is not set at
copy-prop time, infer it by inspecting dispatch_mode and reject ATTRs if
they have non-scalar swizzles and are interleaved.

Fixes assertion errors in dolphin-generated geometry shaders (or
misrendering on opt builds) on Sandybridge or on IVB/HSW with
INTEL_DEBUG=nodualobj.

Co-authored-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93418
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
8 years agodocs/relnotes: document memory info extensions
Marek Olšák [Fri, 5 Feb 2016 16:47:13 +0000 (17:47 +0100)]
docs/relnotes: document memory info extensions

8 years agogallium/radeon: implement query_memory_info (v2)
Marek Olšák [Tue, 2 Feb 2016 01:09:36 +0000 (02:09 +0100)]
gallium/radeon: implement query_memory_info (v2)

v2: don't use DIV_ROUND_UP (no so useful)
    also return eviction stats

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
8 years agost/mesa: implement and enable memory info extensions (v2)
Marek Olšák [Tue, 2 Feb 2016 00:27:55 +0000 (01:27 +0100)]
st/mesa: implement and enable memory info extensions (v2)

v2: assert and return if query_memory_info is not set
    rebase

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
8 years agomesa: implement GL_ATI_meminfo (v2)
Marek Olšák [Tue, 2 Feb 2016 00:26:59 +0000 (01:26 +0100)]
mesa: implement GL_ATI_meminfo (v2)

v2: rebase

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
8 years agomesa: implement GL_NVX_gpu_memory_info (v2)
Marek Olšák [Tue, 2 Feb 2016 00:22:52 +0000 (01:22 +0100)]
mesa: implement GL_NVX_gpu_memory_info (v2)

v2: implement eviction queries properly
    add gl_memory_info structure

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
8 years agogallium: add interface for querying memory usage and sizes (v2)
Marek Olšák [Mon, 1 Feb 2016 20:56:50 +0000 (21:56 +0100)]
gallium: add interface for querying memory usage and sizes (v2)

If you're worried about the duplication of some CAPs, we can remove them
later.

v2: add fields for memory eviction stats

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
8 years agogallium/radeon: remove radeon_info::r600_tiling_config
Marek Olšák [Sat, 30 Jan 2016 01:54:47 +0000 (02:54 +0100)]
gallium/radeon: remove radeon_info::r600_tiling_config

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agogallium/radeon: get pipe_interleave_bytes AKA group_bytes from the winsys
Marek Olšák [Sat, 30 Jan 2016 01:50:34 +0000 (02:50 +0100)]
gallium/radeon: get pipe_interleave_bytes AKA group_bytes from the winsys

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agogallium/radeon: set num_banks in the winsys
Marek Olšák [Sat, 30 Jan 2016 01:29:32 +0000 (02:29 +0100)]
gallium/radeon: set num_banks in the winsys

amdgpu doesn't have to set this, because radeonsi gets it from tile mode
arrays by default.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agogallium/radeon: just get num_tile_pipes from the winsys
Marek Olšák [Sat, 30 Jan 2016 00:52:58 +0000 (01:52 +0100)]
gallium/radeon: just get num_tile_pipes from the winsys

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agowinsys/amdgpu: add an assertion to cik_get_num_tile_pipes (v2)
Marek Olšák [Sat, 30 Jan 2016 00:44:26 +0000 (01:44 +0100)]
winsys/amdgpu: add an assertion to cik_get_num_tile_pipes (v2)

v2: print an error to stderr

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agowinsys/amdgpu: remove an r600-only setting
Marek Olšák [Sat, 30 Jan 2016 00:37:17 +0000 (01:37 +0100)]
winsys/amdgpu: remove an r600-only setting

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agogallium/radeon: rename & reorder members of radeon_info
Marek Olšák [Sat, 30 Jan 2016 00:27:46 +0000 (01:27 +0100)]
gallium/radeon: rename & reorder members of radeon_info

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agomesa: Fix locking of GLsync objects.
Steinar H. Gunderson [Tue, 2 Feb 2016 00:16:51 +0000 (01:16 +0100)]
mesa: Fix locking of GLsync objects.

GLsync objects had a race condition when used from multiple threads
(which is the main point of the extension, really); it could be
validated as a sync object at the beginning of the function, and then
deleted by another thread before use, causing crashes. Fix this by
changing all casts from GLsync to struct gl_sync_object to a new
function _mesa_get_and_ref_sync() that validates and increases
the refcount.

In a similar vein, validation itself uses _mesa_set_search(), which
requires synchronization -- it was called without a mutex held, causing
spurious error returns and other issues. Since _mesa_get_and_ref_sync()
now takes the shared context mutex, this problem is also resolved.

Fixes bug #92757, found while developing Nageru, my live video mixer
(due for release at FOSDEM 2016).

v2: Marek: silence warnings, fix declaration after code

Signed-off-by: Steinar H. Gunderson <sesse@google.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: add placeholder MC and SRBM performance counter groups
Nicolai Hähnle [Fri, 11 Dec 2015 21:03:56 +0000 (16:03 -0500)]
radeonsi: add placeholder MC and SRBM performance counter groups

Yet another change motivated by AMD GPUPerfStudio compatibility. These groups
are not directly accessible from userspace, and AMD GPUPerfStudio does not
actually query them - it just requires them to be there. Hence, adding
a placeholder for now.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: re-order the SQ_xx performance counter blocks
Nicolai Hähnle [Fri, 11 Dec 2015 20:58:11 +0000 (15:58 -0500)]
radeonsi: re-order the SQ_xx performance counter blocks

This is yet another change motivated by appeasing AMD GPUPerfStudio's
hardcoding of performance counter group numbers.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: re-order the perfcounter hardware blocks
Nicolai Hähnle [Fri, 11 Dec 2015 20:42:44 +0000 (15:42 -0500)]
radeonsi: re-order the perfcounter hardware blocks

As documented in the comment, AMD GPUPerfStudio unfortunately hardcodes the
order of performance counter groups. Let's do the pragmatic thing and present
the same order as Catalyst/Crimson.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium/radeon: add GPIN driver query group
Nicolai Hähnle [Fri, 11 Dec 2015 20:39:23 +0000 (15:39 -0500)]
gallium/radeon: add GPIN driver query group

This group was used by older versions of AMD GPUPerfStudio (via
AMD_performance_monitor) to identify the GPU family, and GPUPerfStudio
still complains when it isn't available.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: Allow dumping LLVM IR before optimization passes
Nicolai Hähnle [Thu, 4 Feb 2016 07:59:39 +0000 (08:59 +0100)]
radeonsi: Allow dumping LLVM IR before optimization passes

Set R600_DEBUG=preoptir to dump the LLVM IR before optimization passes,
to allow diagnosing problems caused by optimization passes.

Note that in order to compile the resulting IR with llc, you will first
have to run at least the mem2reg pass, e.g.

opt -mem2reg -S < shader.ll | llc -march=amdgcn -mcpu=bonaire

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> (original patch)
Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (w/ debug flag)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium/radeon: emit LLVM `ret void` before radeon_llvm_finalize_module
Nicolai Hähnle [Thu, 4 Feb 2016 07:51:52 +0000 (08:51 +0100)]
gallium/radeon: emit LLVM `ret void` before radeon_llvm_finalize_module

This allows dumping a consumable LLVM module before the initial optimization
passes are run.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: bail out of try_pbo_upload_common when constant upload fails
Nicolai Hähnle [Wed, 3 Feb 2016 17:02:55 +0000 (18:02 +0100)]
st/mesa: bail out of try_pbo_upload_common when constant upload fails

Also fixes a resource leak when an upload_mgr is used for constants.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: bail out of try_pbo_upload_common when vertex upload fails
Nicolai Hähnle [Wed, 3 Feb 2016 17:00:47 +0000 (18:00 +0100)]
st/mesa: bail out of try_pbo_upload_common when vertex upload fails

At the same time, fix a memory leak noticed by Ilia Mirkin.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: reduce the scope of sampler_view in try_pbo_upload_common
Nicolai Hähnle [Wed, 3 Feb 2016 16:58:40 +0000 (17:58 +0100)]
st/mesa: reduce the scope of sampler_view in try_pbo_upload_common

We can get rid of our reference immediately, since the driver will hold
onto it for us.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: do uploads earlier in try_pbo_upload_common
Nicolai Hähnle [Wed, 3 Feb 2016 16:54:33 +0000 (17:54 +0100)]
st/mesa: do uploads earlier in try_pbo_upload_common

While rather unlikely, uploads _can_ fail. Doing them earlier means
we'll have to restore less state when they do fail, and it's slightly
easier to check the restore code.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomain: Use a derived value for the default sample count
Neil Roberts [Thu, 4 Feb 2016 16:12:07 +0000 (16:12 +0000)]
main: Use a derived value for the default sample count

Previously the framebuffer default sample count was taken directly
from the value given by the application. On the i965 driver on HSW if
the value wasn't one that is supported by the hardware it would hit an
assert when it tried to program the state for it. This patch fixes it
by adding a derived sample count to the state for the default
framebuffer. The driver can then quantize this to one of the valid
values in its UpdateState handler when the _NEW_BUFFERS state changes.
_mesa_geometric_samples is changed to use the new derived value.

Fixes the piglit test arb_framebuffer_no_attachments-query

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93957
Cc: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agoprogram: Use _mesa_geometric_samples to calculate gl_NumSamples
Neil Roberts [Thu, 4 Feb 2016 16:12:06 +0000 (16:12 +0000)]
program: Use _mesa_geometric_samples to calculate gl_NumSamples

Otherwise it won't take into account the default samples for
framebuffers with no attachments.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agomain: Use _mesa_geometric_samples to calculate GL_SAMPLE_BUFFERS
Neil Roberts [Thu, 4 Feb 2016 16:12:05 +0000 (16:12 +0000)]
main: Use _mesa_geometric_samples to calculate GL_SAMPLE_BUFFERS

Otherwise it won't take into account the default samples for
framebuffers with no attachments.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agomain: Use _mesa_geometric_samples to calculate the value of GL_SAMPLES
Neil Roberts [Thu, 4 Feb 2016 16:12:04 +0000 (16:12 +0000)]
main: Use _mesa_geometric_samples to calculate the value of GL_SAMPLES

Otherwise it won't take into account the default samples for
framebuffers with no attachments.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0: avoid negatives in PUSH_SPACE argument
Ilia Mirkin [Fri, 5 Feb 2016 05:47:03 +0000 (00:47 -0500)]
nvc0: avoid negatives in PUSH_SPACE argument

Fixup to commit 03b3eb90d - the number of buffers could be larger than
the number of elements, in which case we'd pass a negative argument to
PUSH_SPACE, which would be bad. While we're at it, merge it with the
other PUSH_SPACE at the top of the function.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
8 years agonvc0: add some missing PUSH_SPACE's
Ilia Mirkin [Fri, 5 Feb 2016 05:36:03 +0000 (00:36 -0500)]
nvc0: add some missing PUSH_SPACE's

nvc0_vbo has explicit push space checking enabled, so we must run
PUSH_SPACE by hand. A few spots missed that.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
8 years agonvc0/ir: fix converting between predicate and gpr
Ilia Mirkin [Fri, 5 Feb 2016 03:58:48 +0000 (22:58 -0500)]
nvc0/ir: fix converting between predicate and gpr

The spill logic will insert convert ops when moving between files. It
seems like the emission logic wasn't quite ready for these converts.

Tested on fermi, and visually looked at nvdisasm output for maxwell.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
8 years agonvc0: add support for ARB_query_buffer_object
Ilia Mirkin [Sun, 31 Jan 2016 20:18:23 +0000 (15:18 -0500)]
nvc0: add support for ARB_query_buffer_object

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agost/mesa: add query buffer support
Ilia Mirkin [Sat, 9 May 2015 16:31:48 +0000 (12:31 -0400)]
st/mesa: add query buffer support

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium: add PIPE_CAP_QUERY_BUFFER_OBJECT
Ilia Mirkin [Sun, 10 Jan 2016 04:30:16 +0000 (23:30 -0500)]
gallium: add PIPE_CAP_QUERY_BUFFER_OBJECT

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium: add a way to store query result into buffer
Ilia Mirkin [Sun, 3 May 2015 00:28:11 +0000 (20:28 -0400)]
gallium: add a way to store query result into buffer

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa: add core implementation of ARB_query_buffer_object
Ilia Mirkin [Wed, 6 May 2015 02:58:12 +0000 (22:58 -0400)]
mesa: add core implementation of ARB_query_buffer_object

Forwards query result writes to drivers.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa: add driver interface for writing query results to buffers
Ilia Mirkin [Wed, 6 May 2015 02:57:41 +0000 (22:57 -0400)]
mesa: add driver interface for writing query results to buffers

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa: Handle QUERY_BUFFER_BINDING in GetIntegerv
Rafal Mielniczuk [Thu, 27 Mar 2014 20:59:05 +0000 (21:59 +0100)]
mesa: Handle QUERY_BUFFER_BINDING in GetIntegerv

Signed-off-by: Rafal Mielniczuk <rafal.mielniczuk2@gmail.com>
[imirkin: move to GL/GL_CORE section]
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa: Add QueryBuffer to context
Rafal Mielniczuk [Thu, 27 Mar 2014 20:59:04 +0000 (21:59 +0100)]
mesa: Add QueryBuffer to context

Add QueryBuffer and initialise it to NullBufferObj on start

Signed-off-by: Rafal Mielniczuk <rafal.mielniczuk2@gmail.com>
[imirkin: also release QueryBuffer on free]
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agomesa: Add ARB_query_buffer_object extension flag
Rafal Mielniczuk [Thu, 27 Mar 2014 20:59:03 +0000 (21:59 +0100)]
mesa: Add ARB_query_buffer_object extension flag

Signed-off-by: Rafal Mielniczuk <rafal.mielniczuk2@gmail.com>
[imirkin: add string to extensions.c]
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglapi: Add xml infrastructure for ARB_query_buffer_object
Rafal Mielniczuk [Thu, 27 Mar 2014 20:59:02 +0000 (21:59 +0100)]
glapi: Add xml infrastructure for ARB_query_buffer_object

Signed-off-by: Rafal Mielniczuk <rafal.mielniczuk2@gmail.com>
[imirkin: move definition to gl_API.xml as it is very short]
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglsl: simplify setting of image access qualifiers
Timothy Arceri [Thu, 4 Feb 2016 00:08:43 +0000 (11:08 +1100)]
glsl: simplify setting of image access qualifiers

Cc: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agomesa: remove dead program parameter functions
Timothy Arceri [Thu, 4 Feb 2016 10:50:39 +0000 (21:50 +1100)]
mesa: remove dead program parameter functions

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agost/nine: Use align_free when needed
Axel Davy [Thu, 28 Jan 2016 21:32:43 +0000 (22:32 +0100)]
st/nine: Use align_free when needed

Use align_free to free memory allocated
with align_malloc.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Disallow non-argb8888 cursors
Axel Davy [Tue, 26 Jan 2016 15:40:30 +0000 (16:40 +0100)]
st/nine: Disallow non-argb8888 cursors

Only argb8888 cursors are allowed.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Enforce centroid for color input when multisampling is on
Axel Davy [Sat, 9 Jan 2016 13:16:15 +0000 (14:16 +0100)]
st/nine: Enforce centroid for color input when multisampling is on

The color inputs must automatically use centroid whether
multisampling is used or not.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Fix centroid flag
Axel Davy [Thu, 28 Jan 2016 21:44:42 +0000 (22:44 +0100)]
st/nine: Fix centroid flag

sem.reg.mod & NINED3DSPDM_CENTROID is worth 4 when
centroid is requested, whereas
TGSI_INTERPOLATE_LOC_CENTROID is worth 1.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Use fast clears more often for MRTs
Axel Davy [Mon, 4 Jan 2016 15:15:18 +0000 (16:15 +0100)]
st/nine: Use fast clears more often for MRTs

This enables to use fast clears in the following
case:

pixel shader renders to 1 RT
4 RT bound
clear
new pixel shader bound that renders to 4 RTs

Previously the fast clear path wouldn't be hit,
because when trying the fast clear path,
the framebuffer state would be configured for 1 RT,
instead of 4.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Use linear filtering for shadow mapping
Axel Davy [Mon, 4 Jan 2016 15:13:07 +0000 (16:13 +0100)]
st/nine: Use linear filtering for shadow mapping

Some docs say linear filtering is always used when
app does shadow mapping.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Respect block alignment on surface lock
Patrick Rudolph [Thu, 22 Oct 2015 13:46:16 +0000 (15:46 +0200)]
st/nine: Respect block alignment on surface lock

Respect block alignment for ATI1/ATI2 format when trying to lock a
surface using LockRect().
Fixes failing WINE tests device.c test_surface_blocks() tests.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Add Render state validation layer
Axel Davy [Sat, 16 May 2015 12:28:41 +0000 (14:28 +0200)]
st/nine: Add Render state validation layer

Testing Win behaviour seems to show wrong states
are accepted, but then depending on the states
some specific 'good' behaviours happen.

This adds some validation to catch invalid
states and have these 'good' behaviours
when it happens.

Also reorders SetRenderState to match the expected
optimisation:
(Value == previous Value) => return immediately,
which affects D3D9 hacks too.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
8 years agoDRI_CONFIG: Add option to override vendor id
Patrick Rudolph [Mon, 25 May 2015 11:06:58 +0000 (13:06 +0200)]
DRI_CONFIG: Add option to override vendor id

Add config option override_vendorid to report a fake card in d3dadapter9 drm.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Implement NineDevice9_GetAvailableTextureMem
Patrick Rudolph [Wed, 30 Sep 2015 14:42:10 +0000 (16:42 +0200)]
st/nine: Implement NineDevice9_GetAvailableTextureMem

Implement a device private memory counter similar to Win 7.

Only textures and surfaces increment vidmem and may return
ERR_OUTOFVIDEOMEMORY. Vertexbuffers and indexbuffers creation always
succeedes, even when out of video memory.

Fixes "Vampire: The Masquerade - Bloodlines" allocating resources until crash.
Fixes "Age of Conan" allocating resources until crash.
Fixes failing WINE test device.c test_vidmem_accounting().

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Handle Window Occlusion
Patrick Rudolph [Sat, 20 Jun 2015 18:06:11 +0000 (20:06 +0200)]
st/nine: Handle Window Occlusion

Apps can know if the window is occluded by checking for
specific error messages. The behaviour is different
for Device9 and Device9Ex.

This allow games to release the mouse and stop rendering
until the focus is restored.

In case of multiple swapchain we do care only of the device one.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Store minor version num
Patrick Rudolph [Sun, 23 Aug 2015 06:42:34 +0000 (08:42 +0200)]
st/nine: Store minor version num

To keep compatible with older ID3DPresent interfaces (used to talk
with Wine), store the minor version num accessible to all
statetracker functions (in the NineDevice9 structure).

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Call flush_resource before flush
Axel Davy [Thu, 8 Oct 2015 22:08:43 +0000 (00:08 +0200)]
st/nine: Call flush_resource before flush

flush_resource needs to be called before flush (for
fast clear resolve, etc).

Removes useless computation of resource (it is
already set correctly).

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Fix remaining swapchain tests
Patrick Rudolph [Thu, 22 Oct 2015 15:00:35 +0000 (17:00 +0200)]
st/nine: Fix remaining swapchain tests

Return D3DERR_INVALIDCALL instead of E_POINTER.
On error set ppBackBuffer to NULL.

Multiple swapchains can only be created in windowed mode as
windowed swapchain.

Set backbuffer to NULL in NineDevice9_GetBackBuffer, but not
in NineSwapChain9_GetBackBuffer.

This fixes all WINE's device.c test_swapchain() tests.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Fix crash NineDevice9_CreateAdditionalSwapChain
Axel Davy [Wed, 11 Nov 2015 09:13:58 +0000 (10:13 +0100)]
st/nine: Fix crash NineDevice9_CreateAdditionalSwapChain

When no window is specified, we should revert to the focus window.

This deserves more tests however (what if the device swapchain is
already using the focus window ?)

Fixes crash for FFXIV

Signed-off-by: Axel Davy <axel.davy@ens.fr>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
8 years agost/nine: Fix possible crash on error
Patrick Rudolph [Thu, 22 Oct 2015 15:02:16 +0000 (17:02 +0200)]
st/nine: Fix possible crash on error

In case swapchain creation fails This->swapchains[i] might be NULL and
causes a crash.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
8 years agost/nine: Test more presentation params
Patrick Rudolph [Thu, 22 Oct 2015 14:02:14 +0000 (16:02 +0200)]
st/nine: Test more presentation params

Return errors in case of invalid presentation parameters.
Fixes failing WINE tests device.c test_swapchain_parameters().

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Axel Davy <axel.davy@ens.fr>