mesa.git
5 years agonir: fix denorms in unpack_half_1x16()
Samuel Iglesias Gonsálvez [Mon, 9 Jul 2018 07:46:59 +0000 (09:46 +0200)]
nir: fix denorms in unpack_half_1x16()

According to VK_KHR_shader_float_controls:

"Denormalized values obtained via unpacking an integer into a vector
 of values with smaller bit width and interpreting those values as
 floating-point numbers must: be flushed to zero, unless the entry
 point is declared with the code:DenormPreserve execution mode."

v2:
- Add nir_op_unpack_half_2x16_flush_to_zero opcode (Connor).

v3:
- Adapt to use the new NIR lowering framework (Andres).

v4:
- Updated to renamed shader info member and enum values (Andres).

v5:
- Simplify flags logic operations (Caio).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v2]
5 years agonir/algebraic: disable inexact optimizations depending on float controls execution...
Samuel Iglesias Gonsálvez [Wed, 12 Dec 2018 15:29:13 +0000 (16:29 +0100)]
nir/algebraic: disable inexact optimizations depending on float controls execution mode

If FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE or
FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO are enabled, do not apply the
inexact optimizations so the VK_KHR_shader_float_controls execution
mode is respected.

v2:
- Do not apply inexact optimizations if SHADER_DENORM_FLUSH_TO_ZERO is
  enabled (Andres).

v3:
- Updated to renamed shader info member (Andres).

v4:
- Directly access execution mode instead of dragging it by parameter (Caio).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v1]
5 years agonir/algebraic: mark float optimizations returning one parameter as inexact
Andres Gomez [Tue, 23 Apr 2019 13:54:24 +0000 (15:54 +0200)]
nir/algebraic: mark float optimizations returning one parameter as inexact

With the arrival of VK_KHR_shader_float_controls algebraic
optimizations for float types of the form (('fop', a, b), a) become
inexact depending on the execution mode.

For example, if we have activated SHADER_DENORM_FLUSH_TO_ZERO, in case
of a denorm value for the "a" parameter, we cannot return it still as
a denorm, it needs to be flushed to zero. Therefore, we mark now all
those operations as inexact.

Suggested-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
5 years agonir/constant_expressions: mind rounding mode converting from float to float16 destina...
Samuel Iglesias Gonsálvez [Mon, 4 Feb 2019 14:10:35 +0000 (15:10 +0100)]
nir/constant_expressions: mind rounding mode converting from float to float16 destinations

v2:
- Move the op-code specific knowledge to nir_opcodes.py even if it
  means a rount trip conversion (Connor).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agonir/opcodes: make sure f2f16_rtz and f2f16_rtne behavior is not overriden by the...
Samuel Iglesias Gonsálvez [Sun, 21 Apr 2019 10:35:17 +0000 (12:35 +0200)]
nir/opcodes: make sure f2f16_rtz and f2f16_rtne behavior is not overriden by the float controls execution mode

Suggested-by: Connor Abbott <cwabbott0@gmail.com>
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
5 years agonir: mind rounding mode on fadd, fsub, fmul and fma opcodes
Samuel Iglesias Gonsálvez [Tue, 12 Feb 2019 14:43:10 +0000 (15:43 +0100)]
nir: mind rounding mode on fadd, fsub, fmul and fma opcodes

According to Vulkan spec, the new execution modes affect only
correctly rounded SPIR-V instructions, which includes fadd, fsub and
fmul.

v2:
- Fix fmul, fsub and fadd round-to-zero definitions, they should use
  auxiliary functions to calculate the proper value because Mesa uses
  round-to-nearest-even rounding mode by default (Connor).

v3:
- Do an actual fused multiply-add at ffma (Connor).

v4:
- Simplify fadd and fmul for bit sizes < 64 (Connor).
- Do not use double ffma for 32 bits float (Connor).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v3]
5 years agonir: add support for round to zero rounding mode to nir_op_f2f32
Samuel Iglesias Gonsálvez [Wed, 13 Feb 2019 09:31:37 +0000 (10:31 +0100)]
nir: add support for round to zero rounding mode to nir_op_f2f32

f2f16's rounding modes are already handled and f2f64 don't need it
as there is not a floating point type with higher bit size than 64 for
now.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
5 years agoutil: add fp64 -> fp32 conversion support for RTNE and RTZ rounding modes
Samuel Iglesias Gonsálvez [Thu, 6 Sep 2018 14:01:34 +0000 (16:01 +0200)]
util: add fp64 -> fp32 conversion support for RTNE and RTZ rounding modes

In order to be coherent with the pre-existent API for half floats,
this new API for double is the one meant to be used when doing double
to float conversions. It is no more than a wrapper for the softfloat.h
API but we meant to keep that one private.

v2:
- Fix bug in _mesa_double_to_float_rtz() in the inf/nan detection
  using the exponent value.

v3:
- Replace custom f64 -> f32 implementations with the softfloat
  one (Andres).

v4:
- Added API usage clarifying comments (Caio).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agoutil: add float to float16 conversions with RTZ and RTNE
Samuel Iglesias Gonsálvez [Wed, 4 Jul 2018 10:02:30 +0000 (12:02 +0200)]
util: add float to float16 conversions with RTZ and RTNE

In order to be coherent with the pre-existent functions, this new API
is the one meant to be used when doing half float to float
conversions. It is no more than a wrapper for the softfloat.h API but
we meant to keep that one private.

v2:
- Replace custom f32 -> f16 RTZ implementation with the softfloat
  one (Andres).

v3:
- Added API usage clarifying comments (Caio).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agoutil: add softfloat functions to operate with doubles and floats
Samuel Iglesias Gonsálvez [Tue, 12 Feb 2019 08:51:31 +0000 (09:51 +0100)]
util: add softfloat functions to operate with doubles and floats

Implemented fadd, fsub, fmul and ffma for doubles and ffma for floats,
rounding to zero, using a modified implementation from Berkely
Softfloat 3e Library.

Their implementation correctness has been checked with the Berkeley
TestFloat Release 3e tool for x86_64.

v2:
- Reuse util_last_bit64() in _mesa_count_leading_zeros64()
  implementation (Connor).

v3:
- Add a specific ffma for floats version (Connor).
- Implement the ffma for doubles version (Andres).
- Lots of fixes in fadd, fsub and fmul (Andres).
- Improved documentation (Andres).

v4:
- Added f64 -> f32 conversion function (Andres).
- Added f32 -> f16 RTZ conversion function (Andres).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Tested-by: Andres Gomez <agomez@igalia.com>
Acked-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agonir: add support for flushing to zero denorm constants
Samuel Iglesias Gonsálvez [Wed, 20 Jun 2018 07:11:14 +0000 (09:11 +0200)]
nir: add support for flushing to zero denorm constants

v2:
- Refactor conditions and shared function (Connor).
- Move code to nir_eval_const_opcode() (Connor).
- Don't flush to zero on fquantize2f16
  From Vulkan spec, VK_KHR_shader_float_controls section:

  "3) Do denorm and rounding mode controls apply to OpSpecConstantOp?

  RESOLVED: Yes, except when the opcode is OpQuantizeToF16."

v3:
- Fix bit size (Connor).
- Fix execution mode on nir_loop_analize (Connor).

v4:
- Adapt after API changes to nir_eval_const_opcode (Andres).

v5:
- Simplify constant_denorm_flush_to_zero (Caio).

v6:
- Adapt after API changes and to use the new constant
  constructors (Andres).
- Replace MAYBE_UNUSED with UNUSED as the first is going
  away (Andres).

v7:
- Adapt to newly added calls (Andres).
- Simplified the auxiliary to flush denorms to zero (Caio).
- Updated to renamed supported capabilities member (Andres).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v4]
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agonir: add auxiliary functions to detect if a mode is enabled
Samuel Iglesias Gonsálvez [Fri, 1 Feb 2019 10:23:28 +0000 (11:23 +0100)]
nir: add auxiliary functions to detect if a mode is enabled

v2:
- Added more functions.

v3:
- Simplify most of the functions (Caio).

v4:
- Updated to renamed enum values (Andres).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v2]
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> [v3]
5 years agospirv/nir: keep track of SPV_KHR_float_controls execution modes
Samuel Iglesias Gonsálvez [Thu, 31 May 2018 10:20:30 +0000 (12:20 +0200)]
spirv/nir: keep track of SPV_KHR_float_controls execution modes

v2:
- Add support for rounding modes for each floating point bit size.

v3:
- Commit e68871f6a44 ("spirv: Handle constants and types before
  execution modes") changed when the execution modes are handled,
  which affects the result of the floating point constants when the
  rounding mode is set in the execution mode. Moved the handling of
  the rounding modes before we handle the constants.

v4:
- Rename vtn_decoration "literals" to "operands" (Andres).
- Simplify execution mode parsing util function (Caio).
- Extend the comment about the timing of the handling of the rounding
  modes (Caio).

v5:
- Correct extension name (Caio).
- Rename shader info member (Andres).
- Rename float controls enum (Andres).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v3]
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agospirv: check support for SPV_KHR_float_controls capabilities
Samuel Iglesias Gonsálvez [Thu, 31 May 2018 09:50:54 +0000 (11:50 +0200)]
spirv: check support for SPV_KHR_float_controls capabilities

v2:
- Correct extension name (Caio).
- Rename supported capabilities member (Andres).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v1]
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agogallium/xlib: Fix glXMakeCurrent(dpy, None, None, ctx)
Adam Jackson [Tue, 10 Sep 2019 19:11:19 +0000 (15:11 -0400)]
gallium/xlib: Fix glXMakeCurrent(dpy, None, None, ctx)

This is entirely legal in GL 3.0+. I wonder how many more times I'll
need to fix this specific bug.

5 years agogallium/xlib: Remove MakeCurrent_PrevContext
Adam Jackson [Tue, 10 Sep 2019 19:06:29 +0000 (15:06 -0400)]
gallium/xlib: Remove MakeCurrent_PrevContext

As the comment notes, this is not thread-safe. You can just as easily
use GetCurrentContext instead, so, do that.

5 years agogallium/xlib: Remove drawable caching from the MakeCurrent path
Adam Jackson [Tue, 10 Sep 2019 18:59:06 +0000 (14:59 -0400)]
gallium/xlib: Remove drawable caching from the MakeCurrent path

AFAICT this only exists to avoid hitting XMesaFindBuffer, which is a
linear search. But you don't have that many GLX drawables, so whatever.

5 years agoradeonsi: add Navi12 PCI ID
Marek Olšák [Tue, 17 Sep 2019 20:00:33 +0000 (16:00 -0400)]
radeonsi: add Navi12 PCI ID

trivial and urgent

Cc: 19.2 <mesa-stable@lists.freedesktop.org>
5 years agoci: Run tests on i386 cross builds
Adam Jackson [Tue, 17 Sep 2019 00:44:12 +0000 (20:44 -0400)]
ci: Run tests on i386 cross builds

Yes, some tests fail, but we can turn those into XFAILs at meson time.
Better to keep the things that work working than not cover them at all.
Unfortunately XPASS results will not cause the build to fail until we
update CI to meson 0.51 or newer.

Reviewed-by: Daniel Stone <daniels@collabora.com>
5 years agoFix timespec_from_nsec test for 32-bit time_t
Jon Turney [Mon, 16 Sep 2019 14:25:33 +0000 (15:25 +0100)]
Fix timespec_from_nsec test for 32-bit time_t

Since struct timespec's tv_sec member is of type time_t, adjust the
expected value to allow for the truncation which will occur with 32-bit
time_t.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
5 years agoiris: close screen fd on iris_destroy_screen
Tapani Pälli [Tue, 17 Sep 2019 07:21:24 +0000 (10:21 +0300)]
iris: close screen fd on iris_destroy_screen

Otherwise it never gets closed, this fixes errors seen with deqp-egl
where we end up opening 1024 files.

Fixes: 2dce0e94 ("iris: Initial commit of a new 'iris' driver for Intel Gen8+ GPUs.")
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
5 years agodocs: update calendar, add news item and link release notes for 19.1.7
Juan A. Suarez Romero [Tue, 17 Sep 2019 10:55:41 +0000 (12:55 +0200)]
docs: update calendar, add news item and link release notes for 19.1.7

Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
5 years agodocs: add sha256 checksums for 19.1.7
Juan A. Suarez Romero [Tue, 17 Sep 2019 10:53:06 +0000 (12:53 +0200)]
docs: add sha256 checksums for 19.1.7

Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
(cherry picked from commit b9d7244035ce2da5bd93c984e30944b3730b219e)

5 years agodocs: add release notes for 19.1.7
Juan A. Suarez Romero [Tue, 17 Sep 2019 10:31:38 +0000 (12:31 +0200)]
docs: add release notes for 19.1.7

Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
(cherry picked from commit f632aac9385cfe02f5bfe762d93e60b5b46f2c77)

5 years agoac: Remove DEBUG workaround
Michel Dänzer [Tue, 17 Sep 2019 10:10:28 +0000 (12:10 +0200)]
ac: Remove DEBUG workaround

As of version 7, LLVM uses LLVM_DEBUG instead of just DEBUG.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
5 years agoswr: Limit DEBUG workaround to LLVM < 7
Michel Dänzer [Mon, 16 Sep 2019 15:08:14 +0000 (17:08 +0200)]
swr: Limit DEBUG workaround to LLVM < 7

As of version 7, LLVM uses LLVM_DEBUG instead of just DEBUG.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
5 years agogallivm: Limit DEBUG workaround to LLVM < 7
Michel Dänzer [Mon, 16 Sep 2019 15:06:19 +0000 (17:06 +0200)]
gallivm: Limit DEBUG workaround to LLVM < 7

As of version 7, LLVM uses LLVM_DEBUG instead of just DEBUG.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
5 years agost/mesa: remove always-true expression
Erik Faye-Lund [Mon, 16 Sep 2019 06:36:16 +0000 (08:36 +0200)]
st/mesa: remove always-true expression

In case the GLSL version is 130 or higher, we've already enabled
ARB_shader_bit_encoding a bit earlier in this same function. So this
condition will always be true.

Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
5 years agoetnaviv: a bit of micro-optimization
Christian Gmeiner [Fri, 13 Sep 2019 06:56:11 +0000 (08:56 +0200)]
etnaviv: a bit of micro-optimization

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Jonathan Marek <jonathan@marek.ca>
5 years agolima: reset scissor state if scissor test is disabled
Icenowy Zheng [Mon, 16 Sep 2019 16:07:40 +0000 (00:07 +0800)]
lima: reset scissor state if scissor test is disabled

The PLBU seems to preserve scissor state between draws, and since lima doesn't
emit PLBU_CMD_SCISSORS() if scissor test is disabled, it uses state from previous draw.

Fix it by emitting PLBU_CMD_SCISSORS() for full fb if scissor test is disabled.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Reviewed-by: Qiang Yu <yuq825@gmail.com>
5 years agovulkan: Update the XML and headers to 1.1.123
Jason Ekstrand [Tue, 17 Sep 2019 02:15:18 +0000 (21:15 -0500)]
vulkan: Update the XML and headers to 1.1.123

Acked-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
5 years agospirv: Handle ShaderLayer and ShaderViewportIndex capabilities
Caio Marcelo de Oliveira Filho [Sat, 14 Sep 2019 03:40:50 +0000 (20:40 -0700)]
spirv: Handle ShaderLayer and ShaderViewportIndex capabilities

SPIR-V 1.5 incorported the SPV_EXT_shader_viewport_index_layer but
splitting into the two capabilities above.  Just handle them as we
support the extension already.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
5 years agospirv: Update JSON and headers to 1.5
Caio Marcelo de Oliveira Filho [Sat, 14 Sep 2019 03:36:26 +0000 (20:36 -0700)]
spirv: Update JSON and headers to 1.5

Acked-by: Jason Ekstrand <jason@jlekstrand.net>
5 years agofreedreno: Fix invalid read when a block has no instructions.
Eric Anholt [Tue, 3 Sep 2019 21:19:36 +0000 (14:19 -0700)]
freedreno: Fix invalid read when a block has no instructions.

We can't deref list_(first/last)_entries unless we know we have at least
one.  Instead, just use our IP we've been tracking as we go to set up the
start ip, and fill in the end IP as we walk instructions.

Fixes a complaint in valgrind on
dEQP-GLES3.functional.transform_feedback.* which sometimes has an
empty main (non-END) block when the VS inputs are just directly mapped
to outputs without any ALU ops.

Reviewed-by: Rob Clark <robdclark@chromium.org>
5 years agost/mesa: Increase GL_POINT_SIZE_RANGE minimum to 1.0
Kenneth Graunke [Fri, 13 Sep 2019 02:12:10 +0000 (19:12 -0700)]
st/mesa: Increase GL_POINT_SIZE_RANGE minimum to 1.0

Table 23.54 of the OpenGL 4.5 spec lists the minimum values for
GL_POINT_SIZE_RANGE as [1, 1].  So zero is not allowed (even though
arguably this could be useful for MSAA rendering, where a sub-1px
point might cover only some samples...)

This fixes the WebGL 2.0 conformance suite's state.gl-get-calls test
on Chromium on Linux, which uses desktop OpenGL.  The test checks that
the minimum value of GL_ALIASED_POINT_SIZE_RANGE is 1.  Unfortunately,
that query doesn't exist in desktop GL, so it checks POINT_SIZE_RANGE,
which is the anti-aliased value.  There's not really anything better
for Chromium to do here, unfortunately.  When running Chromium with
--api=es3, it maps it to the correct query and the test already works.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agost/mesa: Prefer 5551 formats for GL_UNSIGNED_SHORT_5_5_5_1.
Kenneth Graunke [Fri, 13 Sep 2019 00:30:28 +0000 (17:30 -0700)]
st/mesa: Prefer 5551 formats for GL_UNSIGNED_SHORT_5_5_5_1.

Previously, internalformat GL_RGBA and type GL_UNSIGNED_SHORT_5_5_5_1
was promoted to RGBA8888 as the table entry with the 5551 formats
is listed below the 8888 entry, and it also doesn't have GL_RGBA as
a possible internalformat.

Using actual 5551 fixes the following dEQP-EGL test:
- dEQP-EGL.functional.image.modify.tex_rgb5_a1_tex_subimage_rgba8

Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agoradv: always emit a position export in gs copy shaders
Rhys Perry [Mon, 2 Sep 2019 16:40:43 +0000 (17:40 +0100)]
radv: always emit a position export in gs copy shaders

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Fixes: f8d0337299f ('radv: add multiple streams support for the GS copy shader')
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
5 years agoradv: keep GS threads with excessive emissions which could write to memory
Rhys Perry [Mon, 29 Apr 2019 12:41:46 +0000 (13:41 +0100)]
radv: keep GS threads with excessive emissions which could write to memory

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
5 years agodrirc: include unreal engine version 0 to 23
Lionel Landwerlin [Mon, 16 Sep 2019 15:01:28 +0000 (18:01 +0300)]
drirc: include unreal engine version 0 to 23

This was meant to include up to version 23.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 0616b7ac90 ("vulkan: add vk_x11_strict_image_count option")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111522
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
5 years agoutil/xmlconfig: fix regexp compile failure check
Lionel Landwerlin [Mon, 16 Sep 2019 14:47:12 +0000 (17:47 +0300)]
util/xmlconfig: fix regexp compile failure check

This is embarrasing...

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 04dc6074cf ("driconfig: add a new engine name/version parameter")
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
5 years agogallium/gdi: use GALLIUM_FOO rather than HAVE_FOO
Erik Faye-Lund [Wed, 7 Aug 2019 11:42:36 +0000 (13:42 +0200)]
gallium/gdi: use GALLIUM_FOO rather than HAVE_FOO

This matches what other targets do, and makes it easier to port to
meson.

Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
5 years agoscons: Make scons and meson agree about path to glapi generated headers
Dylan Baker [Fri, 31 May 2019 16:39:32 +0000 (09:39 -0700)]
scons: Make scons and meson agree about path to glapi generated headers

Currently scons puts them in src/mapi/glapi, meosn puts them in
src/mapi/glapi/gen. This results in some things being compilable only by
one or the other, put them in the same places so that everyone is happy.

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
5 years agolima: add standalone disassembler with primitive MBS parser
Vasily Khoruzhick [Sat, 14 Sep 2019 07:15:28 +0000 (00:15 -0700)]
lima: add standalone disassembler with primitive MBS parser

It's useful for analyzing shader binaries produced by ARM mali offline
compiler which outputs files in MBS format. MBS is mali binary shader,
currently parser just extracts shader binary and ignores everything else.

Reviewed-and-tested-by: Connor Abbott<cwabbott0@gmail.com>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
5 years agomesa/gl: Sync with Khronos registry
Heinrich Fink [Mon, 16 Sep 2019 11:20:49 +0000 (13:20 +0200)]
mesa/gl: Sync with Khronos registry

Update GL headers and xml API from upstream Khronos registry (commit
3d0c3eb). Keep `BUILDING_MESA` quirk in glext.h.

mesa/extensions: Expose EXT_EGL_sync instead of MESA_EGL_sync to reflect
Khronos request of changing this extension's scope from MESA to EXT.
EGL_EGL_sync is also the name of the extension that has been merged into
the upstream Khronos GL registry.

Remove MESA_EGL_sync spec txt from Mesa tree as it is now published as
EXT by Khronos.

v1: Remove MESA_EGL_sync spec and squash commits (Eric E)

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
5 years agonir/large_constants: pass after lowering copy_deref
Sergii Romantsov [Thu, 29 Aug 2019 07:58:38 +0000 (10:58 +0300)]
nir/large_constants: pass after lowering copy_deref

v2: by J.Ekstrand suggestion moved lowering of large
    constants after lowering of copy_deref is done.

CC: Jason Ekstrand <jason@jlekstrand.net>
CC: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111450
Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com>
5 years agogitlab-ci: Move up meson-arm64 job definition
Michel Dänzer [Fri, 13 Sep 2019 09:59:43 +0000 (11:59 +0200)]
gitlab-ci: Move up meson-arm64 job definition

This might allow the arm64 tests to start running earlier.

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agogitlab-ci: Move dependencies/needs for meson-main job to .deqp-test
Michel Dänzer [Fri, 13 Sep 2019 09:13:12 +0000 (11:13 +0200)]
gitlab-ci: Move dependencies/needs for meson-main job to .deqp-test

Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agogitlab-ci: Simplify some job definitions by extending more similar jobs
Michel Dänzer [Wed, 11 Sep 2019 16:55:43 +0000 (18:55 +0200)]
gitlab-ci: Simplify some job definitions by extending more similar jobs

v2:
* Preserve setting NIR_VALIDATE=0 for all arm64_* jobs
* Preserve setting DEQP_SKIPS=deqp-default-skips.txt for
  arm64_a306_gles2 jobs

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com> # v1
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agogitlab-ci: Use multiple inheritance instead of YAML references
Michel Dänzer [Fri, 6 Sep 2019 15:35:52 +0000 (17:35 +0200)]
gitlab-ci: Use multiple inheritance instead of YAML references

Support for multiple inheritance was added to GitLab recently.

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agogitlab-ci: Add needs stanza to arm64_a306_gles2 job definition
Michel Dänzer [Fri, 13 Sep 2019 08:56:54 +0000 (10:56 +0200)]
gitlab-ci: Add needs stanza to arm64_a306_gles2 job definition

This allows the arm64_a306_gles2 jobs to run as soon as the meson-arm64
job has finished.

Fixes: 6f0dc087b7a5 "freedreno: Introduce gitlab-based CI."
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agoradeonsi/nir: fix number of used samplers
Timothy Arceri [Mon, 16 Sep 2019 09:39:40 +0000 (19:39 +1000)]
radeonsi/nir: fix number of used samplers

Commit f3e978db incorrectly assumed the maximum number of
samplers was equal to the max number of defined samplers
e.g. where bindings skip slots.

This fixes an assert in si_nir_load_sampler_desc() for an
enemy territory quake wars shader. And fixes potential bugs with
incorrect bounds limiting in the same code for production builds
of mesa.

Fixes: f3e978db ("radeonsi/nir: Remove uniform variable scanning")
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
5 years agoradv/gfx10: disable unsupported transform feedback features for NGG
Samuel Pitoiset [Wed, 11 Sep 2019 07:22:29 +0000 (09:22 +0200)]
radv/gfx10: disable unsupported transform feedback features for NGG

Mostly multiple streams and queries which have to be fixed/implemented.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: implement NGG streamout
Samuel Pitoiset [Mon, 9 Sep 2019 08:54:27 +0000 (10:54 +0200)]
radv/gfx10: implement NGG streamout

It's still disabled by default because transform feedback randomly
hangs and it seems like it's related to GDS (cf. RadeonSI).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: make sure to wait for idle before clearing GDS
Samuel Pitoiset [Wed, 11 Sep 2019 07:19:21 +0000 (09:19 +0200)]
radv/gfx10: make sure to wait for idle before clearing GDS

Otherwise the next streamout operation will overwrite GDS. This
can be improved by tracking if there is a streamout operation in
flight. Currently the driver unconditionally flushes but that
doesn't matter much as NGG streamout is disabled by default.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: make GDS idle when leaving the IB
Samuel Pitoiset [Tue, 10 Sep 2019 08:56:24 +0000 (10:56 +0200)]
radv/gfx10: make GDS idle when leaving the IB

NGG streamout uses GDS and we have to make sure that another
process isn't going to overwrite GDS while our shaders are busy.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: enable NGG_WAVE_ID_EN for NGG streamout
Samuel Pitoiset [Tue, 10 Sep 2019 19:45:57 +0000 (21:45 +0200)]
radv/gfx10: enable NGG_WAVE_ID_EN for NGG streamout

Otherwise the wave IDs are probably 0 and it hangs. NGG_WAVE_ID_EN
generates wave IDs for GDS OA.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: gather GS output for VS as NGG
Samuel Pitoiset [Mon, 9 Sep 2019 10:00:50 +0000 (12:00 +0200)]
radv/gfx10: gather GS output for VS as NGG

For streamout we have to the number of streamout outputs.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: compute the correct buffer size for NGG streamout
Samuel Pitoiset [Mon, 9 Sep 2019 09:04:07 +0000 (11:04 +0200)]
radv/gfx10: compute the correct buffer size for NGG streamout

It's used to determined the max emit per buffer.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: fix unnecessary LDS overallocation for NGG GS
Samuel Pitoiset [Mon, 9 Sep 2019 08:43:44 +0000 (10:43 +0200)]
radv/gfx10: fix unnecessary LDS overallocation for NGG GS

Ported from RadeonSI.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: adjust the LDS size for VS/TES NGG streamout
Samuel Pitoiset [Mon, 9 Sep 2019 08:42:18 +0000 (10:42 +0200)]
radv/gfx10: adjust the LDS size for VS/TES NGG streamout

It should account for the number of streamout outputs.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: unconditionally declare scratch space for NGG streamout without GS
Samuel Pitoiset [Mon, 9 Sep 2019 08:32:10 +0000 (10:32 +0200)]
radv/gfx10: unconditionally declare scratch space for NGG streamout without GS

Streamout outputs are stored in the ESGS ring.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: adjust the GS NGG scratch size for streamout
Samuel Pitoiset [Mon, 9 Sep 2019 08:29:22 +0000 (10:29 +0200)]
radv/gfx10: adjust the GS NGG scratch size for streamout

It needs more space for multiple streams.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: allocate GDS/OA buffer objects for NGG streamout
Samuel Pitoiset [Mon, 9 Sep 2019 08:26:54 +0000 (10:26 +0200)]
radv/gfx10: allocate GDS/OA buffer objects for NGG streamout

This allocates two BOs for GFX10 NGG streamout.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: implement NGG streamout begin/end functions
Samuel Pitoiset [Mon, 9 Sep 2019 08:25:07 +0000 (10:25 +0200)]
radv/gfx10: implement NGG streamout begin/end functions

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/gfx10: add an option to switch from legacy to NGG streamout
Samuel Pitoiset [Mon, 9 Sep 2019 08:23:30 +0000 (10:23 +0200)]
radv/gfx10: add an option to switch from legacy to NGG streamout

This internal option is turned off by default because NGG streamout
still hangs. It seems like it's related to GDS as RadeonSI.

That option will be turned on once all issues are resolved.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoradv/winsys: add support for GS and OA domains
Samuel Pitoiset [Tue, 10 Sep 2019 13:10:13 +0000 (15:10 +0200)]
radv/winsys: add support for GS and OA domains

For NGG streamout which uses GDS.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
5 years agoiris: Fix fence leak in iris_fence_flush
Danylo Piliaiev [Thu, 12 Sep 2019 11:17:28 +0000 (14:17 +0300)]
iris: Fix fence leak in iris_fence_flush

Documentation for pipe_context::flush states:
 "NOTE: use screen->fence_reference() (or equivalent) to transfer
  new fence ref to **fence, to ensure that previous fence is unref'd"

Hence we need to unref previous out_fence.

Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
5 years agonir/large_constants: more careful data copying
Sergii Romantsov [Thu, 12 Sep 2019 12:28:45 +0000 (15:28 +0300)]
nir/large_constants: more careful data copying

A filed of nir_variable.location may be equel to -1.
That may cause copying to invalid address of list-node,
making some internal fields corrupted.

Patch fixes segfault during freeing context due to
corrupted address of ralloc_header.destructor.

v2: copy data if var is constant (Connor Abbott)

CC: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Fixes: b6d475356846 (nir/large_constants: De-duplicate constants)
Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111676
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
5 years agodocs: extend 19.1.x releases
Juan A. Suarez Romero [Fri, 13 Sep 2019 14:45:01 +0000 (16:45 +0200)]
docs: extend 19.1.x releases

As 19.2 got some delays, let's extend 19.1 at least in one extra
release.

Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
5 years agovulkan: add vk_x11_strict_image_count option
Lionel Landwerlin [Thu, 5 Sep 2019 20:54:53 +0000 (23:54 +0300)]
vulkan: add vk_x11_strict_image_count option

This option strictly allocate the minImageCount given by the
application at swapchain creation.

This works around application that do not deal with the fact that the
implementation allocates more images than the minimum specified.

v2: Add values in default drirc (Bas)

v3: specify engine name/version (Lionel)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111522
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Cc: 19.2 <mesa-stable@lists.freedesktop.org>
5 years agodriconfig: add a new engine name/version parameter
Lionel Landwerlin [Sun, 8 Sep 2019 09:59:32 +0000 (12:59 +0300)]
driconfig: add a new engine name/version parameter

Vulkan applications can register with the following structure :

typedef struct VkApplicationInfo {
    VkStructureType    sType;
    const void*        pNext;
    const char*        pApplicationName;
    uint32_t           applicationVersion;
    const char*        pEngineName;
    uint32_t           engineVersion;
    uint32_t           apiVersion;
} VkApplicationInfo;

This enables the Vulkan implementations to apply workarounds based off
matching this description.

Here we add a new parameter for matching the driconfig options with
the following :

    <device driver="anv">
        <application engine_name_match="MyOwnEngine.*" engine_versions="10:12,40:42">
            <option name="blaaah" value="true" />
        </application>
    </device>

v2: switch engine name match to use regexps

v3: Verify that the regexec returns REG_NOMATCH for match failure (Eric)

v4: Add missing bit that went to the following commit (Eric)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Cc: 19.2 <mesa-stable@lists.freedesktop.org>
5 years agoradv: store engine name
Lionel Landwerlin [Sun, 8 Sep 2019 09:57:16 +0000 (12:57 +0300)]
radv: store engine name

We'll use this later for a new driconfig matching parameter.

v2: Avoid leak in device creation error case (Bas)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Cc: 19.2 <mesa-stable@lists.freedesktop.org>
5 years agogallium: util_set_vertex_buffers_mask(..): make use of u_bit_consecutive(..)
Christian Gmeiner [Fri, 13 Sep 2019 07:04:45 +0000 (09:04 +0200)]
gallium: util_set_vertex_buffers_mask(..): make use of u_bit_consecutive(..)

Also move the clearing of the bits out of if/else.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agogitlab-ci/a630: skip dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8
Rob Clark [Sat, 14 Sep 2019 17:22:55 +0000 (10:22 -0700)]
gitlab-ci/a630: skip dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8

Seen a couple flakes on this one so far.  Not sure if it is a real
driver problem or not, but skip it to unblock things.

Signed-off-by: Rob Clark <robdclark@chromium.org>
5 years agovirgl: replace fprintf with _debug_printf
Lepton Wu [Thu, 12 Sep 2019 17:36:11 +0000 (10:36 -0700)]
virgl: replace fprintf with _debug_printf

Signed-off-by: Lepton Wu <lepton@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
5 years agoiris: Initialize ice->state.prim_mode to an invalid value
Kenneth Graunke [Fri, 13 Sep 2019 09:32:25 +0000 (02:32 -0700)]
iris: Initialize ice->state.prim_mode to an invalid value

It was calloc'd to 0 which is PIPE_PRIM_POINTS, which means that we
fail to notice an initial primitive of points being new, and fail at
updating the "primitive is points or lines" field.

We do not need to reset this on device loss because we're tracking
the last primitive mode sent to us on the CPU via draw_vbo, not the
last primitive mode sent to the GPU.

Fixes several tests:
- dEQP-GLES3.functional.clipping.point.wide_point_clip
- dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
- dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner

Fixes: dcfca0af7c5 ("iris: Set XY Clipping correctly.")
5 years agogitlab-ci: Make the test job fail when bugs are unexpectedly fixed.
Eric Anholt [Thu, 12 Sep 2019 19:34:50 +0000 (12:34 -0700)]
gitlab-ci: Make the test job fail when bugs are unexpectedly fixed.

If people fix bugs without updating the expected-fails list, then we
end up with a lack of coverage of those failures in the future.  Also,
some day down the line another developer ends up trying to figure out
if the bug was actually fixed or their environment is just failing to
reproduce it.

Suggested-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
5 years agogitlab-ci/a630: Drop the MSAA expected failure.
Eric Anholt [Thu, 12 Sep 2019 21:39:19 +0000 (14:39 -0700)]
gitlab-ci/a630: Drop the MSAA expected failure.

This hasn't failed for me in ~5 minutes of looping over
dEQP-GLES3.functional.fbo.msaa.*

Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
5 years agogitlab-ci/a630: Drop remaining dEQP-GLES3.functional.draw.random.* xfails.
Eric Anholt [Thu, 12 Sep 2019 21:33:54 +0000 (14:33 -0700)]
gitlab-ci/a630: Drop remaining dEQP-GLES3.functional.draw.random.* xfails.

These haven't failed for me in ~10 minutes of looping over
draw.random.*.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
5 years agolima/ppir: Add undef handling
Andreas Baierl [Tue, 20 Aug 2019 16:19:55 +0000 (18:19 +0200)]
lima/ppir: Add undef handling

Add a ppir dummy node for nir_ssa_undef_instr, create a reg for it and mark
it as undefined, so that regalloc can set it non-interfering to avoid
register pressure.

Signed-off-by: Andreas Baierl <ichgeh@imkreisrum.de>
Reviewed-by: Vasily Khozuzhick <anarsoul@gmail.com>
Reviewed-by: Erico Nunes <nunes.erico@gmail.com>
5 years agolima/ppir: Rename ppir_op_dummy to ppir_op_undef
Andreas Baierl [Thu, 12 Sep 2019 09:07:40 +0000 (11:07 +0200)]
lima/ppir: Rename ppir_op_dummy to ppir_op_undef

Signed-off-by: Andreas Baierl <ichgeh@imkreisrum.de>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Reviewed-by: Erico Nunes <nunes.erico@gmail.com>
5 years agoAndroid.mk: Fix missing \ from recent llvm change
John Stultz [Thu, 12 Sep 2019 20:02:18 +0000 (20:02 +0000)]
Android.mk: Fix missing \ from recent llvm change

Building w/ AOSP, I was hitting the following error:
external/mesa3d/src/amd/Android.common.mk:95: error: missing separator.

Which was due to the changes to mesa-build-with-llvm  missing
a line continuation.

Fixes: 96b592696f13
Signed-off-by: John Stultz <john.stultz@linaro.org>
5 years agopanfrost: Move the batch submission logic to panfrost_batch_submit()
Boris Brezillon [Thu, 5 Sep 2019 18:47:45 +0000 (20:47 +0200)]
panfrost: Move the batch submission logic to panfrost_batch_submit()

We are about to patch panfrost_flush() to flush all pending batches,
not only the current one. In order to do that, we need to move the
'flush single batch' code to panfrost_batch_submit().

While at it, we get rid of the existing pipelining logic, which is
currently unused and replace it by an unconditional wait at the end of
panfrost_batch_submit(). A new pipeline logic will be introduced later
on.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Move the fence creation in panfrost_flush()
Boris Brezillon [Thu, 5 Sep 2019 17:14:25 +0000 (19:14 +0200)]
panfrost: Move the fence creation in panfrost_flush()

panfrost_flush() is about to be reworked to flush all pending batches,
but we want the fence to block on the last one. Let's move the fence
creation logic in panfrost_flush() to prepare for this situation.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Delay payloads[].offset_start initialization
Boris Brezillon [Thu, 5 Sep 2019 19:01:20 +0000 (21:01 +0200)]
panfrost: Delay payloads[].offset_start initialization

panfrost_draw_vbo() Might call the primeconvert/without_prim_restart
helpers which will enter the ->draw_vbo() again. Let's delay
payloads[].offset_start initialization so we don't initialize them
twice.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Prepare things to avoid flushes on FB switch
Boris Brezillon [Thu, 5 Sep 2019 17:07:12 +0000 (19:07 +0200)]
panfrost: Prepare things to avoid flushes on FB switch

panfrost_attach_vt_xxx() functions are now passed a batch, and the
generated FB desc is kept in panfrost_batch so we can switch FBs
without forcing a flush. The postfix->framebuffer field is restored
on the next attach_vt_framebuffer() call if the batch already has an
FB desc.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Pass a batch to panfrost_set_value_job()
Boris Brezillon [Thu, 5 Sep 2019 16:57:11 +0000 (18:57 +0200)]
panfrost: Pass a batch to panfrost_set_value_job()

So we can emit SET_VALUE jobs for a batch that's not currently bound
to the context.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Use ctx->wallpaper_batch in panfrost_blit_wallpaper()
Boris Brezillon [Thu, 5 Sep 2019 16:52:21 +0000 (18:52 +0200)]
panfrost: Use ctx->wallpaper_batch in panfrost_blit_wallpaper()

We'll soon be able to flush a batch that's not currently bound to the
context, which means ctx->pipe_framebuffer will not necessarily be the
FBO targeted by the wallpaper draw. Let's prepare for this case and
use ctx->wallpaper_batch in panfrost_blit_wallpaper().

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Pass a batch to functions emitting FB descs
Boris Brezillon [Sun, 1 Sep 2019 08:30:39 +0000 (10:30 +0200)]
panfrost: Pass a batch to functions emitting FB descs

So we can emit such jobs to a batch that's not currently bound to the
context.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Pass a batch to panfrost_{allocate,upload}_transient()
Boris Brezillon [Sun, 1 Sep 2019 08:15:23 +0000 (10:15 +0200)]
panfrost: Pass a batch to panfrost_{allocate,upload}_transient()

We need that if we want to upload transient buffers to a batch that's
not currently bound to the context, which in turn will be needed if we
want to relax the batch serialization we have right now (only flush
batches when we need to: on a flush request, or when one batch depends
on the result of other batches).

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Allow testing if a specific batch is targeting a scanout FB
Boris Brezillon [Sun, 1 Sep 2019 08:54:38 +0000 (10:54 +0200)]
panfrost: Allow testing if a specific batch is targeting a scanout FB

Rename panfrost_is_scanout() into panfrost_batch_is_scanout(), pass it
a batch instead of a context and move the code to pan_job.c.

With this in place, we can now test if a batch is targeting a scanout
FB even if this batch is not bound to the context.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Get rid of the unused 'flush jobs accessing res' infra
Boris Brezillon [Thu, 5 Sep 2019 16:19:40 +0000 (18:19 +0200)]
panfrost: Get rid of the unused 'flush jobs accessing res' infra

Will be replaced by something similar but using a BOs as keys instead
of resources.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agopanfrost: Use a pipe_framebuffer_state as the batch key
Boris Brezillon [Sun, 1 Sep 2019 08:24:30 +0000 (10:24 +0200)]
panfrost: Use a pipe_framebuffer_state as the batch key

This way we have all the fb_state information directly attached to a
batch and can pass only the batch to functions emitting CMDs, which is
needed if we want to be able to queue CMDs to a batch that's not
currently bound to the context.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
5 years agoradeon/vcn: exclude raven2 from vcn 2.0 encode initialization
Indrajit Das [Tue, 10 Sep 2019 09:22:14 +0000 (14:52 +0530)]
radeon/vcn: exclude raven2 from vcn 2.0 encode initialization

Signed-off-by: Indrajit Das <indrajit-kumar.das@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
5 years agogitlab-ci: rename stages to something simpler
Eric Engestrom [Wed, 11 Sep 2019 17:51:46 +0000 (18:51 +0100)]
gitlab-ci: rename stages to something simpler

Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
5 years agopanfrost: Rework midgard_pair_load_store() to kill the nested foreach loop
Boris Brezillon [Tue, 27 Aug 2019 10:36:43 +0000 (12:36 +0200)]
panfrost: Rework midgard_pair_load_store() to kill the nested foreach loop

mir_foreach_instr_in_block_safe() is based on list_for_each_entry_safe()
which is designed to protect against removal of the current entry, but
removing the entry placed just after the current one will lead to a
use-after-free situation.

Luckily, the midgard_pair_load_store() logic guarantees that the
instruction being removed (if any) is never placed just after ins which
in turn guarantees that the hidden __next variable always points to a
valid object.
Took me a bit of time to realize that this code was safe, so I'm
suggesting to get rid of the inner mir_foreach_instr_in_block_from()
loop and rework the code so that the removed instruction is always the
current one (which is what the list_for_each_entry_safe() API was
initially designed for).

While at it, we also get rid of the unecessary insert(ins)/remove(ins)
dance by simply moving the instruction around.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
5 years agopanfrost: Fix a list_assert() in schedule_block()
Boris Brezillon [Tue, 27 Aug 2019 10:36:42 +0000 (12:36 +0200)]
panfrost: Fix a list_assert() in schedule_block()

list_for_each_entry() does not allow modifying the current item pointer.
Let's rework the skip-instructions logic in schedule_block() to not
break this rule.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
5 years agov3d: fix TF primitive counts for resume without draw
Iago Toral Quiroga [Mon, 9 Sep 2019 10:23:58 +0000 (12:23 +0200)]
v3d: fix TF primitive counts for resume without draw

The V3D documentation states that primitive counters are reset when
we emit Tile Binning Mode Configuration items, which we do at the start
of each draw call, however, in the actual hardware this doesn't seem to
take effect when transform feedback is not active (this doesn't happen in
the simulator). This causes a problem in the following scenario:

glBeginTransformFeedback()
   glDrawArrays()
   glPauseTransformFeedback()
   glDrawArrays()
   glResumeTransformFeedback()
glEndTransformFeedback()

The TF pause will trigger a flush of the primitive counters, which results
in a correct number of primitives up to that point. In theory, the counter
should then be reset when we execute the draw after pausing TF, but that
doesn't happen, and since TF is enabled again by the resume command before
we end recording, by the time we end the transform feedback recording we
again check the counters, but instead of reading 0, we read again the same
value we read at the time we paused, incorrectly accumulating that value
again.

In theory, we should be able to avoid this by using the other method to
reset the primitive counters: using operation 1 instead of 0 when we
flush the counts to the buffer at the time we pause, but again, this
doesn't seem to be work and we still see obsolete counts by the time we
end transform feedback.

This patch fixes the problem by not accumulating TF primitive counts
unless we know we have actually queued draw calls during transform
feedback, since that seems to effectively reset the counters. This should
also be more performant, since it saves unnecessary stalls for the
primitive counters to be updated when we know there haven't been any
new primitives drawn.

Fixes CTS tests:
dEQP-GLES3.functional.transform_feedback.*

Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agov3d: remove redundant update of queued draw calls
Iago Toral Quiroga [Wed, 11 Sep 2019 08:02:22 +0000 (10:02 +0200)]
v3d: remove redundant update of queued draw calls

This was updating the counter for the indexed draw path only, but we are
already updating the counter for all paths a bit later, so this is only
duplicating counts for indexed paths.

Reviewed-by: Eric Anholt <eric@anholt.net>
5 years agov3d: make sure we have enough space in the CL for the primitive counts packet
Iago Toral Quiroga [Tue, 10 Sep 2019 11:46:25 +0000 (13:46 +0200)]
v3d: make sure we have enough space in the CL for the primitive counts packet

Fixes: 0f2d1dfe65 ("v3d: use the GPU to record primitives written to transform feedback")
Reviewed-by: Eric Anholt <eric@anholt.net>