mesa.git
8 years agor600g: use last_gfx_fence like radeonsi
Marek Olšák [Thu, 14 Jul 2016 23:06:58 +0000 (01:06 +0200)]
r600g: use last_gfx_fence like radeonsi

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: move last_gfx_fence from radeonsi to common code
Marek Olšák [Thu, 14 Jul 2016 22:39:38 +0000 (00:39 +0200)]
gallium/radeon: move last_gfx_fence from radeonsi to common code

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: skip unnecessary si_update_shaders calls
Marek Olšák [Tue, 2 Aug 2016 09:51:21 +0000 (11:51 +0200)]
radeonsi: skip unnecessary si_update_shaders calls

Small decrease in draw call overhead.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: print the command line to VM fault reports (v2)
Marek Olšák [Sat, 30 Jul 2016 12:57:20 +0000 (14:57 +0200)]
radeonsi: print the command line to VM fault reports (v2)

v2: rebase on top of Brian's commit

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoddebug: print the command line to all logs (v2)
Marek Olšák [Sat, 30 Jul 2016 12:56:28 +0000 (14:56 +0200)]
ddebug: print the command line to all logs (v2)

for piglit with the pipelined hang detection mode

v2: rebase on top of Brian's commit

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoddebug: don't use fmemopen on non-Linux OS
Marek Olšák [Sat, 30 Jul 2016 21:54:06 +0000 (23:54 +0200)]
ddebug: don't use fmemopen on non-Linux OS

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

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: don't set the last parameter component of llvm.AMDGPU.cube
Marek Olšák [Sat, 30 Jul 2016 14:32:32 +0000 (16:32 +0200)]
radeonsi: don't set the last parameter component of llvm.AMDGPU.cube

LLVM doesn't use it.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: use llvm.amdgcn.cube* if available
Marek Olšák [Sat, 30 Jul 2016 14:28:20 +0000 (16:28 +0200)]
radeonsi: use llvm.amdgcn.cube* if available

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: use llvm.amdgcn.rsq.f64 if available
Marek Olšák [Sat, 30 Jul 2016 14:23:48 +0000 (16:23 +0200)]
radeonsi: use llvm.amdgcn.rsq.f64 if available

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: use v_mad_f32 for fma
Marek Olšák [Tue, 26 Jul 2016 20:34:03 +0000 (22:34 +0200)]
radeonsi: use v_mad_f32 for fma

v_fma_f32 runs at FP64 rate (= slow). Alien Isolation and F1 2015 seem
to use fma for all d3d multiply-add instructions, which is silly.

This tries to restore performance for those games.

The main difference between v_mad_f32 and v_fma_f32 is that v_mad doesn't
support denormals, which we don't enable anyway, because they are slow too.

Also, there is code size reduction:
  Totals from affected shaders:
  VGPRS: 109796 -> 109808 (0.01 %)
  Spilled SGPRs: 29995 -> 30022 (0.09 %)
  Spilled VGPRs: 12 -> 13 (8.33 %) <-- it's just one shader going from 12 to 13
  Code Size: 6667596 -> 6476356 (-2.87 %) bytes
  Max Waves: 26931 -> 26899 (-0.12 %)

I've not actually tested real performance.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoi965: use mt->offset in intel_miptree_map_movntdqa()
Haixia Shi [Wed, 3 Aug 2016 00:03:32 +0000 (17:03 -0700)]
i965: use mt->offset in intel_miptree_map_movntdqa()

We need to include mt->offset in the calculation of src pointer because its
value may be non-zero, for example in a cubemap texture.

Signed-off-by: Haixia Shi <hshi@chromium.org>
Cc: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Change-Id: I461ad5b204626d5a1c45611fc6b63735dcf29f63

8 years agonir: fix validation message
Timothy Arceri [Tue, 2 Aug 2016 07:46:19 +0000 (17:46 +1000)]
nir: fix validation message

Looks like a copy and paste error from f752effa087

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
8 years ago.mailmap: Update my address
Chad Versace [Tue, 2 Aug 2016 20:29:53 +0000 (13:29 -0700)]
.mailmap: Update my address

I left Intel, so make my personal address the canonical address.

8 years agoswr: build swr with -fno-strict-aliasing
Tim Rowley [Tue, 2 Aug 2016 18:18:08 +0000 (13:18 -0500)]
swr: build swr with -fno-strict-aliasing

swr rasterizer contains numerous data transfers between vectors
and ordinary C types.  Fixing for strict aliasing will take time.

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoast: Updated AST_NUM_OPERATORS for coherence with ast_operators
Andres Gomez [Sun, 31 Jul 2016 16:07:34 +0000 (19:07 +0300)]
ast: Updated AST_NUM_OPERATORS for coherence with ast_operators

AST_NUM_OPERATORS stores the dimension of the ast_operators
enumeration but was not updated after its last modification.

This doesn't add any real modification for any code paths but it makes
sense for coherence.

v2 (Eric Engestrom): Just place the define at the end of the
                     enumeration, not below.

Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
8 years agoi965: Disable the unlit centroid workaround on Gen7.
Matt Turner [Mon, 1 Aug 2016 19:18:45 +0000 (12:18 -0700)]
i965: Disable the unlit centroid workaround on Gen7.

Once upon a time (commit 8313f44409) Paul added code for the unlit
centroid workaround (WaCopyUnlitCentroidBarys). His commit message
claims it fixed the EXT_framebuffer_multisample/interpolation {2,4}
{centroid-deriv,centroid-deriv-disabled} piglit tests but does not say
on which platform, though he cites the IVB PRM.

"3DSTATE_WM [DevIVB, DevHSW]" says

   "[DevIVB]: Workaround: When Centroid Barycentric mode is required, HW
    may produce incorrect interpolation results when a 2X2 pixels have
    unlit pixels."

I later disabled it for Haswell (commit f6db414f3c) with no known ill
effects.

The Sandybridge page does not have this text, but the workarounds
database (see WaCopyUnlitCentroidBarys) says the issues applies *only*
to Sandybridge, and in fact in commit 1a2de7dce8fc I note that disabling
the workaround on Sandybridge causes the tests Paul originally mentioned
to fail.

So this is, and always has been, a huge confusing mess.

Disabling the workaround indeed causes the tests Paul originally
mentioned to fail on Sandybridge but not on Ivybridge/Baytrail.

On Ivybridge:

   total instructions in shared programs: 6914901 -> 6909599 (-0.08%)
   instructions in affected programs: 106766 -> 101464 (-4.97%)
   helped: 884

   total cycles in shared programs: 70874764 -> 70813774 (-0.09%)
   cycles in affected programs: 794144 -> 733154 (-7.68%)
   helped: 688
   HURT: 186

   LOST:   1
   GAINED: 6

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agogallium/util: fix align64
Marek Olšák [Fri, 29 Jul 2016 13:00:12 +0000 (15:00 +0200)]
gallium/util: fix align64

it cut off the upper 32 bits

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
8 years agomesa: Drop -fno-strict-aliasing.
Matt Turner [Thu, 26 May 2016 23:34:02 +0000 (16:34 -0700)]
mesa: Drop -fno-strict-aliasing.

Improves performance of OglBatch7 by 4.06851% +/- 1.17925% (n=169) on
Haswell, and cuts ~18k of .text:

   text     data      bss      dec      hex  filename
5824627   287816    29384  6141827   5db783  before/i965_dri.so
5806354   287816    29384  6123554   5d7022  after/i965_dri.so

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi915: Avoid aliasing violation.
Matt Turner [Thu, 28 Jul 2016 19:44:41 +0000 (12:44 -0700)]
i915: Avoid aliasing violation.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agodraw: Avoid aliasing violations.
Matt Turner [Thu, 28 Jul 2016 21:41:17 +0000 (14:41 -0700)]
draw: Avoid aliasing violations.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agor600g: Avoid aliasing violations.
Matt Turner [Thu, 28 Jul 2016 19:38:21 +0000 (12:38 -0700)]
r600g: Avoid aliasing violations.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agor300g: Avoid aliasing violation.
Matt Turner [Thu, 28 Jul 2016 20:57:06 +0000 (13:57 -0700)]
r300g: Avoid aliasing violation.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogallium/auxiliary: Add u_bitcast.h header.
Matt Turner [Thu, 28 Jul 2016 21:34:14 +0000 (14:34 -0700)]
gallium/auxiliary: Add u_bitcast.h header.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglsl_to_tgsi: Avoid aliasing violations.
Matt Turner [Thu, 28 Jul 2016 19:43:19 +0000 (12:43 -0700)]
glsl_to_tgsi: Avoid aliasing violations.

Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agost/mesa: silence missing braces warning in st_program.c
Brian Paul [Mon, 1 Aug 2016 15:56:21 +0000 (09:56 -0600)]
st/mesa: silence missing braces warning in st_program.c

Silence a gcc warning:
state_tracker/st_program.c: In function 'st_create_fp_variant':
state_tracker/st_program.c:957:10: warning: missing braces around initializer [-Wmissing-braces]
          nir_lower_drawpixels_options options = {0};
          ^
state_tracker/st_program.c:957:10: warning: (near initialization for 'options.texcoord_state_tokens') [-Wmissing-braces]

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoauxiliary/os: add new os_get_command_line() function
Brian Paul [Wed, 29 Jun 2016 22:30:54 +0000 (16:30 -0600)]
auxiliary/os: add new os_get_command_line() function

This can be used by the driver to get the command line which started
the process.  Will be used by the VMware driver for extra logging.

For now, this is only implemented for Linux via /proc/self/cmdline
and Windows via GetCommandLine().

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agosvga: avoid redundant SetVertexBuffer/SetIndexBuffer commands at rebind
Charmaine Lee [Fri, 22 Jul 2016 22:05:02 +0000 (15:05 -0700)]
svga: avoid redundant SetVertexBuffer/SetIndexBuffer commands at rebind

This patch eliminates the redundant SetVertexBuffers and
SetIndexBuffer commands that are emitted for rebind purpose.
With this patch, the set commands will be skipped, but we will still
reference the associated resources to allow the kernel to
bring in the resources.

Tested with Lightsmark2008, Valley, MTT glretrace, piglit, conform.

Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agou_vbuf: fix potentially bogus assert
Rob Clark [Sat, 30 Jul 2016 15:22:52 +0000 (11:22 -0400)]
u_vbuf: fix potentially bogus assert

There are cases where we hit u_vbuf path due to alignment or pitch-
alignment restrictions, but for an output-format that u_vbuf does not
support translating (yet the driver does support natively).  In which
case we hit the memcpy() path and don't care that u_vbuf doesn't
understand it.

Fixes crash with debug build of mesa in:
dEQP-GLES3.functional.vertex_arrays.single_attribute.strides.fixed.user_ptr_stride17_components2_quads1

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95000
Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agogbm: Removed unused function.
Ben Widawsky [Fri, 29 Jul 2016 20:42:04 +0000 (13:42 -0700)]
gbm: Removed unused function.

AFAICT, it's never been used.

It was briefly nudged in the right direction here:
commit 10e5ffd4961055ebba5be4d85a93cc66cdd5a635
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Jan 25 17:19:10 2014 +0000

    gbm: do not export _gbm_mesa_get_device

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg@chromium.org>
8 years agoi965: fix comparison warning
Timothy Arceri [Mon, 1 Aug 2016 00:35:06 +0000 (10:35 +1000)]
i965: fix comparison warning

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agovc4: Zero-initialize the hardware sampler view structure.
Eric Anholt [Tue, 26 Jul 2016 22:32:11 +0000 (15:32 -0700)]
vc4: Zero-initialize the hardware sampler view structure.

Fixes failure to initialize the force_first_level flag, causing
failures in piglit levelclamp.

8 years agomesa: Remove set but not used gl_client_array::Stride.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
mesa: Remove set but not used gl_client_array::Stride.

The field is only read for printing today and
there it was probably a leftover.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agomesa: Remove set but not used gl_client_array::Enabled.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
mesa: Remove set but not used gl_client_array::Enabled.

The way it is used today does not care about the
Enabled flag anymore.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agovbo: Use the VAO array enabled flags in vbo_exec_array.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
vbo: Use the VAO array enabled flags in vbo_exec_array.

Instead of gl_client_array::Enabled inside a VAO,
directly use the gl_vertex_attrib_array::Enabled value
which is the origin of the above.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agovbo: Walk the VAO in check_array_data.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
vbo: Walk the VAO in check_array_data.

Only a debugging function, but move away from
gl_client_array and use the first order information
from the VAO.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agovbo: Walk the VAO in print_draw_arrays.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
vbo: Walk the VAO in print_draw_arrays.

Only a debugging function, but move away from
gl_client_array and use the first order information
from the VAO. Also make use of gl_vert_attrib_name.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agomesa: Walk the VAO in _mesa_print_arrays.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
mesa: Walk the VAO in _mesa_print_arrays.

Only a debugging function, but move away from
gl_client_array and use the first order information
from the VAO. Also make use of gl_vert_attrib_name.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agovbo: Walk the VAO to check for mapped buffers.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
vbo: Walk the VAO to check for mapped buffers.

Similarily to _mesa_all_varyings_in_vbos walk the VAO
to check if we have an illegal mapped buffer object
instead of walking all gl_client_arrays.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agovbo: Walk the VAO to see if all varyings are in vbos.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:05 +0000 (08:09 +0200)]
vbo: Walk the VAO to see if all varyings are in vbos.

In vbo_draw_transform_feedback we currently look at
exec->array.inputs to determine if all varying
vertex attributes reside in vbos. But the vbo_bind_arrays
call only happens past the vbo_all_varyings_in_vbos
query. Thus we may work on a stale set of client arrays.
Using the current VAOs content for this query feels much
more logical to me.
Additionally with this change mesa makes more use of the
information already tracked in the VAO instead of looping
across VERT_ATTRIB_MAX vertex arrays.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agomesa: Implement _mesa_all_varyings_in_vbos.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:04 +0000 (08:09 +0200)]
mesa: Implement _mesa_all_varyings_in_vbos.

Implement the equivalent of vbo_all_varyings_in_vbos for
vertex array objects.

v2: Update comment.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agomesa: Unbind deleted vbo using _mesa_bind_vertex_buffer.
Mathias Fröhlich [Fri, 17 Jun 2016 06:09:04 +0000 (08:09 +0200)]
mesa: Unbind deleted vbo using _mesa_bind_vertex_buffer.

When a vertex buffer object gets deleted, it is unbound
at the VAO. To do this use _mesa_bind_vertex_buffer instead
of plain unreferencing the buffer object. This keeps the VAOs
internal state consistent. In this case it showed up with
gl_vertex_array_object::VertexAttribBufferMask getting out of
sync.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Eric Anholt <eric@anholt.net>
8 years agoglsl: be more strict on block qualifiers
Timothy Arceri [Sat, 30 Jul 2016 04:51:21 +0000 (14:51 +1000)]
glsl: be more strict on block qualifiers

V2: Add spec references and allow patch qualifier (Ken)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96528

8 years agoglsl: add name param to validate_flags()
Timothy Arceri [Sat, 30 Jul 2016 06:33:26 +0000 (16:33 +1000)]
glsl: add name param to validate_flags()

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: add component to ast_type_qualifier::validate_flags
Timothy Arceri [Sat, 30 Jul 2016 04:53:20 +0000 (14:53 +1000)]
glsl: add component to ast_type_qualifier::validate_flags

This was added with ARB_enhanced_layouts.

V2: Add an extra format specifier for the new qualifier.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agodocs: Add GL4.4 and ARB_enhanced_layouts to the release notes
Timothy Arceri [Sat, 30 Jul 2016 00:25:09 +0000 (10:25 +1000)]
docs: Add GL4.4 and ARB_enhanced_layouts to the release notes

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
8 years agoanv: Perform rasterizer discard in the SOL stage instead of the clipper.
Kenneth Graunke [Mon, 18 Jul 2016 23:02:02 +0000 (16:02 -0700)]
anv: Perform rasterizer discard in the SOL stage instead of the clipper.

See commit b0629e6894513a2c49a018bc3342a4e55435a236, where we discovered
that the SOL stage's "Rendering Disable" feature is a lot faster at
throwing away all geometry than the clipper's "reject all" mode.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoRevert "gallium/util: fix resource leak"
Roland Scheidegger [Sat, 30 Jul 2016 16:18:09 +0000 (18:18 +0200)]
Revert "gallium/util: fix resource leak"

This reverts commit d1fe26a62862f4e47a799222dca1bc1dc14ca4af.

Replacing a resource leak with a segfault isn't the solution.

8 years agogallium/util: fix resource leak
Eric Engestrom [Sat, 30 Jul 2016 00:35:39 +0000 (01:35 +0100)]
gallium/util: fix resource leak

CovID: 401540
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
8 years agofreedreno/a4xx: fix comparison out of range warnings
francians@gmail.com [Sat, 30 Jul 2016 07:49:59 +0000 (09:49 +0200)]
freedreno/a4xx: fix comparison out of range warnings

Signed-off-by: Francesco Ansanelli <francians@gmail.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno/a3xx: fix comparison out of range warnings
francians@gmail.com [Sat, 30 Jul 2016 07:49:58 +0000 (09:49 +0200)]
freedreno/a3xx: fix comparison out of range warnings

Signed-off-by: Francesco Ansanelli <francians@gmail.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno/a2xx: fix comparison out of range warnings
francians@gmail.com [Sat, 30 Jul 2016 07:49:57 +0000 (09:49 +0200)]
freedreno/a2xx: fix comparison out of range warnings

Signed-off-by: Francesco Ansanelli <francians@gmail.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno/ir3: init ir3_shader_key with memset()
francians@gmail.com [Sat, 30 Jul 2016 06:20:58 +0000 (08:20 +0200)]
freedreno/ir3: init ir3_shader_key with memset()

To silence missing initializers warning

Signed-off-by: Francesco Ansanelli <francians@gmail.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agogallium/freedreno: move cast to avoid integer overflow
Eric Engestrom [Sat, 30 Jul 2016 00:33:56 +0000 (01:33 +0100)]
gallium/freedreno: move cast to avoid integer overflow

Previously, the bitshift would be performed on a simple int (32 bits on
most systems), overflow, and then be cast to 64 bits.

CovID: 1362461
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno/a2xx: remove duplicate assignment
Eric Engestrom [Sat, 30 Jul 2016 00:23:09 +0000 (01:23 +0100)]
freedreno/a2xx: remove duplicate assignment

CovID: 13624451362446
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: defer flush_queue allocation
Rob Clark [Fri, 22 Jul 2016 21:55:59 +0000 (17:55 -0400)]
freedreno: defer flush_queue allocation

Some apps, like warsow, create a bazillion contexts but don't render on
most of them.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: add some hw query traces
Rob Clark [Wed, 20 Jul 2016 18:50:14 +0000 (14:50 -0400)]
freedreno: add some hw query traces

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: some locking
Rob Clark [Tue, 19 Jul 2016 22:24:57 +0000 (18:24 -0400)]
freedreno: some locking

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agoos: add pipe_mutex_assert_locked()
Rob Clark [Thu, 21 Jul 2016 17:51:36 +0000 (13:51 -0400)]
os: add pipe_mutex_assert_locked()

Would be nice if we could also have lockdep, like in the linux kernel.
But this is better than nothing.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: drop needs_rb_fbd
Rob Clark [Tue, 19 Jul 2016 17:22:01 +0000 (13:22 -0400)]
freedreno: drop needs_rb_fbd

We need to emit RB_FRAME_BUFFER_DIMENSION once per batch.. tracking this
in fd_context is wrong when the gmem code executes asynchronously from
the flush_queue worker.  But in fact we don't really need to track it at
all.  We cannot assume previous value at the beginning of the batch
(because of other processes potentially using the GPU), so just drop the
tracking and emit it in _tile_init().

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: move needs_wfi into batch
Rob Clark [Tue, 19 Jul 2016 16:08:42 +0000 (12:08 -0400)]
freedreno: move needs_wfi into batch

This is also used in gmem code, which executes from the "bottom half"
(ie. from the flush_queue worker thread), so it cannot be in fd_context.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: a bit of micro-optimization
Rob Clark [Thu, 14 Jul 2016 20:44:34 +0000 (16:44 -0400)]
freedreno: a bit of micro-optimization

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: drop mem2gmem/gmem2mem query stages
Rob Clark [Thu, 14 Jul 2016 17:27:32 +0000 (13:27 -0400)]
freedreno: drop mem2gmem/gmem2mem query stages

They weren't really used, and it gets somewhat more complicated to deal
with if batches are flushed asynchronously (on another thread).  So just
drop them, and move _query_set_state(NULL) call into batch (so it is not
happening on background thread).

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: threaded batch flush
Rob Clark [Wed, 13 Jul 2016 13:49:53 +0000 (09:49 -0400)]
freedreno: threaded batch flush

With the state accessed from GMEM+submit factored out of fd_context and
into fd_batch, now it is possible to punt this off to a helper thread.
And more importantly, since there are cases where one context might
force the batch-cache to flush another context's batches (ie. when there
are too many in-flight batches), using a per-context helper thread keeps
various different flushes for a given context serialized.

TODO as with batch-cache, there are a few places where we'll need a
mutex to protect critical sections, which is completely missing at the
moment.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: track batch/blit types
Rob Clark [Thu, 14 Jul 2016 14:32:02 +0000 (10:32 -0400)]
freedreno: track batch/blit types

Add a bit of extra book-keeping about blits and back-blits (from
resource shadowing).  If the app uploads all mipmap levels, as opposed
to uploading the first level and then glGenerateMipmap(), we can discard
the back-blit (as opposed to being naive and shadowing the resource for
each mipmap level).  Also, after a normal blit, we might as well flush
the batch immediately, since there is not likely to be further rendering
to the surface.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: re-order support for hw queries
Rob Clark [Mon, 11 Jul 2016 21:36:45 +0000 (17:36 -0400)]
freedreno: re-order support for hw queries

Push query state down to batch, and use the resource tracking to figure
out which batch(es) need to be flushed to get the query result.

This means we actually need to allocate the prsc up front, before we
know the size.  So we have to add a special way to allocate an un-
backed resource, and then later allocate the backing storage.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: use prsc for hw queries
Rob Clark [Mon, 11 Jul 2016 20:23:10 +0000 (16:23 -0400)]
freedreno: use prsc for hw queries

Switch to using a pipe_resource (rather than an fd_bo directly) for hw
query result buffers.  This is first step towards making queries work
properly with reordered batches, since we'll need the additional
dependency tracking to know which batches to flush.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: support discarding previous rendering in special cases
Rob Clark [Fri, 1 Jul 2016 16:38:16 +0000 (12:38 -0400)]
freedreno: support discarding previous rendering in special cases

Basically, to "DCE" blits triggered by resource shadowing, in cases
where the levels are immediately completely overwritten.  For example,
mid-frame texture upload to level zero triggers shadowing and back-blits
to the remaining levels, which are immediately overwritten by
glGenerateMipmap().

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: shadow textures if possible to avoid stall/flush
Rob Clark [Wed, 29 Jun 2016 17:51:26 +0000 (13:51 -0400)]
freedreno: shadow textures if possible to avoid stall/flush

To make batch re-ordering useful, we need to be able to create shadow
resources to avoid a flush/stall in transfer_map().  For example,
uploading new texture contents or updating a UBO mid-batch.  In these
cases, we want to clone the buffer, and update the new buffer, leaving
the old buffer (whose reference is held by cmdstream) as a shadow.

This is done by blitting the remaining other levels (and whatever part
of current level that is not discarded) from the old/shadow buffer to
the new one.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: spiff up some debug traces
Rob Clark [Tue, 28 Jun 2016 11:53:34 +0000 (07:53 -0400)]
freedreno: spiff up some debug traces

Make it easier to track batches, to ensure things happen properly when
they are reordered.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: add batch-cache and batch reordering
Rob Clark [Mon, 27 Jun 2016 13:44:15 +0000 (09:44 -0400)]
freedreno: add batch-cache and batch reordering

Note that I originally also had a entry-point that would construct a key
and do lookup from a pipe_surface.  I ended up not needing that (yet?)
but it is easy-enough to re-introduce later if we need it for the blit
path.

For now, not enabled by default, but can be enabled (on a3xx/a4xx) with
FD_MESA_DEBUG=reorder.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: move more batch related tracking to fd_batch
Rob Clark [Mon, 27 Jun 2016 15:28:37 +0000 (11:28 -0400)]
freedreno: move more batch related tracking to fd_batch

To flush batches out of order, the gmem code needs to not depend on
state from fd_context (since that may apply to a more recent batch).
So this all moves into batch.

The one exception is the gmem/pipe/tile state itself.  But this is
only used from gmem code (and batches are flushed serially).  The
alternative would be having to re-calculate GMEM layout on every
batch, even if the dimensions of the render targets are the same.

Note: This opens up the possibility of pushing gmem/submit into a
helper thread.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: dynamically sized/growable cmd buffers
Rob Clark [Tue, 21 Jun 2016 16:39:32 +0000 (12:39 -0400)]
freedreno: dynamically sized/growable cmd buffers

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: push resource tracking down into batch
Rob Clark [Sat, 21 May 2016 00:05:26 +0000 (20:05 -0400)]
freedreno: push resource tracking down into batch

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agofreedreno: introduce fd_batch
Rob Clark [Fri, 20 May 2016 19:36:10 +0000 (15:36 -0400)]
freedreno: introduce fd_batch

Introduce the batch object, to track a batch/submit's worth of
ringbuffers and other bookkeeping.  In this first step, just move
the ringbuffers into batch, since that is mostly uninteresting
churn.

For now there is just a single batch at a time.  Note that one
outcome of this change is that rb's are allocated/freed on each
use.  But the expectation is that the bo pool in libdrm_freedreno
will save us the GEM bo alloc/free which was the initial reason
to implement a rb pool in gallium.

The purpose of the batch is to eventually facilitate out-of-order
rendering, with batches associated to framebuffer state, and
tracking the dependencies on other batches.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agomesa: remove dd_function_table::UseProgram
Marek Olšák [Sun, 17 Jul 2016 18:54:51 +0000 (20:54 +0200)]
mesa: remove dd_function_table::UseProgram

finally unused

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: update sampler states when shaders are changed
Marek Olšák [Sun, 17 Jul 2016 19:37:58 +0000 (21:37 +0200)]
st/mesa: update sampler states when shaders are changed

This bug seems to have always been there. Applications changing shaders
but not textures between draw calls would have gotten undefined behavior.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: don't dirty sample shading on _NEW_PROGRAM
Marek Olšák [Sun, 17 Jul 2016 18:59:42 +0000 (20:59 +0200)]
st/mesa: don't dirty sample shading on _NEW_PROGRAM

Already done as part of ST_NEW_FRAGMENT_PROGRAM in st_validate_state.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: remove excessive shader state dirtying
Marek Olšák [Sun, 17 Jul 2016 18:37:58 +0000 (20:37 +0200)]
st/mesa: remove excessive shader state dirtying

This just needs to be done by st_validate_state.

v2: add "shaders_may_be_dirty" flags for not skipping st_validate_state
    on _NEW_PROGRAM to detect real shader changes

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: unreference optional shaders when unbinding
Marek Olšák [Sun, 17 Jul 2016 18:32:46 +0000 (20:32 +0200)]
st/mesa: unreference optional shaders when unbinding

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: skip updates of states that have no effect
Marek Olšák [Sun, 17 Jul 2016 17:47:12 +0000 (19:47 +0200)]
st/mesa: skip updates of states that have no effect

v2: - also don't check edge flags for GLES

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: completely rewrite state atoms
Marek Olšák [Sun, 17 Jul 2016 16:38:38 +0000 (18:38 +0200)]
st/mesa: completely rewrite state atoms

The goal is to do this in st_validate_state:
   while (dirty)
      atoms[u_bit_scan(&dirty)]->update(st);

That implies that atoms can't specify which flags they consume.
There is exactly one ST_NEW_* flag for each atom. (58 flags in total)

There are macros that combine multiple flags into one for easier use.

All _NEW_* flags are translated into ST_NEW_* flags in st_invalidate_state.
st/mesa doesn't keep the _NEW_* flags after that.

torcs is 2% faster between the previous patch and the end of this series.

v2: - add st_atom_list.h to Makefile.sources

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: remove st_tracked_state::name
Marek Olšák [Sun, 17 Jul 2016 13:49:56 +0000 (15:49 +0200)]
st/mesa: remove st_tracked_state::name

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: remove atom debugging code
Marek Olšák [Sun, 17 Jul 2016 13:25:01 +0000 (15:25 +0200)]
st/mesa: remove atom debugging code

This won't be needed after the rewrite.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoi965: Fix move_interpolation_to_top() pass.
Kenneth Graunke [Tue, 26 Jul 2016 20:19:46 +0000 (13:19 -0700)]
i965: Fix move_interpolation_to_top() pass.

The pass I introduced in commit a2dc11a7818c04d8dc0324e8fcba98d60bae
was entirely broken.  A missing "break" made the load_interpolated_input
case always fall through to "default" and hit a "continue", making it
not actually move any load_interpolated_input intrinsics at all.
It would only move the simple load_barycentric_* intrinsics, which
don't emit any code anyway, making it basically useless.

The initial version I sent of the pass worked, but I apparently
failed to verify that the simplified version in v2 actually worked.

With the obvious fix applied (so we actually tried to move
load_interpolated_input intrinsics), I discovered a second bug: we
weren't moving the offset SSA def to the top, breaking SSA validation.

The new version of the pass actually moves load_interpolated_input
intrinsics and all their dependencies, as intended.

Papers over GPU hangs on Ivybridge and Baytrail caused by the
recent NIR FS input rework by restoring the old behavior.
(I'm not honestly sure why they hang with PLN not at the top.)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97083
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agofreedreno: limit non-user constant buffers to a4xx
Rob Clark [Fri, 29 Jul 2016 18:58:39 +0000 (14:58 -0400)]
freedreno: limit non-user constant buffers to a4xx

Seems to mostly work on a3xx.  Except when it doesn't and kills gpu
quite badly.

Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agoglsl: fix uninitialized instance variable
Jan Ziak [Fri, 29 Jul 2016 11:56:00 +0000 (13:56 +0200)]
glsl: fix uninitialized instance variable

Valgrind detected that variable ir_copy_propagation_visitor::killed_all
is uninitialized.

Signed-off-by: Jan Ziak (http://atom-symbol.net) <0xe2.0x9a.0x9b@gmail.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
8 years agoconfigure: add support for LLVM 4.0.0svn static libs
Jan Ziak [Wed, 27 Jul 2016 11:36:16 +0000 (13:36 +0200)]
configure: add support for LLVM 4.0.0svn static libs

Signed-off-by: Jan Ziak (http://atom-symbol.net) <0xe2.0x9a.0x9b@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agovirgl: add exported dmabuf to BO hash table
Rob Herring [Fri, 17 Jun 2016 22:25:35 +0000 (17:25 -0500)]
virgl: add exported dmabuf to BO hash table

Exported dmabufs can get imported by the same process, but the handle was
not getting added to the hash table on export. Add the handle to the hash
table on export.

Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agoanv: Enable per sample shading on gen8+
Anuj Phogat [Wed, 20 Jul 2016 18:40:31 +0000 (11:40 -0700)]
anv: Enable per sample shading on gen8+

Vulkan CTS test results on gen9:
./deqp-vk --deqp-case=dEQP-VK.pipeline.multisample.min_sample_shading*
Test run totals:
  Passed:        60/90 (66.7%)
  Failed:        0/90 (0.0%)
  Not supported: 30/90 (33.3%)
  Warnings:      0/90 (0.0%)

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/pipeline: Fix setting per sample shading in pixel shader
Anuj Phogat [Thu, 28 Jul 2016 16:36:26 +0000 (09:36 -0700)]
anv/pipeline: Fix setting per sample shading in pixel shader

We should use the persample_dispatch variable in prog_data.

Fixes all (~60) the DEQP sample shading tests. Many tests exited with
VK_ERROR_OUT_OF_DEVICE_MEMORY without this patch.

V2: Use the shader key bits set in brw_compile_fs (Jason)

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoegl/dri2: Add reference count for dri2_egl_display
Nicolas Boichat [Fri, 22 Jul 2016 03:27:41 +0000 (11:27 +0800)]
egl/dri2: Add reference count for dri2_egl_display

android.opengl.cts.WrapperTest#testGetIntegerv1 CTS test calls
eglTerminate, followed by eglReleaseThread. A similar case is
observed in this bug: https://bugs.freedesktop.org/show_bug.cgi?id=69622,
where the test calls eglTerminate, then eglMakeCurrent(dpy, NULL, NULL, NULL).

With the current code, dri2_dpy structure is freed on eglTerminate
call, so the display is not initialized when eglReleaseThread calls
MakeCurrent with NULL parameters, to unbind the context, which
causes a a segfault in drv->API.MakeCurrent (dri2_make_current),
either in glFlush or in a latter call.

eglTerminate specifies that "If contexts or surfaces associated
with display is current to any thread, they are not released until
they are no longer current as a result of eglMakeCurrent."

However, to properly free the current context/surface (i.e., call
glFlush, unbindContext, driDestroyContext), we still need the
display vtbl (and possibly an active dri dpy connection). Therefore,
we add some reference counter to dri2_egl_display, to make sure
the structure is kept allocated as long as it is required.

One drawback of this is that eglInitialize may not completely reinitialize
the display (if eglTerminate was called with a current context), however,
this seems to meet the EGL spec quite well, and does not permanently
leak any context/display even for incorrectly written apps.

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
8 years agovc4: automake: remove vc4_drm.h from the sources lists
Emil Velikov [Tue, 26 Jul 2016 08:46:02 +0000 (09:46 +0100)]
vc4: automake: remove vc4_drm.h from the sources lists

The file was removed with earlier commit breaking 'make dist'.
Drop it from Makefile.sources since it's no longer around.

Fixes: 16985eb308e ("vc4: Switch to using the libdrm-provided
vc4_drm.h.")
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
8 years agoddebug: use pclose to close a popen()'d FILE
Nicolai Hähnle [Wed, 27 Jul 2016 14:48:07 +0000 (16:48 +0200)]
ddebug: use pclose to close a popen()'d FILE

Found by Coverity.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglsl: fix optimization of discard nested multiple levels
Nicolai Hähnle [Tue, 26 Jul 2016 08:04:57 +0000 (10:04 +0200)]
glsl: fix optimization of discard nested multiple levels

The order of optimizations can lead to the conditional discard optimization
being applied twice to the same discard statement. In this case, we must
ensure that both conditions are applied.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96762
Cc: mesa-stable@lists.freedesktop.org
Tested-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agost_glsl_to_tgsi: only skip over slots of an input array that are present
Nicolai Hähnle [Mon, 25 Jul 2016 16:05:46 +0000 (18:05 +0200)]
st_glsl_to_tgsi: only skip over slots of an input array that are present

When an application declares varying arrays but does not actually do any
indirect indexing, some array indices may end up unused in the consuming
shader, so the number of input slots that correspond to the array ends
up less than the array_size.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoclover: make GCC 4.8 happy
Dieter Nützel [Wed, 27 Jul 2016 22:20:25 +0000 (00:20 +0200)]
clover: make GCC 4.8 happy

Without this GCC 4.8.x throws below error:

error: invalid initialization of non-const reference of type
'clover::llvm::compat::raw_ostream_to_emit_file {aka llvm::raw_svector_ostream&}'
from an rvalue of type '<brace-enclosed initializer list>'

v2: change commit title and add error message like Eric Engestrom requested

Signed-off-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97019
[ Francisco Jerez: Trivial formatting fix. ]
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: remove unnecessary null check
Timothy Arceri [Thu, 28 Jul 2016 00:24:57 +0000 (10:24 +1000)]
i965: remove unnecessary null check

We would have hit a segfault already if this could be null.

Fixes Coverity warning spotted by Matt.

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoglsl: free hash tables earlier
Timothy Arceri [Tue, 26 Jul 2016 23:52:04 +0000 (09:52 +1000)]
glsl: free hash tables earlier

These are only used by get_matching_input() which has been call
at this point so free the hash tables.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agonvc0: enable ARB_tessellation_shader on GM107+
Samuel Pitoiset [Tue, 14 Jun 2016 16:27:31 +0000 (18:27 +0200)]
nvc0: enable ARB_tessellation_shader on GM107+

This exposes OpenGL 4.1 on Maxwell (tested on GM107 and GM206).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agogm107/ir: add a legalize SSA pass for PFETCH
Samuel Pitoiset [Wed, 20 Jul 2016 23:18:45 +0000 (01:18 +0200)]
gm107/ir: add a legalize SSA pass for PFETCH

PFETCH, actually ISBERD on GM107+ ISA only accepts a GPR for src0.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>