mesa.git
8 years agoi965: Move get_hw_prim_for_gl_prim to brw_util.c
Jason Ekstrand [Thu, 22 Oct 2015 03:40:28 +0000 (20:40 -0700)]
i965: Move get_hw_prim_for_gl_prim to brw_util.c

It's used by brw_compile_gs in brw_vec4_gs_visitor.cpp so it needs to be in
a file that's linked into libi965_compiler.la.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoradeonsi: set shader calling conventions
Bas Nieuwenhuizen [Thu, 31 Mar 2016 09:58:26 +0000 (11:58 +0200)]
radeonsi: set shader calling conventions

Note that old mesa + new LLVM or new mesa + old LLVM breaks
with this change and the corresponding LLVM change (D18559).

For LLVM version <= 3.8 we use the old method, but we can't detect
people using a post 3.8 svn version that is still too old.

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agodrirc: add a workaround for blackness in Warsow
Marek Olšák [Thu, 31 Mar 2016 21:32:53 +0000 (23:32 +0200)]
drirc: add a workaround for blackness in Warsow

Cc: 11.1 11.2 <mesa-stable@lists.freedesktop.org>
8 years agoglsl: use has_shader_storage_buffer_objects helper
Ilia Mirkin [Mon, 4 Apr 2016 15:54:22 +0000 (11:54 -0400)]
glsl: use has_shader_storage_buffer_objects helper

Replaces open-coded logic with existing helper.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agoglsl: remove remaining tabs in link_uniform_blocks.cpp
Timothy Arceri [Sun, 3 Apr 2016 08:33:40 +0000 (18:33 +1000)]
glsl: remove remaining tabs in link_uniform_blocks.cpp

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
8 years agomesa: remove unused IsShaderStorage field
Timothy Arceri [Sun, 3 Apr 2016 05:14:14 +0000 (15:14 +1000)]
mesa: remove unused IsShaderStorage field

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
8 years agoglsl: fully split apart buffer block arrays
Timothy Arceri [Sun, 3 Apr 2016 02:44:33 +0000 (12:44 +1000)]
glsl: fully split apart buffer block arrays

With this change we create the UBO and SSBO arrays separately from the
beginning rather than putting them into a combined array and splitting
it apart later.

A bug is with UBO and SSBO stage reference querying is also fixed as
we now use the block index to lookup the references in the separate arrays
not the combined buffer block array.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
8 years agofreedreno/ir3: insert extra move into phi
Rob Clark [Tue, 5 Apr 2016 17:45:34 +0000 (13:45 -0400)]
freedreno/ir3: insert extra move into phi

We had an implicit assumption that the phi src was assigned in it's
source (pred) block leading into the phi.  But this is not true with
NIR, so we can't just ignore the source block specified in the
nir_phi_src.  Insert an extra mov in the source block.  If it is not
required the CP pass will take it back out again.

Fixes:

  ./tests/spec/glsl-1.10/execution/vs-call-in-nested-loop.shader_test
  ./tests/spec/glsl-1.10/execution/vs-inner-loop-modifies-outer-loop-var.shader_test

and probably others.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: eliminate unnecessary absneg's
Rob Clark [Tue, 5 Apr 2016 16:39:47 +0000 (12:39 -0400)]
freedreno/ir3: eliminate unnecessary absneg's

The frontend inserts (abs) and (neg)'s to convert between NIR boolean
(~0/0) and native boolean (1/0).  So we'd end up with things like:

   cmps.s.ge r1.x, ...
   absneg.s r1.x, (neg)r1.x
   absneg.s r1.x, (abs)r1.x
   sel.b32 r2.x, r0.x, r1.x, r0.y

The (neg) already gets collapsed due to the following (abs).  Now by
realizing that r1.x comes from a cmps.s instruction, we can drop the
(abs) as well.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agoclover: Fix build against clang SVN >= r265359
Michel Dänzer [Tue, 5 Apr 2016 06:43:35 +0000 (15:43 +0900)]
clover: Fix build against clang SVN >= r265359

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
8 years agoradeonsi: use bounded indexing for samplers
Bas Nieuwenhuizen [Sun, 3 Apr 2016 09:45:02 +0000 (11:45 +0200)]
radeonsi: use bounded indexing for samplers

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: use bounded indexing for constant buffers
Bas Nieuwenhuizen [Sun, 3 Apr 2016 09:39:52 +0000 (11:39 +0200)]
radeonsi: use bounded indexing for constant buffers

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: allow multiple exports of the same texture with different usage
Marek Olšák [Mon, 28 Mar 2016 23:36:40 +0000 (01:36 +0200)]
gallium/radeon: allow multiple exports of the same texture with different usage

Instead of failing an assertion, disable DCC and CMASK on the first export
that needs it, and merge the external usage flags.

v2: clear the EXPLICIT_FLUSH flag if it's not set; whitespace fixes

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
8 years agodocs/relnotes: document EGL_KHR_reusable_sync
Marek Olšák [Tue, 5 Apr 2016 13:32:16 +0000 (15:32 +0200)]
docs/relnotes: document EGL_KHR_reusable_sync

8 years agoegl: add EGL_KHR_reusable_sync to egl_dri
Dongwon Kim [Tue, 5 Apr 2016 00:14:10 +0000 (17:14 -0700)]
egl: add EGL_KHR_reusable_sync to egl_dri

This patch enables an EGL extension, EGL_KHR_reusable_sync.
This new extension basically provides a way for multiple APIs or
threads to be excuted synchronously via a "reusable sync"
primitive shared by those threads/API calls.

This was implemented based on the specification at

https://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_reusable_sync.txt

v2
- use thread functions defined in C11/threads.h instead of
  using direct pthread calls
- make the timeout set with reference to CLOCK_MONOTONIC
- cleaned up the way expiration time is calculated
- (bug fix) in dri2_client_wait_sync, case EGL_SYNC_CL_EVENT_KHR
  has been added.
- (bug fix) in dri2_destroy_sync, return from cond_broadcast
  call is now stored in 'err' intead of 'ret' to prevent 'ret'
  from being reset to 'EGL_FALSE' even in successful case
- corrected minor syntax problems

v3
- dri2_egl_unref_sync now became 'void' type. No more error check
  is needed for this function call as a result.
- (bug fix) resolved issue with duplicated unlocking of display in
  eglClientWaitSync when type of sync is "EGL_KHR_REUSABLE_SYNC"

Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
8 years agofreedreno/ir3: deal with duplicate phi sources
Rob Clark [Mon, 4 Apr 2016 21:38:01 +0000 (17:38 -0400)]
freedreno/ir3: deal with duplicate phi sources

Otherwise we end up with funny things like:

  mov.f32f32 r0.x, r1.y
  mov.f32f32 r0.x, r1.y

(It doesn't happen as much after fixing the problem w/ CP into phi src,
but it can still happen since we aren't too clever about generating phi
sources in the first place.)

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: fix silly brain-fart in RA
Rob Clark [Mon, 4 Apr 2016 21:36:41 +0000 (17:36 -0400)]
freedreno/ir3: fix silly brain-fart in RA

We want to consider all the vars, not 1/32nd of them, when extending
live-ranges.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: don't cp into phi's
Rob Clark [Mon, 4 Apr 2016 21:34:57 +0000 (17:34 -0400)]
freedreno/ir3: don't cp into phi's

The block defining a phi source might not have been executed.  If we
allow copy propagation, we could end up pointing to a src instruction in
the wrong block.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: we can't store immediate values
Rob Clark [Mon, 4 Apr 2016 21:33:19 +0000 (17:33 -0400)]
freedreno/ir3: we can't store immediate values

Fixes some transform-feedback piglits, like:

bin/ext_transform_feedback-nonflat-integral

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: add dumping for use/def/live-in/live-out
Rob Clark [Mon, 4 Apr 2016 18:16:12 +0000 (14:16 -0400)]
freedreno/ir3: add dumping for use/def/live-in/live-out

Turned out to be useful to debug an issue in RA.  Let's keep it.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: drop unused instr category arg
Rob Clark [Mon, 4 Apr 2016 21:54:39 +0000 (17:54 -0400)]
freedreno/ir3: drop unused instr category arg

No longer used, so drop the extra arg to ir3_instr_create()

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: remove ir3_instruction::category
Rob Clark [Sun, 27 Mar 2016 17:43:45 +0000 (13:43 -0400)]
freedreno/ir3: remove ir3_instruction::category

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agofreedreno/ir3: encode instruction category in opc_t
Rob Clark [Sun, 27 Mar 2016 15:40:36 +0000 (11:40 -0400)]
freedreno/ir3: encode instruction category in opc_t

Been on my TODO list for a while.  If nothing else this will make gdb
properly grok the opc_t enum.

This first step preserves ir3_instruction::category (with an added
assert that category matches what is encoded in opc_t).  Next step is
to drop the category field (and arg to ir3_instr_create()), but that
is split into next commit for bisectability and so that we can run
piglit in the intermediate state to flush out any problems.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agoi965/fs: Move the code for load/store_shared to emit_cs_intrinsic
Jason Ekstrand [Fri, 25 Mar 2016 18:19:53 +0000 (11:19 -0700)]
i965/fs: Move the code for load/store_shared to emit_cs_intrinsic

They are compute-shader only and that's where the code for doing atomics on
shared variables lives so it seemes to make sense.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/nir: Provide a default LOD for buffer textures
Jason Ekstrand [Fri, 25 Mar 2016 21:02:50 +0000 (14:02 -0700)]
i965/nir: Provide a default LOD for buffer textures

Our hardware requires an LOD for all texelFetch commands even if they are
on buffer textures.  GLSL IR gives us an LOD of 0 in that case, but the LOD
is really rather meaningless.  This commit allows other NIR producers to be
more lazy and not provide one at all.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agonir: Use PRIi64 and PRIu64 instead of %ld and %lu.
Kenneth Graunke [Mon, 4 Apr 2016 02:51:22 +0000 (19:51 -0700)]
nir: Use PRIi64 and PRIu64 instead of %ld and %lu.

%ld and %lu aren't the right format specifiers for int64_t and uint64_t
on 32-bit (x86) systems.  They're %zu on Linux and %Iu on Windows.

Use the standard C99 macros in hopes that they work everywhere.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: Fix invalid pointer read in dead_control_flow_eliminate().
Kenneth Graunke [Wed, 30 Mar 2016 19:00:02 +0000 (12:00 -0700)]
i965: Fix invalid pointer read in dead_control_flow_eliminate().

There may not be a previous block.  In this case, there's no real work
to do, so just continue on to the next one.

v2: Update for bblock->prev() API change.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoi965: Make bblock_t::next and friends return NULL at sentinels.
Kenneth Graunke [Wed, 30 Mar 2016 19:00:02 +0000 (12:00 -0700)]
i965: Make bblock_t::next and friends return NULL at sentinels.

The bblock_t::prev/prev_const/next/next_const API returns bblock_t
pointers, rather than exec_nodes.  So it's a bit surprising.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoglsl: Lower variable indexing of system value arrays unconditionally.
Kenneth Graunke [Mon, 4 Apr 2016 07:31:45 +0000 (00:31 -0700)]
glsl: Lower variable indexing of system value arrays unconditionally.

lower_variable_index_to_cond_assign() did not handle system values.
gl_SampleMaskIn[] is a system value, and also an array.  Accessing it
with a variable index would trigger an unreachable() assert.

Rather than adding a new EmitNoIndirectSystemValues flag, we simply
lower unconditionally.  There is exactly one case where this occurs,
and for all current drivers, lowering produces optimal code.  Even
for future drivers with 32x MSAA, it produces reasonable code.

Fixes Piglit's new samplemaskin-indirect test.  Also fixes many ES31-CTS
tests when OES_sample_variables is enabled.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965/peephole_ffma: Only match a mul+add if none of the ops are exact
Jason Ekstrand [Mon, 28 Mar 2016 18:47:27 +0000 (11:47 -0700)]
i965/peephole_ffma: Only match a mul+add if none of the ops are exact

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agonir/search: Don't match inexact expressions with exact subexpressions
Jason Ekstrand [Mon, 28 Mar 2016 18:12:33 +0000 (11:12 -0700)]
nir/search: Don't match inexact expressions with exact subexpressions

In the first pass of implementing exact handling, I made a mistake with
search-and-replace.  In particular, we only reallly handled exact/inexact
on the root of the tree.  Instead, we need to check every node in the tree
for an exact/inexact match.  As an example of this, consider the following
GLSL code

precise float a = b + c;
if (a < 0) {
   do_stuff();
}

In that case, only the add will be declared "exact" and an expression that
looks for "b + c < 0" will still match and replace it with "b < -c" which
may yield different results.  The solution is to simply bail if any of the
values are exact when matching an inexact expression.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965: Add an INTEL_PRECISE_TRIG=1 option to fix SIN/COS output range.
Kenneth Graunke [Wed, 27 Jan 2016 20:21:04 +0000 (12:21 -0800)]
i965: Add an INTEL_PRECISE_TRIG=1 option to fix SIN/COS output range.

The SIN and COS instructions on Intel hardware can produce values
slightly outside of the [-1.0, 1.0] range for a small set of values.
Obviously, this can break everyone's expectations about trig functions.

According to an internal presentation, the COS instruction can produce
a value up to 1.000027 for inputs in the range (0.08296, 0.09888).  One
suggested workaround is to multiply by 0.99997, scaling down the
amplitude slightly.  Apparently this also minimizes the error function,
reducing the maximum error from 0.00006 to about 0.00003.

When enabled, fixes 16 dEQP precision tests

   dEQP-GLES31.functional.shaders.builtin_functions.precision.
   {cos,sin}.{highp,mediump}_compute.{scalar,vec2,vec4,vec4}.

at the cost of making every sin and cos call more expensive (about
twice the number of cycles on recent hardware).  Enabling this
option has been shown to reduce GPUTest Volplosion performance by
about 10%.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoi965: Allow 8x MSAA on >= 64bpp formats on Gen8+.
Kenneth Graunke [Mon, 4 Apr 2016 07:45:25 +0000 (00:45 -0700)]
i965: Allow 8x MSAA on >= 64bpp formats on Gen8+.

See commit 3b0279a69 - this restriction is documented in the "Surface
Format" field of RENDER_SURFACE_STATE.

Looking at newer documentation, this restriction appears to exist on
Haswell, but no longer applies on Gen8+.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
8 years agodocs: remove stray 'TBD' in 11.2.0 relnotes file
Brian Paul [Mon, 4 Apr 2016 16:33:11 +0000 (10:33 -0600)]
docs: remove stray 'TBD' in 11.2.0 relnotes file

8 years agodocs: add news item and link release notes for 11.2.0
Emil Velikov [Mon, 4 Apr 2016 11:57:56 +0000 (12:57 +0100)]
docs: add news item and link release notes for 11.2.0

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
8 years agodocs: add sha256 checksums for 11.2.0
Emil Velikov [Mon, 4 Apr 2016 11:55:27 +0000 (12:55 +0100)]
docs: add sha256 checksums for 11.2.0

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit e7fb889dcc002f87c316f3cdc6e7907a88c12697)

8 years agodocs: Update 11.2.0 release notes
Emil Velikov [Mon, 4 Apr 2016 10:39:34 +0000 (11:39 +0100)]
docs: Update 11.2.0 release notes

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit ff9ddb9eb1b3b25f40e71a95bb48421abfcb11d9)

8 years agomesa/get: fix MAX_GEOMETRY_SHADER_STORAGE_BLOCKS
Dave Airlie [Mon, 4 Apr 2016 06:54:28 +0000 (07:54 +0100)]
mesa/get: fix MAX_GEOMETRY_SHADER_STORAGE_BLOCKS

this was returning the fragment shader value.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agonvc0: add hardware ETC2 and ASTC support on GK20A and GM107+
Ilia Mirkin [Sun, 3 Apr 2016 18:13:33 +0000 (14:13 -0400)]
nvc0: add hardware ETC2 and ASTC support on GK20A and GM107+

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agodocs: add note about GL_EXT_base_instance, sort entries
Ilia Mirkin [Mon, 4 Apr 2016 01:17:46 +0000 (21:17 -0400)]
docs: add note about GL_EXT_base_instance, sort entries

Trivial.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agomesa: expose EXT_base_instance in ES3 contexts
Ilia Mirkin [Sun, 3 Apr 2016 06:44:50 +0000 (02:44 -0400)]
mesa: expose EXT_base_instance in ES3 contexts

This extension is identical to ARB_base_instance. Reuse the same
entrypoints.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: expose EXT_polygon_offset_clamp in ES contexts
Ilia Mirkin [Sun, 3 Apr 2016 06:28:53 +0000 (02:28 -0400)]
mesa: expose EXT_polygon_offset_clamp in ES contexts

The extension spec was extended to also support ES. This functionality
is provided all the way back to ES 1.0.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl: Print "precise" on ir_variable nodes.
Kenneth Graunke [Sun, 3 Apr 2016 08:25:03 +0000 (01:25 -0700)]
glsl: Print "precise" on ir_variable nodes.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
8 years agogallivm: Introduce lp_format_intrinsic.
Jose Fonseca [Sun, 3 Apr 2016 21:52:53 +0000 (22:52 +0100)]
gallivm: Introduce lp_format_intrinsic.

For adding .v4f32 like suffixes to intrinsics, taking special care for
scalar case, which was being often neglected.

This fixes invalid IR when doing mipmap filtering on SSE2 (the only
case where we'd use intrinsics with scalars.)

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoglsl: make *sampler2DMSArray available in ESSL 3.20
Ilia Mirkin [Sun, 3 Apr 2016 02:56:49 +0000 (22:56 -0400)]
glsl: make *sampler2DMSArray available in ESSL 3.20

Also avoid double-adding the *sampler2DMS types when the array ext is
enabled.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl: make ssbo predicate return true when in a GLSL 430 or ESSL 310 shader
Ilia Mirkin [Sun, 3 Apr 2016 01:50:22 +0000 (21:50 -0400)]
glsl: make ssbo predicate return true when in a GLSL 430 or ESSL 310 shader

I can't tell whether this actually matters, but we're creating function
signatures with this predicate, so it should probably match when SSBO's
are available.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl: allow conservative depth qualifiers in GLSL 420
Ilia Mirkin [Sun, 3 Apr 2016 01:08:25 +0000 (21:08 -0400)]
glsl: allow conservative depth qualifiers in GLSL 420

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: add always-false-for-now enables for GL 4.3, 4.4, 4.5.
Ilia Mirkin [Fri, 8 Jan 2016 20:48:44 +0000 (15:48 -0500)]
mesa: add always-false-for-now enables for GL 4.3, 4.4, 4.5.

As the relevant extensions get implemented, the lines should be
uncommented. I believe this is (almost) everything needed for those GL
versions though.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl: add ARB_ES3_1_compatibility support
Ilia Mirkin [Fri, 19 Feb 2016 19:03:39 +0000 (14:03 -0500)]
glsl: add ARB_ES3_1_compatibility support

Oddly a bunch of the features it adds are actually from ESSL 3.20. But
the spec is quite clear, oh well.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: add ES3_1_compatibility extension enable
Ilia Mirkin [Fri, 19 Feb 2016 18:26:43 +0000 (13:26 -0500)]
mesa: add ES3_1_compatibility extension enable

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agogallivm: Use llvm.fabs.
Jose Fonseca [Fri, 1 Apr 2016 10:51:27 +0000 (11:51 +0100)]
gallivm: Use llvm.fabs.

Exactly the same code.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agogallivm: Prefer backend agnostic intrinsic for rounding.
Jose Fonseca [Fri, 1 Apr 2016 10:50:28 +0000 (11:50 +0100)]
gallivm: Prefer backend agnostic intrinsic for rounding.

We could unconditionally use these instrinsics, but performance with SSE2
would suck, as LLVM falls back to calling libm.

lp_test_arit.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agogallivm: Add debug option to force SSE2.
Jose Fonseca [Fri, 1 Apr 2016 10:06:30 +0000 (11:06 +0100)]
gallivm: Add debug option to force SSE2.

For simulating less capable machines.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agollvmpipe: Test abs.
Jose Fonseca [Fri, 1 Apr 2016 10:50:43 +0000 (11:50 +0100)]
llvmpipe: Test abs.

Trivial.

8 years agollvmpipe: Build lp_test_arit on MSVC too.
Jose Fonseca [Sun, 3 Apr 2016 10:09:35 +0000 (11:09 +0100)]
llvmpipe: Build lp_test_arit on MSVC too.

It builds fine now.  Probably due to C99 support.

Trivial.

8 years agogallivm: Fix performance regressions due to vector selects.
Jose Fonseca [Sat, 2 Apr 2016 14:13:38 +0000 (15:13 +0100)]
gallivm: Fix performance regressions due to vector selects.

LLVM often can't determine the mask elements are all ones/zeros, and
there doesn't seem to be a good way to hint that.

Thanks to Roland Scheidegger for spotting and analyzing the issue.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agogallivm: Remove lp_build_load_volatile.
Jose Fonseca [Sat, 2 Apr 2016 13:33:33 +0000 (14:33 +0100)]
gallivm: Remove lp_build_load_volatile.

No longer needed.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agogallivm: Use standard LLVMSetAlignment from LLVM 3.4 onwards.
Jose Fonseca [Sat, 2 Apr 2016 13:31:16 +0000 (14:31 +0100)]
gallivm: Use standard LLVMSetAlignment from LLVM 3.4 onwards.

Only provide a fallback for LLVM 3.3.

One less dependency on LLVM C++ interface.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agomesa: remove unrequired else
Timothy Arceri [Sat, 2 Apr 2016 10:07:50 +0000 (21:07 +1100)]
mesa: remove unrequired else

The if always returns so no need for an else.

Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agogm107/ir: add OP_SELP emission, used in DSQRT lowering
Ilia Mirkin [Sat, 2 Apr 2016 23:25:59 +0000 (19:25 -0400)]
gm107/ir: add OP_SELP emission, used in DSQRT lowering

The current DSQRT lowering code emits an OP_SELP, so we have to handle
its emission. This will eventually go away, but no harm supporting this
op.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonv50/ir: we can't load local memory directly into an output
Ilia Mirkin [Sat, 2 Apr 2016 21:46:58 +0000 (17:46 -0400)]
nv50/ir: we can't load local memory directly into an output

This fixes piglit tests like

tests/spec/glsl-1.10/execution/variable-indexing/vs-output-array-float-index-wr.shader_test

and related ones.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
8 years agost/nine: specify WINAPI only for i386 and amd64
Christian Schmidbauer [Sun, 13 Mar 2016 21:50:31 +0000 (22:50 +0100)]
st/nine: specify WINAPI only for i386 and amd64

Currently mesa fails building with the x32 abi as ms_abi is not defined
in such a case.

The patch uses ms_abi only for amd64 targets and stdcall only for i386
targets to be sure that those are defined.

This patch additionally checks for __GNUC__ to guarantee that
__attribute__ is available.

CC: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Christian Schmidbauer <ch.schmidbauer@gmail.com>
Acked-by: Axel Davy <axel.davy@ens.fr>
8 years agonv50/ir: fix envyas variants when building the code lib
Samuel Pitoiset [Sat, 2 Apr 2016 17:55:30 +0000 (19:55 +0200)]
nv50/ir: fix envyas variants when building the code lib

nvc0 and nve4 have been respectively replaced by gf100 and gk104.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agosvga: remove unused svga_compile_key::texture_msaa field
Brian Paul [Thu, 31 Mar 2016 20:23:34 +0000 (14:23 -0600)]
svga: remove unused svga_compile_key::texture_msaa field

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agosvga: check TXF instruction's target to determine MSAA
Brian Paul [Thu, 31 Mar 2016 20:19:17 +0000 (14:19 -0600)]
svga: check TXF instruction's target to determine MSAA

Rather than the currently bound texture.  This goes along with the
earlier patch to get away from examining bound textures and sampler
views during shader translation.

Fixes VMware bug 1632739.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agotgsi: add simple tgsi_is_msaa_target() helper
Brian Paul [Thu, 31 Mar 2016 20:17:26 +0000 (14:17 -0600)]
tgsi: add simple tgsi_is_msaa_target() helper

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agoglsl: rename var and simplify if
Timothy Arceri [Sat, 2 Apr 2016 02:59:46 +0000 (13:59 +1100)]
glsl: rename var and simplify if

is_ubo_var is true for both UBOs and SSBOs

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: store ubo or ssbo index in block index
Timothy Arceri [Sat, 2 Apr 2016 02:54:06 +0000 (13:54 +1100)]
glsl: store ubo or ssbo index in block index

Previously we store the buffer block index i.e the index of a combined
ubo/ssbo list.

Fixes several dEQP-GLES31.functional tests:
- program_interface_query.uniform.block_index.block_array
- program_interface_query.uniform.block_index.named_block
- program_interface_query.uniform.block_index.unnamed_block
- program_interface_query.uniform.random.10
- program_interface_query.uniform.random.15
- program_interface_query.uniform.random.22
- program_interface_query.uniform.random.24
- program_interface_query.uniform.random.26
- program_interface_query.uniform.random.28
- program_interface_query.uniform.random.3
- program_interface_query.uniform.random.31
- program_interface_query.uniform.random.38
- program_interface_query.uniform.random.5

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94116
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: store stage reference in gl_uniform_block
Timothy Arceri [Sat, 2 Apr 2016 01:51:12 +0000 (12:51 +1100)]
glsl: store stage reference in gl_uniform_block

This allows us to simplify the code and drop InterfaceBlockStageIndex
which is a per stage array of integers the size of all blocks in the
program combined including duplicates across stages. Adding a stage
ref per block will use less memory.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: simplify buffer block resource limit checking
Timothy Arceri [Sat, 2 Apr 2016 01:16:01 +0000 (12:16 +1100)]
glsl: simplify buffer block resource limit checking

This changes the code to use the buffer counts stored for each stage
rather than counting from scratch. It also moves the checks outside
of the for loop which means we now just get a single link error
message if we go over the max rather than X error messages where X
is the number we have exceeded the max by.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: simplify SSBO resources check
Timothy Arceri [Sat, 2 Apr 2016 00:48:27 +0000 (11:48 +1100)]
glsl: simplify SSBO resources check

We already have a count of active SSBOs per stage so use it.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: split buffer block arrays earlier
Timothy Arceri [Sat, 2 Apr 2016 01:12:10 +0000 (12:12 +1100)]
glsl: split buffer block arrays earlier

This will allow us to use them when checking resources in a
following patch and clean up a bunch of code.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: only set buffer block binding once during initialisation
Timothy Arceri [Sat, 2 Apr 2016 00:06:39 +0000 (11:06 +1100)]
glsl: only set buffer block binding once during initialisation

Since 8683d54d2be825 there is now a single instance of the buffer
block information that needs to be updated rather than one instance
for each stage.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoglsl: Fix prorgram interface query locations biasing for SSO.
Kenneth Graunke [Tue, 29 Mar 2016 21:15:14 +0000 (14:15 -0700)]
glsl: Fix prorgram interface query locations biasing for SSO.

With SSO, the GL_PROGRAM_INPUT and GL_PROGRAM_OUTPUT interfaces refer to
the first and last shader stage linked into a program.  This may not be
the vertex and fragment shader stages.

So, subtracting VERT_ATTRIB_GENERIC0 and FRAG_RESULT_DATA0 is bogus.
We need to subtract VERT_ATTRIB_GENERIC0 for VS inputs,
FRAG_RESULT_DATA0 for FS outputs, and VARYING_SLOT_VAR0 for other cases.

Note that built-in variables get a location of -1.

Fixes 4 dEQP-GLES31.functional.program_interface_query tests:
- program_input.location.separable_fragment.var_explicit_location
- program_input.location.separable_fragment.var_array_explicit_location
- program_output.location.separable_vertex.var_array_explicit_location
- program_output.location.separable_vertex.var_array_explicit_location

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Return -1 for program interface query locations in many cases.
Kenneth Graunke [Tue, 29 Mar 2016 20:21:48 +0000 (13:21 -0700)]
glsl: Return -1 for program interface query locations in many cases.

We were recording locations for all variables, even ones without an
explicit location set.  Implement the rules from the spec, and record
-1 in the resource list accordngly.  Make program_resource_location
stop doing math on negative values.  Remove hacks that are no longer
necessary now that we've stopped doing that.

Fixes 4 dEQP-GLES31.functional.program_interface_query tests:
- program_input.location.separable_fragment.var
- program_input.location.separable_fragment.var_array
- program_output.location.separable_vertex.var_array
- program_output.location.separable_vertex.var_array

v2: Delete more code

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Consolidate gl_VertexIDMESA -> gl_VertexID query hacks.
Kenneth Graunke [Tue, 29 Mar 2016 20:32:32 +0000 (13:32 -0700)]
glsl: Consolidate gl_VertexIDMESA -> gl_VertexID query hacks.

A program will either have gl_VertexID or gl_VertexIDMESA (the lowered
zero-based version), not both.  Just spoof it in the resource list so
the hacks are done in a single place.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Clean up some leftover cruft.
Kenneth Graunke [Tue, 29 Mar 2016 19:31:28 +0000 (12:31 -0700)]
glsl: Clean up some leftover cruft.

stages is always 1 << stage now.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Add all system variables to the input resource list.
Kenneth Graunke [Tue, 29 Mar 2016 19:07:37 +0000 (12:07 -0700)]
glsl: Add all system variables to the input resource list.

System values are just built-in input variables that we've opted to
special-case out of convenience.  We need to consider all inputs,
regardless of how we've classified them.

Unfortunately, there's one exception: we shouldn't add gl_BaseVertex
unless ARB_shader_draw_parameters is enabled, because it doesn't
actually exist in the language, and shouldn't be counted in the
GL_ACTIVE_RESOURCES query.

Fixes dEQP-GLES31.functional.program_interface_query.program_input.
resource_list.compute.empty, which expects gl_NumWorkGroups to appear
in the resource list.

v2: Delete more code

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Delete hack for VS system values.
Kenneth Graunke [Tue, 29 Mar 2016 19:11:55 +0000 (12:11 -0700)]
glsl: Delete hack for VS system values.

This makes no sense.  If the stage being considered is the vertex
shader, then we'll add inputs and system values appropriately.

If we're not considering the vertex shader, then we absolutely should
not do anything with it.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Make add_interface_variables only consider the appropriate stage.
Kenneth Graunke [Tue, 29 Mar 2016 18:41:46 +0000 (11:41 -0700)]
glsl: Make add_interface_variables only consider the appropriate stage.

add_interface_variables() is supposed to add variables for the inputs of
the first shader stage linked into a program, and the outputs of the
last shader stage linked into a program.

From the ARB_program_interface_query specification:

"* PROGRAM_INPUT corresponds to the set of active input variables used by
   the first shader stage of <program>.  If <program> includes multiple
   shader stages, input variables from any shader stage other than the
   first will not be enumerated.

 * PROGRAM_OUTPUT corresponds to the set of active output variables
   (section 2.14.11) used by the last shader stage of <program>.  If
   <program> includes multiple shader stages, output variables from any
   shader stage other than the last will not be enumerated."

Previously, we used build_stageref here, which walks over all linked
shaders in the program.  This meant that internal varyings would be
visible.  We don't actually need any of build_stageref's code: we
already explicitly skip packed varyings, handle modes, and the name
comparisons just do a fuzzy string comparison of name with itself.

Fixes two tests: dEQP-GLES31.functional.program_interface_query.
program_{input,output}.referenced_by.referenced_by_vertex_fragment.

These tests have a VS and FS linked together into a single program.
Both stages have an input called "shaderInput".  But the FS input
should not be visible because it isn't the first stage.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Clarify "mask" variable in add_interface_variables().
Kenneth Graunke [Tue, 29 Mar 2016 18:37:48 +0000 (11:37 -0700)]
glsl: Clarify "mask" variable in add_interface_variables().

This is a bitfield of which stages refer to a variable.  It is not used
to mask off bits.  In fact, it's used to contribute additional bits.

Rename it and tidy a bit of the logic.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Pass stage to add_interface_variables().
Kenneth Graunke [Tue, 29 Mar 2016 18:31:10 +0000 (11:31 -0700)]
glsl: Pass stage to add_interface_variables().

add_interface_variables is supposed to add variables from either the
first or last stage of a linked shader.  But it has no way of knowing
the stage it's being asked to process, which makes it impossible to
produce correct stagerefs.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Make vertex ID lowering declare gl_BaseVertex as hidden.
Kenneth Graunke [Sat, 2 Apr 2016 03:52:33 +0000 (20:52 -0700)]
glsl: Make vertex ID lowering declare gl_BaseVertex as hidden.

If the GL_ARB_shader_draw_parameters extension is enabled, we'll already
have a gl_BaseVertex variable.  It will have var->how_declared set to
ir_var_declared_implicitly, and will appear in the program resource
list.

If not, we make one for internal use.  We don't want it to be listed
in the program resource list, as the application won't be expecting
it.  Marking it hidden will properly exclude it.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agoglsl: Exclude ir_var_hidden variables from the program resource list.
Kenneth Graunke [Sat, 2 Apr 2016 04:00:32 +0000 (21:00 -0700)]
glsl: Exclude ir_var_hidden variables from the program resource list.

We occasionally generate variables internally that we want to exclude
from the program resource list, as applications won't be expecting them
to be present.

The next patch will make use of this.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agomesa: Make _mesa_choose_tex_format() handle stencil textures.
Kenneth Graunke [Mon, 21 Mar 2016 21:01:24 +0000 (14:01 -0700)]
mesa: Make _mesa_choose_tex_format() handle stencil textures.

This is necessary for ARB_texture_stencil8 support on classic drivers.
Presumably Gallium works because it implements its own ChooseTexFormat.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoglsl: Don't require matching centroid qualifiers
Jordan Justen [Sat, 12 Mar 2016 00:44:06 +0000 (16:44 -0800)]
glsl: Don't require matching centroid qualifiers

Note: This patch appears to violate older OpenGL and OpenGLES specs.

The OpenGLES GLSL 3.1 and OpenGL GLSL 4.3 specifications both remove
the requirement for the output and input centroid qualifiers to match.

The deqp
dEQP-GLES3.functional.shaders.linkage.varying.rules.differing_interpolation_2
test wants the newer OpenGLES 3.1 specification behavior, even for
OpenGLES 3.0. This patch simply removes the checking in all cases.

The OpenGLES 3.0 conformance test suite doesn't appear to require the
older ("must match") spec behavior.

For reference, here are the relavent spec citations:

  The OpenGL 4.2 spec says: "the last active shader stage output
  variables and fragment shader input variables of the same name must
  match in type and qualification (other than out matching to in)"

  The OpenGL 4.3 spec says: "interpolation qualification (e.g., flat)
  and auxiliary qualification (e.g. centroid) may differ."

  The OpenGLES GLSL 3.00.4 specification says: "The output of the
  vertex shader and the input of the fragment shader form an
  interface. For this interface, vertex shader output variables and
  fragment shader input variables of the same name must match in type
  and qualification (other than precision and out matching to in)."

  The OpenGLES GLSL 3.10 Specification says: "interpolation
  qualification (e.g., flat) and auxiliary qualification (e.g.
  centroid) may differ"

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92743
Bugzilla: https://cvs.khronos.org/bugzilla/show_bug.cgi?id=7819
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agogallium: distinguish between shader IR in get_compute_param
Bas Nieuwenhuizen [Fri, 25 Mar 2016 01:06:50 +0000 (02:06 +0100)]
gallium: distinguish between shader IR in get_compute_param

For radeonsi, native and TGSI use different compilers and this results
in different limits for different IR's.

The set we strictly need for radeonsi is only the MAX_BLOCK_SIZE
and MAX_THREADS_PER_BLOCK params, but I added a few others as shader
related that seemed like they would also typically depend on the
compiler.

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agogallium: add global buffer memory barrier bit
Bas Nieuwenhuizen [Thu, 24 Mar 2016 22:11:03 +0000 (23:11 +0100)]
gallium: add global buffer memory barrier bit

Currently radeonsi synchronizes after every dispatch and Clover
does nothing to synchronize. This is overzealous, especially with
GL compute, so add a barrier for global buffers.

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agogallium: add threads per block TGSI property
Bas Nieuwenhuizen [Mon, 28 Mar 2016 00:40:03 +0000 (02:40 +0200)]
gallium: add threads per block TGSI property

The value 0 for unknown has been chosen to so that
drivers using tgsi_scan_shader do not need to detect
missing properties if they zero-initialize the struct.

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agogallium: add compute shader IR type
Bas Nieuwenhuizen [Thu, 17 Mar 2016 13:15:39 +0000 (14:15 +0100)]
gallium: add compute shader IR type

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
8 years agoglsl: remove tabs and fix some other style issues in glcpp-parse.y
Timothy Arceri [Thu, 31 Mar 2016 05:49:59 +0000 (16:49 +1100)]
glsl: remove tabs and fix some other style issues in glcpp-parse.y

Note there are still tabs left in the parser rules.

Acked-by: Dave Airlie <airlied@redhat.com>
8 years agoi965: Add an implemnetation of nir_op_fquantize2f16
Jason Ekstrand [Fri, 25 Mar 2016 20:57:15 +0000 (13:57 -0700)]
i965: Add an implemnetation of nir_op_fquantize2f16

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agonir: Add an opcode for stomping a 32-bit value to 16-bit precision
Jason Ekstrand [Fri, 25 Mar 2016 20:58:17 +0000 (13:58 -0700)]
nir: Add an opcode for stomping a 32-bit value to 16-bit precision

This correlates directly to the SPIR-V opcode OpQuantizeToF16

Reviewed-by: Rob Clark <robdclark@gmail.com>
8 years agonvc0: enable compute shaders on GK104 and GM107+
Samuel Pitoiset [Mon, 8 Feb 2016 17:19:47 +0000 (18:19 +0100)]
nvc0: enable compute shaders on GK104 and GM107+

Compute support on GK110 is still unstable for weird reasons, but
this can be fixed later as the NVF0_COMPUTE envvar prevent using
compute.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0: bump the maximum number of UBOs for compute on Kepler
Samuel Pitoiset [Mon, 8 Feb 2016 17:20:02 +0000 (18:20 +0100)]
nvc0: bump the maximum number of UBOs for compute on Kepler

The maximum number of uniform blocks (MAX_COMPUTE_UNIFORM_BLOCKS)
per compute program must be at least 12.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0/ir: do not lower shared+atomics on GM107+
Samuel Pitoiset [Mon, 7 Mar 2016 17:56:21 +0000 (18:56 +0100)]
nvc0/ir: do not lower shared+atomics on GM107+

For Maxwell, the ATOMS instruction can be used to perform atomic
operations on shared memory instead of this load/store lowering pass.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0/ir: add atomics support on shared memory for Kepler
Samuel Pitoiset [Wed, 10 Feb 2016 21:37:42 +0000 (22:37 +0100)]
nvc0/ir: add atomics support on shared memory for Kepler

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0/ir: fix wrong pred emission for ld lock on GK104
Samuel Pitoiset [Mon, 22 Feb 2016 22:20:30 +0000 (23:20 +0100)]
nvc0/ir: fix wrong pred emission for ld lock on GK104

This fixes 84b9b8f (nvc0/ir: add missing emission of locked load
predicate).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0/ir: add support for compute UBOs on Kepler
Samuel Pitoiset [Wed, 30 Mar 2016 22:50:39 +0000 (00:50 +0200)]
nvc0/ir: add support for compute UBOs on Kepler

Make sure to avoid out of bounds access in presence of indirect
array indexing by loading the size from the driver constant buffer.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agonvc0: add indirect compute support on Kepler
Samuel Pitoiset [Thu, 14 Jan 2016 17:24:53 +0000 (18:24 +0100)]
nvc0: add indirect compute support on Kepler

The grid size is stored as three 32-bits integers in the indirect
buffer but the launch descriptor uses a 32-bits integer for both
griddim_y and griddim_z like this (z << 16) | y. To make it work,
the 16 high bits of griddim_y are overwritten by griddim_z.

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