mesa.git
8 years agogallium/radeon: add a function for adding llvm function attributes
Marek Olšák [Wed, 6 Jan 2016 20:21:07 +0000 (21:21 +0100)]
gallium/radeon: add a function for adding llvm function attributes

This will be used for setting the new InitialPSInputAddr attribute.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: compile geometry shaders immediately
Marek Olšák [Thu, 28 Jan 2016 01:26:59 +0000 (02:26 +0100)]
radeonsi: compile geometry shaders immediately

they have only 1 variant

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: split out code for deleting si_shader
Marek Olšák [Thu, 28 Jan 2016 00:29:25 +0000 (01:29 +0100)]
radeonsi: split out code for deleting si_shader

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: move code writing tess factors into a separate function
Marek Olšák [Tue, 26 Jan 2016 16:07:29 +0000 (17:07 +0100)]
radeonsi: move code writing tess factors into a separate function

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: make LLVM IR dumping less messy
Marek Olšák [Tue, 26 Jan 2016 22:32:23 +0000 (23:32 +0100)]
radeonsi: make LLVM IR dumping less messy

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: move a few r600_can_dump_shader calls to where they're needed
Marek Olšák [Tue, 26 Jan 2016 21:39:24 +0000 (22:39 +0100)]
radeonsi: move a few r600_can_dump_shader calls to where they're needed

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: remove useless code that handles dx10_clamp_mode
Marek Olšák [Tue, 26 Jan 2016 16:27:54 +0000 (17:27 +0100)]
radeonsi: remove useless code that handles dx10_clamp_mode

"enable-no-nans-fp-math" is a wrong string and there was a disagreement
about fixing it.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: dump SPI_PS_INPUT values along with shader stats
Marek Olšák [Tue, 26 Jan 2016 21:16:55 +0000 (22:16 +0100)]
radeonsi: dump SPI_PS_INPUT values along with shader stats

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: read SPI_PS_INPUT_ADDR from LLVM if it returns it
Marek Olšák [Wed, 6 Jan 2016 15:03:38 +0000 (16:03 +0100)]
radeonsi: read SPI_PS_INPUT_ADDR from LLVM if it returns it

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: don't force gl_SampleMaskIn to 1 for smoothing
Marek Olšák [Sat, 9 Jan 2016 13:33:38 +0000 (14:33 +0100)]
radeonsi: don't force gl_SampleMaskIn to 1 for smoothing

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: split PS input interpolation code into its own function
Marek Olšák [Fri, 1 Jan 2016 23:41:43 +0000 (00:41 +0100)]
radeonsi: split PS input interpolation code into its own function

This will be used by the fragment shader prolog.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: implement forcing per-sample_interpolation using the shader key only
Marek Olšák [Sun, 3 Jan 2016 18:00:29 +0000 (19:00 +0100)]
radeonsi: implement forcing per-sample_interpolation using the shader key only

It was partly a state and partly emulated by shader code, but since we want
to do this in a fragment shader prolog, we need to put it into the shader
key, which will be used to generate the prolog.

This also removes the spi_ps_input states and moves the registers
to the PS state.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: remove si_shader::ps_input_interpolate
Marek Olšák [Sat, 2 Jan 2016 02:18:03 +0000 (03:18 +0100)]
radeonsi: remove si_shader::ps_input_interpolate

tgsi_shader_info has this too.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: move BCOLOR PS input locations after all other inputs
Marek Olšák [Sat, 2 Jan 2016 01:54:29 +0000 (02:54 +0100)]
radeonsi: move BCOLOR PS input locations after all other inputs

BCOLOR inputs were immediately after COLOR inputs. Thus, all following inputs
were offset by 1 if color_two_side was enabled, and not offset if it was not
enabled, which is a variation that's problematic if we want to have 1 variant
per shader and the variant doesn't care about color_two_side (that should be
handled by other bytecode attached at the beginning).

Instead, move BCOLOR inputs after all other inputs, so BCOLOR0 is at location
"num_inputs" if it's present. BCOLOR1 is next.

This also allows removing si_shader::nparam and
si_shader::ps_input_param_offset, which are useless now.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: move SPI_PS_INPUT_CNTL value computation to a separate function
Marek Olšák [Sat, 2 Jan 2016 01:25:51 +0000 (02:25 +0100)]
radeonsi: move SPI_PS_INPUT_CNTL value computation to a separate function

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: generate a color_two_side variant only if the shader reads colors
Marek Olšák [Fri, 1 Jan 2016 18:44:16 +0000 (19:44 +0100)]
radeonsi: generate a color_two_side variant only if the shader reads colors

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: move si_shader_context initialization into a separate function
Marek Olšák [Sun, 27 Dec 2015 19:10:33 +0000 (20:10 +0100)]
radeonsi: move si_shader_context initialization into a separate function

This will be re-used later.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: remove st_is_program_native
Marek Olšák [Sat, 30 Jan 2016 15:43:53 +0000 (16:43 +0100)]
st/mesa: remove st_is_program_native

The default scenario sets GL_TRUE too.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agost/mesa: unify destroy_program_variants cases for TCS, TES, GS
Marek Olšák [Sat, 30 Jan 2016 15:34:20 +0000 (16:34 +0100)]
st/mesa: unify destroy_program_variants cases for TCS, TES, GS

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agost/mesa: unify get_variant functions for TCS, TES, GS
Marek Olšák [Sat, 30 Jan 2016 15:24:29 +0000 (16:24 +0100)]
st/mesa: unify get_variant functions for TCS, TES, GS

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agost/mesa: unify variants and delete functions for TCS, TES, GS
Marek Olšák [Sat, 30 Jan 2016 14:10:11 +0000 (15:10 +0100)]
st/mesa: unify variants and delete functions for TCS, TES, GS

no difference between those

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
8 years agomesa: fix incorrect viewport position when GL_CLIP_ORIGIN = GL_LOWER_LEFT
Brian Paul [Tue, 9 Feb 2016 16:58:39 +0000 (09:58 -0700)]
mesa: fix incorrect viewport position when GL_CLIP_ORIGIN = GL_LOWER_LEFT

Ilia Mirkin found/fixed the mistake.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93813
Cc: "11.1" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agomesa: rewrite save_CallLists() code
Brian Paul [Tue, 9 Feb 2016 00:50:23 +0000 (17:50 -0700)]
mesa: rewrite save_CallLists() code

When glCallLists() is compiled into a display list, preserve the call
as a single glCallLists rather than 'n' glCallList calls.  This will
matter for an upcoming display list optimization project.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomesa: add missing error check in _mesa_CallLists()
Brian Paul [Mon, 8 Feb 2016 22:30:39 +0000 (15:30 -0700)]
mesa: add missing error check in _mesa_CallLists()

Generate GL_INVALID_VALUE if n < 0.  Return early if n==0 or lists==NULL.

v2: fix formatting, also check for lists==NULL.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomesa: whitespace clean-ups in dlist.h
Brian Paul [Mon, 8 Feb 2016 18:29:07 +0000 (11:29 -0700)]
mesa: whitespace clean-ups in dlist.h

And remove 'extern' qualifiers.

8 years agost/mesa: don't allocate bitmap drawing state until needed
Brian Paul [Mon, 8 Feb 2016 16:59:40 +0000 (09:59 -0700)]
st/mesa: don't allocate bitmap drawing state until needed

Most apps don't use glBitmap so don't allocate the bitmap cache or
gallium state objects/shaders/etc until the first call to st_Bitmap().

v2: simplify a conditional, per Gustaw Smolarczyk.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: move the setup_bitmap_vertex_data() code into draw_bitmap_quad()
Brian Paul [Wed, 3 Feb 2016 00:24:34 +0000 (17:24 -0700)]
st/mesa: move the setup_bitmap_vertex_data() code into draw_bitmap_quad()

Now all the code to setup the vertex data and draw it is in one place.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: refactor some bitmap drawing code
Brian Paul [Wed, 3 Feb 2016 00:12:46 +0000 (17:12 -0700)]
st/mesa: refactor some bitmap drawing code

Move setup/restoration of rendering state into helper functions.
This makes the draw_bitmap_quad() function much more concise.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agomesa: remove hack to fix up GL_ANY_SAMPLES_PASSED results
Ilia Mirkin [Fri, 5 Feb 2016 02:55:13 +0000 (21:55 -0500)]
mesa: remove hack to fix up GL_ANY_SAMPLES_PASSED results

Both st/mesa and i965 should return a true/false result now, and the
only other driver implementing queries (radeon) doesn't support
ARB_occlusion_query2 which added that pname.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: make use of the occlusion predicate query
Ilia Mirkin [Fri, 5 Feb 2016 02:51:58 +0000 (21:51 -0500)]
st/mesa: make use of the occlusion predicate query

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agonv50: add PIPE_QUERY_OCCLUSION_PREDICATE support
Ilia Mirkin [Thu, 4 Feb 2016 17:48:29 +0000 (12:48 -0500)]
nv50: add PIPE_QUERY_OCCLUSION_PREDICATE support

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
8 years agonv30: add PIPE_QUERY_OCCLUSION_PREDICATE support
Ilia Mirkin [Thu, 4 Feb 2016 17:48:06 +0000 (12:48 -0500)]
nv30: add PIPE_QUERY_OCCLUSION_PREDICATE support

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agoilo: add PIPE_QUERY_OCCLUSION_PREDICATE support
Ilia Mirkin [Thu, 4 Feb 2016 17:47:42 +0000 (12:47 -0500)]
ilo: add PIPE_QUERY_OCCLUSION_PREDICATE support

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
8 years agodraw: use util_pstipple_* function for stipple pattern textures and samplers
Nicolai Hähnle [Thu, 21 Jan 2016 21:10:11 +0000 (16:10 -0500)]
draw: use util_pstipple_* function for stipple pattern textures and samplers

This reduces code duplication.

Suggested-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agodraw: use util_pstipple_create_fragment_shader
Nicolai Hähnle [Thu, 21 Jan 2016 21:03:17 +0000 (16:03 -0500)]
draw: use util_pstipple_create_fragment_shader

This reduces code duplication. It also adds support for drivers where the
fragment position is a system value.

Suggested-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agowinsys/radeon: fix a wrong NUM_TILE_PIPES value from the kernel
Marek Olšák [Sun, 7 Feb 2016 19:25:01 +0000 (20:25 +0100)]
winsys/radeon: fix a wrong NUM_TILE_PIPES value from the kernel

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

Tested-by: Nick Sarnie <commendsarnex@gmail.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agonir: remove unused nir_variable fields
Timothy Arceri [Tue, 2 Feb 2016 00:53:57 +0000 (11:53 +1100)]
nir: remove unused nir_variable fields

These are used in GLSL IR to removed unused varyings and match
transform feedback variables. There is no need to use these in NIR.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: remove unrequired forward declaration
Timothy Arceri [Fri, 29 Jan 2016 23:50:12 +0000 (10:50 +1100)]
glsl: remove unrequired forward declaration

This was added in 2548092ad80156a4 although I don't see why as it
was already in the linker.h header.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: clean up and fix bug in varying linking rules
Timothy Arceri [Fri, 22 Jan 2016 22:08:23 +0000 (09:08 +1100)]
glsl: clean up and fix bug in varying linking rules

The existing code was very hard to follow and has been the source
of at least 3 bugs in the past year.

The existing code also has a bug for SSO where if we have a
multi-stage SSO for example a tes -> gs program, if we try to use
transform feedback with gs the existing code would look for the
transform feedback varyings in the tes stage and fail as it can't
find them.

V2: Add more code comments, always try to remove unused inputs
to the first stage.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: simplify ES Vertex/Fragment shader requirements
Timothy Arceri [Wed, 27 Jan 2016 05:16:01 +0000 (16:16 +1100)]
glsl: simplify ES Vertex/Fragment shader requirements

We really just needed to skip the existing ES < 3.1 check if we have
a compute shader, all other scenarios are already covered.

* No shaders is a link error.
* Geom or Tess without Vertex is a link error which means we always
  require a Vertex shader and hence a Fragment shader.
* Finally a Compute shader linked with any other stage is a link error.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: simplify required stages for linking rules
Timothy Arceri [Wed, 27 Jan 2016 04:42:58 +0000 (15:42 +1100)]
glsl: simplify required stages for linking rules

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: small tidy up now that link_shaders() exits early with 0 shaders
Timothy Arceri [Wed, 27 Jan 2016 04:34:53 +0000 (15:34 +1100)]
glsl: small tidy up now that link_shaders() exits early with 0 shaders

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: don't attempt to link empty program
Timothy Arceri [Mon, 25 Jan 2016 10:56:18 +0000 (21:56 +1100)]
glsl: don't attempt to link empty program

Previously an empty program would go through the entire
link_shaders() function and we would have to be careful
not to cause a segfault.

In core profile also now set link_status to false by
generating an error, it was previously set to true.

From Section 7.3 (PROGRAM OBJECTS) of the OpenGL 4.5 spec:

   "Linking can fail for a variety of reasons as specified in the
   OpenGL Shading Language Specification, as well as any of the
   following reasons:

    - No shader objects are attached to program."

V2: Only generate an error in core profile and add spec quote (Ian)

V3: generate error in ES too, remove previous check which was only
applying the rule to GL 4.5/ES 3.1 and above. My understand is that
this spec change is clarifying previously undefined behaviour and
therefore should be applied retrospectively. The ES CTS tests for
this are in ES 2 I suspect it was passing because it would have
generated an error for not having both a vertex and fragment shader.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agonir: Recognize open-coded bitfield_reverse.
Matt Turner [Tue, 2 Feb 2016 00:44:18 +0000 (16:44 -0800)]
nir: Recognize open-coded bitfield_reverse.

Helps 11 shaders in UnrealEngine4 demos.

I seriously hope they would have given us bitfieldReverse() if we
exposed GL 4.0 (but we do expose ARB_gpu_shader5, so why not use that
anyway?).

instructions in affected programs: 4875 -> 4633 (-4.96%)
cycles in affected programs: 270516 -> 244516 (-9.61%)

I suspect there's a *lot* of room to improve nir_search/opt_algebraic's
handling of this. We'd actually like to match, e.g., step2 by matching
step1 once and then doing a pointer comparison for the second instance
of step1, but unfortunately we generate an enormous tuple for instead.

The .text size increases by 6.5% and the .data by 17.5%.

   text     data  bss    dec    hex  filename
  22957    45224    0  68181  10a55  nir_libnir_la-nir_opt_algebraic.o
  24461    53160    0  77621  12f35  nir_libnir_la-nir_opt_algebraic.o

I'd be happy to remove this if Unreal4 uses bitfieldReverse() if it is
in a GL 4.0 context once we expose GL 4.0.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agonir: Handle large unsigned values in opt_algebraic.
Matt Turner [Tue, 2 Feb 2016 00:35:41 +0000 (16:35 -0800)]
nir: Handle large unsigned values in opt_algebraic.

The next patch adds an algebraic rule that uses the constant 0xff00ff00.

Without this change, the build fails with

   return hex(struct.unpack('I', struct.pack('i', self.value))[0])
   struct.error: 'i' format requires -2147483648 <= number <= 2147483647

The hex() function handles integers of any size, and assigning a
negative value to an unsigned does what we want in C. The pack/unpack is
unnecessary (and as we see, buggy).

Reviewed-by: Dylan Baker <baker.dylan.c@gmail.com>
8 years agonir: Do opt_algebraic in reverse order.
Matt Turner [Thu, 4 Feb 2016 20:04:42 +0000 (12:04 -0800)]
nir: Do opt_algebraic in reverse order.

Walking the SSA definitions in order means that we consider the smallest
algebraic optimizations before larger optimizations. So if a smaller
rule is part of a larger rule, the smaller one will happen first,
preventing the larger one from happening.

instructions in affected programs: 32721 -> 32611 (-0.34%)
helped: 106

In programs whose nir_optimize loop count changes (129 of them):

   before:  1164 optimization loops
   after:   1071 optimization loops

Of the 129 affected, 16 programs' optimization loop counts increased.

Prevents regressions and annoyances in the next commits.

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agonir: Recognize product of open-coded pow()s.
Matt Turner [Thu, 4 Feb 2016 20:00:15 +0000 (12:00 -0800)]
nir: Recognize product of open-coded pow()s.

Prevents regressions in the next commit.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agonir: Add opt_algebraic rules for xor with zero.
Matt Turner [Tue, 2 Feb 2016 00:34:46 +0000 (16:34 -0800)]
nir: Add opt_algebraic rules for xor with zero.

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

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

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

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

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

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

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

shader-db on Skylake:

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

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

This also prevents regressions when disabling channel expressions.

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

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

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

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

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

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

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

shader-db results on Skylake:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Just to be consistent.

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

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

New functions for examining instructions, declarations, etc.

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

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

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

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

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

Still some nonsensical comments.

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

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

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

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

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

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

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

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

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

Fixes MesaExtensionsTest.AlphabeticallySorted.

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

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

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

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

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

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

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

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

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

We also update the tests to reflect this change.

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

found by inspection.

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

Fixes compute since 7dd31b81fee7fe40bd09cf3fbc324fcc32782479
gallium/radeon: support PIPE_CAP_SURFACE_REINTERPRET_BLOCKS

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

trivial.

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

The vec4 backend, at the end, does this:

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

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

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

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

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

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

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

v2: assert and return if query_memory_info is not set
    rebase

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

v2: rebase

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

v2: implement eviction queries properly
    add gl_memory_info structure

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

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

v2: add fields for memory eviction stats

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

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

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

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

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

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

v2: print an error to stderr

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

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

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>