platform/upstream/mesa.git
10 years agoilo: move away from drm_intel_bo_alloc_tiled
Chia-I Wu [Mon, 14 Jul 2014 02:10:35 +0000 (10:10 +0800)]
ilo: move away from drm_intel_bo_alloc_tiled

We want to know the exact sizes of the BOs, and the driver has the knowledge
to do so.  Refactoring of the resource allocation code is needed though.

10 years agoradeonsi: partially revert "switch descriptors to i32 vectors"
Marek Olšák [Mon, 14 Jul 2014 17:40:14 +0000 (19:40 +0200)]
radeonsi: partially revert "switch descriptors to i32 vectors"

It indeed breaks LLVM 3.4.2.

10 years agoi965/vec4: Invalidate live intervals in opt_cse, not _local.
Matt Turner [Sat, 12 Jul 2014 03:38:09 +0000 (20:38 -0700)]
i965/vec4: Invalidate live intervals in opt_cse, not _local.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/vec4: Move aeb list into opt_cse_local.
Matt Turner [Sat, 12 Jul 2014 03:36:39 +0000 (20:36 -0700)]
i965/vec4: Move aeb list into opt_cse_local.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Invalidate live intervals in opt_cse, not _local.
Matt Turner [Sat, 12 Jul 2014 03:37:04 +0000 (20:37 -0700)]
i965/fs: Invalidate live intervals in opt_cse, not _local.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Move aeb list into opt_cse_local.
Matt Turner [Sat, 12 Jul 2014 03:35:31 +0000 (20:35 -0700)]
i965/fs: Move aeb list into opt_cse_local.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoglsl: Fix aggregates with dynamic initializers.
Cody Northrop [Thu, 10 Jul 2014 15:55:31 +0000 (09:55 -0600)]
glsl: Fix aggregates with dynamic initializers.

Vectors are falling in to the ir_dereference_array() path.

Without this change, the following glsl aborts the debug driver,
or gets the wrong answer in release:

mat2x2 a = mat2( vec2( 1.0, vertex.x ), vec2( 0.0, 1.0 ) );

Also submitting piglit tests, will reference in bug.

v2: Rebase on Mesa master.

v3: Remove unneeded check for arrays, which are covered by
    process_array_constructor(), recommended by Timothy Arceri.

Signed-off-by: Cody Northrop <cody@lunarg.com>
Reviewed-by: Courtney Goeltzenleuchter <courtney@lunarg.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79373

10 years agoAvoid mesa_dri_drivers import lib being installed
Jon TURNEY [Sat, 5 Apr 2014 18:20:15 +0000 (19:20 +0100)]
Avoid mesa_dri_drivers import lib being installed

On Cygwin and MinGW, linking a shared library also generates an import library

Use a wildcard which also matches the name of the megadriver import lib,
mesa_dri_drivers.dll.a, so that is also removed after megadriver symlinks are
created

(This then matches src/gallium/targets/dri/Makefile.am, which already does
things this way)

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
10 years agoi965/vec4: Silence warnings about unhandled interpolation ops
Chris Forbes [Sat, 12 Jul 2014 23:13:18 +0000 (11:13 +1200)]
i965/vec4: Silence warnings about unhandled interpolation ops

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
10 years agodocs: Mark off ARB_gpu_shader5 interpolation functions for i965
Chris Forbes [Sat, 12 Jul 2014 22:04:25 +0000 (10:04 +1200)]
docs: Mark off ARB_gpu_shader5 interpolation functions for i965

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
10 years agoi965/fs: add support for ir_*_interpolate_at_* expressions
Chris Forbes [Sun, 17 Nov 2013 07:00:00 +0000 (20:00 +1300)]
i965/fs: add support for ir_*_interpolate_at_* expressions

SIMD8-only for now.

V5: - Fix style complaints
    - Move prototype to be with other oddball emit functions
    - Use unreachable() instead of assert() where possible

V6: - Describe what is happening with the clamping
    - Add reg_width to make some expressions clearer

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Skip channel expressions splitting for interpolation
Chris Forbes [Sun, 17 Nov 2013 07:07:46 +0000 (20:07 +1300)]
i965/fs: Skip channel expressions splitting for interpolation

The backend will have to do a message send, so we want to keep these in
one piece, just like texture ops.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: add generator support for pixel interpolator query
Chris Forbes [Mon, 18 Nov 2013 08:13:13 +0000 (21:13 +1300)]
i965/fs: add generator support for pixel interpolator query

V5: - Split into separate opcodes
    - Pass message data in src1 immediate
    - Put noperspective bit in fs_inst rather than adding any junk to
      backend_instruction

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965: add low-level support for send to pixel interpolator
Chris Forbes [Sun, 17 Nov 2013 08:47:22 +0000 (21:47 +1300)]
i965: add low-level support for send to pixel interpolator

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/disasm: add support for pixel interpolator messages
Chris Forbes [Mon, 18 Nov 2013 08:24:24 +0000 (21:24 +1300)]
i965/disasm: add support for pixel interpolator messages

V3: Rework for brw_inst changes

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965: Add message descriptor bit definitions for pixel interpolator
Chris Forbes [Sat, 12 Jul 2014 01:21:01 +0000 (13:21 +1200)]
i965: Add message descriptor bit definitions for pixel interpolator

These got lost in the big brw_inst shakeup.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/disasm: Disassemble indirect sends more properly
Chris Forbes [Sun, 6 Jul 2014 08:11:07 +0000 (20:11 +1200)]
i965/disasm: Disassemble indirect sends more properly

- Don't try to disassemble send's src1 as a descriptor if it's not an
  immediate.

- In the same case, show src1 as an operand (makes it easier to see
  bogus register regions, etc -- the hardware is very fussy)

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoi965: Avoid crashing while dumping vec4 insn operands
Chris Forbes [Sun, 6 Jul 2014 08:11:06 +0000 (20:11 +1200)]
i965: Avoid crashing while dumping vec4 insn operands

We'd otherwise go looking into virtual_grf_sizes for things that aren't
in there at all.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoi965: Fix two broken asserts in brw_eu_emit
Chris Forbes [Sun, 6 Jul 2014 08:11:05 +0000 (20:11 +1200)]
i965: Fix two broken asserts in brw_eu_emit

These were looking in the wrong field.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoglsl: add new interpolateAt* builtin functions
Chris Forbes [Sun, 10 Nov 2013 06:34:53 +0000 (19:34 +1300)]
glsl: add new interpolateAt* builtin functions

V2: - Don't assume everyone wants interpolateAtSample() lowered to
      interpolateAtOffset. It turns out this isn't what we want most
      of the time for i965. Lowering can be added later in an ir pass
      which drivers opt into, rather than bolting it straight into the
      builtin definition.
    - Only expose the interpolateAt* builtins in the fragment language.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agoglsl: add new expression types for interpolateAt*
Chris Forbes [Sun, 10 Nov 2013 06:13:54 +0000 (19:13 +1300)]
glsl: add new expression types for interpolateAt*

Will be used to implement interpolateAt*() from ARB_gpu_shader5

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agoallow builtin functions to require parameters to be shader inputs
Chris Forbes [Sun, 10 Nov 2013 08:19:31 +0000 (21:19 +1300)]
allow builtin functions to require parameters to be shader inputs

The new interpolateAt* builtins have strange restrictions on the
<interpolant> parameter.

- It must be a shader input, or an element of a shader input array.
- It must not include a swizzle.

V2: Don't abuse ir_var_mode_shader_in for this; make a new flag.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agoradeonsi: rename definitions of shader limits
Marek Olšák [Mon, 7 Jul 2014 21:27:19 +0000 (23:27 +0200)]
radeonsi: rename definitions of shader limits

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
10 years agoradeonsi: switch descriptors to i32 vectors
Marek Olšák [Mon, 7 Jul 2014 20:49:15 +0000 (22:49 +0200)]
radeonsi: switch descriptors to i32 vectors

This is a follow-up to the commit which adds texture fetches with offsets.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
10 years agoradeonsi: properly implement texture opcodes that take an offset
Marek Olšák [Wed, 25 Jun 2014 01:12:46 +0000 (03:12 +0200)]
radeonsi: properly implement texture opcodes that take an offset

Instead of using intr_name in lp_build_tgsi_action, this selects the names
with a switch statement in the emit function. This allows emitting
llvm.SI.sample for instructions without offsets and llvm.SI.image.sample.*.o
otherwise.

This depends on my LLVM changes.

When LLVM 3.5 is released, I'll switch all texture instructions to the new
intrinsics.

10 years agoradeonsi: fix texture fetches with derivatives for 1DArray and 3D textures
Marek Olšák [Wed, 2 Jul 2014 01:55:47 +0000 (03:55 +0200)]
radeonsi: fix texture fetches with derivatives for 1DArray and 3D textures

10 years agoradeonsi: fix samplerCubeShadow with bias
Marek Olšák [Fri, 4 Jul 2014 01:19:58 +0000 (03:19 +0200)]
radeonsi: fix samplerCubeShadow with bias

Pack the depth value before overwriting it with cube coordinates.

Cc: mesa-stable@lists.freedesktop.org
10 years agost/mesa: fix samplerCubeShadow with bias
Marek Olšák [Fri, 4 Jul 2014 01:19:58 +0000 (03:19 +0200)]
st/mesa: fix samplerCubeShadow with bias

It has 5 coordinates: (x,y,z,depth,lodbias)

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agomesa: fix crash in st/mesa after deleting a VAO
Marek Olšák [Thu, 10 Jul 2014 22:05:44 +0000 (00:05 +0200)]
mesa: fix crash in st/mesa after deleting a VAO

This happens when glGetMultisamplefv (or any other non-draw function) is
called, which doesn't invoke the VBO module to update _DrawArrays and
the pointer is invalid at that point.

However st/mesa still dereferences it to setup vertex buffers ==> crash.

Reviewed-by: Brian Paul <brianp@vmware.com>
10 years agoconfigure: Cygwin requires _XOPEN_SOURCE >= 700 to prototype strndup()
Jon TURNEY [Wed, 9 Jul 2014 14:09:32 +0000 (15:09 +0100)]
configure: Cygwin requires _XOPEN_SOURCE >= 700 to prototype strndup()

Adjust definition of _XOPEN_SOURCE appropriately for use of strndup() added with
commit da3a47d6

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
10 years agogallium/docs: minor clarification for TXQ instruction
Brian Paul [Thu, 10 Jul 2014 15:42:21 +0000 (09:42 -0600)]
gallium/docs: minor clarification for TXQ instruction

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agosoftpipe: fix sp_get_dims() for PIPE_BUFFER
Brian Paul [Thu, 10 Jul 2014 15:37:39 +0000 (09:37 -0600)]
softpipe: fix sp_get_dims() for PIPE_BUFFER

Before, we were checking the level against view->u.tex.last_level but
level is not valid for buffers.  Plus, the aliasing of the view->u.tex
view->u.buf members (a union) caused the level checking arithmetic to
be totally wrong.  The net effect is we always returned early for
PIPE_BUFFER size queries.

This fixes the piglit "textureSize 140 fs samplerBuffer" test.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
10 years agoglsl/glcpp: move macro declaration before code to fix MSVC build
Brian Paul [Wed, 9 Jul 2014 23:17:58 +0000 (17:17 -0600)]
glsl/glcpp: move macro declaration before code to fix MSVC build

Reviewed-by: Carl Worth <cworth@cworth.org>
10 years agonvc0/ir: add support for interpolating with non-default settings
Ilia Mirkin [Sun, 6 Jul 2014 03:05:35 +0000 (23:05 -0400)]
nvc0/ir: add support for interpolating with non-default settings

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agogallium: add INTERP_* opcodes to support interpolateAt*
Ilia Mirkin [Sat, 5 Jul 2014 23:52:20 +0000 (19:52 -0400)]
gallium: add INTERP_* opcodes to support interpolateAt*

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
10 years agor600g: remove unused base_vector_chan variable
Ilia Mirkin [Thu, 10 Jul 2014 01:21:11 +0000 (21:21 -0400)]
r600g: remove unused base_vector_chan variable

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
10 years agoi965: forward-declare struct brw_context in brw_reg.h
Ilia Mirkin [Thu, 10 Jul 2014 01:17:32 +0000 (21:17 -0400)]
i965: forward-declare struct brw_context in brw_reg.h

Commit 54e91e7420 introduced a function declaration that uses
brw_context. While brw_context tends to get included in most files, it
is not when compiling intel_asm_annotation.c resulting in the following
warning:

In file included from brw_shader.h:25:0,
                 from brw_cfg.h:32,
                 from intel_asm_annotation.c:24:
brw_reg.h:122:39: warning: 'struct brw_context' declared inside
parameter list [enabled by default]
brw_reg.h:122:39: warning: its scope is only this definition or
declaration, which is probably not what you want [enabled by default]

Add a forward-declaration for struct brw_context to avoid the issue.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agonvc0/ir: fix encoding of offset register into interpolation instruction
Ilia Mirkin [Sat, 5 Jul 2014 23:30:50 +0000 (19:30 -0400)]
nvc0/ir: fix encoding of offset register into interpolation instruction

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agonvc0/ir: account for indirect textures on fermi for txd
Ilia Mirkin [Wed, 9 Jul 2014 04:42:52 +0000 (00:42 -0400)]
nvc0/ir: account for indirect textures on fermi for txd

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agonvc0/ir: unset s/r indirect sources before moving everything
Ilia Mirkin [Sun, 6 Jul 2014 07:06:55 +0000 (03:06 -0400)]
nvc0/ir: unset s/r indirect sources before moving everything

With the current logic, it's very likely that s/r indirect sources are
right after the "regular" ones. Unset them before moving the texture
arguments over rather than after, as one of those arguments would
likely have assumed one of the s/r positions.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agotargets/dri-swrast: Convert to static/shared pipe-driver
Emil Velikov [Sat, 21 Jun 2014 11:50:10 +0000 (12:50 +0100)]
targets/dri-swrast: Convert to static/shared pipe-driver

Convert the final dri target to the single DRI (megadriver) library.
Cleanup all the automake leftovers from the conversion stage and
update the scons build.

v2: Link in llvmpipe, when applicable.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agost/dri: merge dri/drm and dri/sw backends
Emil Velikov [Tue, 17 Jun 2014 13:34:52 +0000 (14:34 +0100)]
st/dri: merge dri/drm and dri/sw backends

Move the driver_name to dri2/drisw and remove all the SPLIT_TAGETS
mayhem. In the next step we'll unify the dri and dri-swrast targets,
completing the gallium DRI megadriver.

v2: Remove leftover st/dri Makefiles from CONFIG_FILES. Spotted by
Thomas Helland.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri-swrast: convert to gallium megadrivers :)
Emil Velikov [Sat, 21 Jun 2014 12:48:52 +0000 (13:48 +0100)]
targets/dri-swrast: convert to gallium megadrivers :)

Export the approapriate new symbol, and keep backwards compat
via the megadriver_stub helper library.

Our next step would be to unify dri/drm and dri/sw, leading to
a complete megadrivers solution, and having a single library
that provides dri across all targets.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agoscons: build and use a single dri_common library
Emil Velikov [Tue, 17 Jun 2014 00:04:51 +0000 (01:04 +0100)]
scons: build and use a single dri_common library

Rather than building two identical ones for dri-vmwgfx and dri-swrast
build a single library, and drop some duplication in the build.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agost/dri/drm: remove __driDriverExtensions and driDriverAPI
Emil Velikov [Fri, 27 Jun 2014 18:30:38 +0000 (19:30 +0100)]
st/dri/drm: remove __driDriverExtensions and driDriverAPI

... and use libmegadriver_stub as their provider.
Teach scons how to build the library archive and use it.

v2: scons: fix build on a drm-less system.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: cleanup conversion leftovers
Emil Velikov [Mon, 16 Jun 2014 23:16:46 +0000 (00:16 +0100)]
targets/dri: cleanup conversion leftovers

With all the users converted to __driGetExtensions_* we can
have only a single inclusion of the required header + define.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: update scons build to handle __driDriverGetExtensions_vmwgfx
Emil Velikov [Mon, 16 Jun 2014 23:14:51 +0000 (00:14 +0100)]
targets/dri: update scons build to handle __driDriverGetExtensions_vmwgfx

Cc: Jose Fonseca <jfonseca@vmware.com>
Cc: Brian Paul <brianp@vmware.com>
Cc: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_vmwgfx
Emil Velikov [Mon, 16 Jun 2014 23:05:30 +0000 (00:05 +0100)]
targets/dri: Add __driDriverGetExtensions_vmwgfx

Identical to previous commits - will bring us a step closer
to megadrivers.

Cc: Jose Fonseca <jfonseca@vmware.com>
Cc: Brian Paul <brianp@vmware.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_i965 symbol
Emil Velikov [Mon, 16 Jun 2014 22:52:52 +0000 (23:52 +0100)]
targets/dri: Add __driDriverGetExtensions_i965 symbol

Identical to previous commits - will bring us a step closer
to megadrivers.

Cc: Chia-I Wu <olv@lunarg.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_i915 symbol
Emil Velikov [Mon, 16 Jun 2014 22:51:12 +0000 (23:51 +0100)]
targets/dri: Add __driDriverGetExtensions_i915 symbol

Identical to previous commits - will bring us a step closer
to megadrivers.

Cc: Stephane Marchesin <stephane.marchesin@gmail.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_freedreno symbol
Emil Velikov [Mon, 16 Jun 2014 22:47:03 +0000 (23:47 +0100)]
targets/dri: Add __driDriverGetExtensions_freedreno symbol

Identical to previous two commits - will bring us a step closer
to megadrivers.

Cc: Rob Clark <robclark@freedesktop.org>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_(r300|r600|radeonsi) symbols
Emil Velikov [Mon, 16 Jun 2014 22:44:22 +0000 (23:44 +0100)]
targets/dri: Add __driDriverGetExtensions_(r300|r600|radeonsi) symbols

The symbol is introduced by the mesa megadrivers, and
adding gallium support for it will allow us to merge
st/dri/drm and st/dri/sw. Resulting in a single dri library
across all of gallium.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotargets/dri: Add __driDriverGetExtensions_nouveau symbol
Emil Velikov [Mon, 16 Jun 2014 22:30:44 +0000 (23:30 +0100)]
targets/dri: Add __driDriverGetExtensions_nouveau symbol

The symbol is introduced by the mesa megadrivers, and adding
gallium support for it will allow us to merge st/dri/drm and
st/dri/sw. Resulting in a single dri library across gallium.

v2: Rebase on top of gallium dri3.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
10 years agotgsi: add interpolation location modifier support to text parser
Ilia Mirkin [Sat, 5 Jul 2014 03:27:11 +0000 (23:27 -0400)]
tgsi: add interpolation location modifier support to text parser

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agomesa/st: add per sample shading state to fp key and set interpolation
Ilia Mirkin [Sat, 5 Jul 2014 03:01:39 +0000 (23:01 -0400)]
mesa/st: add per sample shading state to fp key and set interpolation

This enables a gallium driver not to care about the semantics of
ARB_sample_shading vs ARB_gpu_shader5 sample attributes. When
ARB_sample_shading-style sample shading is enabled, all of the fp inputs
are marked for interpolation at the sample location.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agogallium: switch dedicated centroid field to interpolation location
Ilia Mirkin [Wed, 2 Jul 2014 00:54:01 +0000 (20:54 -0400)]
gallium: switch dedicated centroid field to interpolation location

The new location field can be either center, centroid, or sample, which
indicates the location that the shader should interpolate at.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
10 years agometa: Call glObjectLabel before linking.
Kenneth Graunke [Tue, 1 Jul 2014 00:55:32 +0000 (17:55 -0700)]
meta: Call glObjectLabel before linking.

i965 precompiles shaders at link time, and prints a disassembly if
INTEL_DEBUG=vs,gs,fs, including the shader name.  However, blit shaders
were showing up as "unnamed" since we hadn't set a name prior to
linking.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoff_fragment_shader: Access glsl_types directly.
Kenneth Graunke [Thu, 3 Jul 2014 21:47:14 +0000 (14:47 -0700)]
ff_fragment_shader: Access glsl_types directly.

Originally, we didn't have direct accessors for all of the GLSL types,
so the only way to get at them was to use the symbol table.  Now, we
can just get at them directly, which is simpler and faster.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
10 years agost/mesa: add PIPE_FORMAT_R10G10B10A2_UNORM to format_map table
Brian Paul [Wed, 9 Jul 2014 18:50:21 +0000 (12:50 -0600)]
st/mesa: add PIPE_FORMAT_R10G10B10A2_UNORM to format_map table

as a candidate for the GL_RGB10_A2 internal texture format.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agost/mesa: add some missing MESA/PIPE_FORMAT_R10G10B10A2_UNORM switch cases
Brian Paul [Wed, 9 Jul 2014 18:48:51 +0000 (12:48 -0600)]
st/mesa: add some missing MESA/PIPE_FORMAT_R10G10B10A2_UNORM switch cases

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agoglsl/glcpp: Don't choke on an empty pragma
Carl Worth [Fri, 13 Jun 2014 22:53:39 +0000 (15:53 -0700)]
glsl/glcpp: Don't choke on an empty pragma

The lexer was insisting that there be at least one character after "#pragma"
and before the end of the line. This caused an error for a line consisting
only of "#pragma" which volates at least the following sentence from the GLSL
ES Specification 3.00.4:

The scope as well as the effect of the optimize and debug pragmas is
implementation-dependent except that their use must not generate an
error. [Page 12 (Page 28 of PDF)]

and likely the following sentence from that specification and also in
GLSLangSpec 4.30.6:

If an implementation does not recognize the tokens following #pragma,
then it will ignore that pragma.

Add a "make check" test to ensure no future regressions.

This change fixes at least part of the following Khronos GLES3 CTS test:

preprocessor.pragmas.pragma_vertex

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoglsl/glcpp: Promote "extra token at end of directive" from warning to error
Carl Worth [Fri, 13 Jun 2014 22:40:42 +0000 (15:40 -0700)]
glsl/glcpp: Promote "extra token at end of directive" from warning to error

We've always warned about this case, but a recent confromance test expects
this to be an error that causes compilation to fail. Make it so.

Also add a "make check" test to ensure these errors are generated.

This fixes the following Khronos GLES3 conformance tests:

invalid_conditionals.tokens_after_ifdef_vertex
invalid_conditionals.tokens_after_ifdef_fragment
invalid_conditionals.tokens_after_ifndef_vertex
invalid_conditionals.tokens_after_ifndef_fragment

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoglsl/glcpp: Once again report undefined macro name in error message.
Carl Worth [Fri, 13 Jun 2014 22:16:05 +0000 (15:16 -0700)]
glsl/glcpp: Once again report undefined macro name in error message.

While writing the previous commit message, I just felt bad documenting the
shortcoming of the change, (that undefined macro names would not be reported
in error messages).

Fix this by preserving the first-encounterd undefined macro name and reporting
that in any resulting error message.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoglsl/glcpp: Add short-circuiting for || and && in #if/#elif for OpenGL ES.
Carl Worth [Fri, 13 Jun 2014 21:54:46 +0000 (14:54 -0700)]
glsl/glcpp: Add short-circuiting for || and && in #if/#elif for OpenGL ES.

The GLSL ES Specification 3.00.4 says:

#if, #ifdef, #ifndef, #else, #elif, and #endif are defined to operate
        as for C++ except for the following:
...
• Undefined identifiers not consumed by the defined operator do not
  default to '0'. Use of such identifiers causes an error.

[Page 11 (page 127 of the PDF file)]

as well as:

The semantics of applying operators in the preprocessor match those
standard in the C++ preprocessor with the following exceptions:

• The 2nd operand in a logical and ('&&') operation is evaluated if
  and only if the 1st operand evaluates to non-zero.

• The 2nd operand in a logical or ('||') operation is evaluated if
  and only if the 1st operand evaluates to zero.

If an operand is not evaluated, the presence of undefined identifiers
in the operand will not cause an error.

(Note that neither of these deviations from C++ preprocessor behavior apply to
non-ES GLSL, at least as of specfication version 4.30.6).

The first portion of this, (generating an error for an undefined macro in an
(short-circuiting to squelch errors), was not implemented previously, but is
implemented in this commit.

A test is added for "make check" to ensure this behavior.

Note: The change as implemented does make the error message a bit less
precise, (it just states that an undefined macro was encountered, but not the
name of the macro).

This commit fixes the following Khronos GLES3 conformance test:

undefined_identifiers.valid_undefined_identifier_1_vertex
undefined_identifiers.valid_undefined_identifier_1_fragment
undefined_identifiers.valid_undefined_identifier_2_vertex
undefined_identifiers.valid_undefined_identifier_2_fragment

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoglsl/glcpp: Fix glcpp to properly lex entire "preprocessing numbers"
Carl Worth [Thu, 12 Jun 2014 21:56:47 +0000 (14:56 -0700)]
glsl/glcpp: Fix glcpp to properly lex entire "preprocessing numbers"

The preprocessor defines a notions of a "preprocessing number" that
starts with either a digit or a decimal point, and continues with zero
or more of digits, decimal points, identifier characters, or the sign
symbols, ('-' and '+').

Prior to this change, preprocessing numbers were lexed as some
combination of OTHER and IDENTIFIER tokens. This had the problem of
causing undesired macro expansion in some cases.

We add tests to ensure that the undesired macro expansion does not
happen in cases such as:

#define e +1
#define xyz -2

int n = 1e;
int p = 1xyz;

In either case these macro definitions have no effect after this
change, so that the numeric literals, (whether valid or not), will be
passed on as-is from the preprocessor to the compiler proper.

This fixes the following Khronos GLES3 CTS tests:

preprocessor.basic.correct_phases_vertex
preprocessor.basic.correct_phases_fragment

v2. Thanks to Anuj Phogat for improving the original regular expression,
(which accepted a '+' or '-', where these are only allowed after one of
[eEpP]. I also expanded the test to exercise this.

v3. Also fixed regular expression to require at least one digit at the
beginning (after an optional period). Otherwise, a string such as ".xyz" was
getting sucked up as a preprocessing number, (where obviously this should be a
field access). Again, I expanded the test to exercise this.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
10 years agoglsl/glcpp: Fix glcpp to catch garbage after #if 1 ... #else
Carl Worth [Thu, 12 Jun 2014 17:39:39 +0000 (10:39 -0700)]
glsl/glcpp: Fix glcpp to catch garbage after #if 1 ... #else

Previously, a line such as:

#else garbage

would flag an error if it followed "#if 0", but not if it followed "#if 1".

We fix this by setting a new bit of state (lexing_else) that allows the lexer
to defer switching to the <SKIP> start state until after the NEWLINE following
the #else directive.

A new test case is added for:

#if 1
#else garbage
#endif

which was untested before, (and did not generate the desired error).

This fixes the following Khronos GLES3 CTS tests:

tokens_after_else_vertex
        tokens_after_else_fragment

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
10 years agoglsl/glcpp: Fixup glcpp tests for redefining a macro with whitespace changes.
Carl Worth [Thu, 12 Jun 2014 01:02:54 +0000 (18:02 -0700)]
glsl/glcpp: Fixup glcpp tests for redefining a macro with whitespace changes.

Previously, the test suite was expecting the compiler to allow a redefintion
of a macro with whitespace added, but gcc is more strict and allows only for
changes in the amounts of whitespace, (but insists that whitespace exist or
not in exactly the same places).

See: https://gcc.gnu.org/onlinedocs/cpp/Undefining-and-Redefining-Macros.html:

 These definitions are effectively the same:

      #define FOUR (2 + 2)
      #define FOUR         (2    +    2)
      #define FOUR (2 /* two */ + 2)

 but these are not:

      #define FOUR (2 + 2)
      #define FOUR ( 2+2 )
      #define FOUR (2 * 2)
      #define FOUR(score,and,seven,years,ago) (2 + 2)

This change adjusts the existing "redefine-macro-legitimate" test to work with
the more strict understanding, and adds a new "redefine-whitespace" test to
verify that changes in the position of whitespace are flagged as errors.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
10 years agoglsl/glcpp: Fix preprocessor error condition for macro redefinition
Anuj Phogat [Fri, 6 Jun 2014 23:56:59 +0000 (16:56 -0700)]
glsl/glcpp: Fix preprocessor error condition for macro redefinition

This patch specifically fixes redefinition condition for white space
changes. #define and #undef functionality in GLSL follows the standard
for C++ preprocessors for macro definitions.

From https://gcc.gnu.org/onlinedocs/cpp/Undefining-and-Redefining-Macros.html:

These definitions are effectively the same:

     #define FOUR (2 + 2)
     #define FOUR         (2    +    2)
     #define FOUR (2 /* two */ + 2)

but these are not:

     #define FOUR (2 + 2)
     #define FOUR ( 2+2 )
     #define FOUR (2 * 2)
     #define FOUR(score,and,seven,years,ago) (2 + 2)

Fixes Khronos GLES3 CTS tests;
invalid_object_whitespace_vertex
invalid_object_whitespace_fragment

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
10 years agoglsl/glcpp: Add test to ensure compiler won't allow #undef for some builtins
Carl Worth [Thu, 12 Jun 2014 00:20:40 +0000 (17:20 -0700)]
glsl/glcpp: Add test to ensure compiler won't allow #undef for some builtins

Currently verifying that an #undef of __FILE__, __LINE__, or __VERSION__ will
generate an error.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
10 years agoglsl/glcpp: Do not allow undefining the built-in macros
Anuj Phogat [Fri, 6 Jun 2014 23:56:58 +0000 (16:56 -0700)]
glsl/glcpp: Do not allow undefining the built-in macros

Fixes piglit tests in spec/glsl-es-3.00/compile:
undef-__FILE__.vert
undef-GL_ES.vert
undef-__LINE__.vert
undef-__VERSION__.vert

Also, fixes Khronos GLES3 CTS tests:
undefine_invalid_object_1_vertex
undefine_invalid_object_1_fragment
undefine_invalid_object_2_vertex
undefine_invalid_object_2_fragment

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
10 years agogallium/u_blitter: fix some shader memory leaks
Brian Paul [Wed, 9 Jul 2014 15:38:37 +0000 (09:38 -0600)]
gallium/u_blitter: fix some shader memory leaks

The _msaa shaders weren't getting freed.
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agotgsi: properly parse indirect dimension references (e.g. for UBOs)
Ilia Mirkin [Wed, 9 Jul 2014 06:27:36 +0000 (02:27 -0400)]
tgsi: properly parse indirect dimension references (e.g. for UBOs)

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Brian Paul <brianp@vmware.com>
10 years agoradeonsi: fix order of r600_need_dma_space and r600_context_bo_reloc
Christian König [Wed, 9 Jul 2014 12:38:06 +0000 (14:38 +0200)]
radeonsi: fix order of r600_need_dma_space and r600_context_bo_reloc

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agost/mesa: fix geometry shader memory leak
Brian Paul [Tue, 8 Jul 2014 22:24:53 +0000 (16:24 -0600)]
st/mesa: fix geometry shader memory leak

Spotted by Charmaine Lee.
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
10 years agomesa: fix geometry shader memory leaks
Brian Paul [Tue, 8 Jul 2014 22:23:38 +0000 (16:23 -0600)]
mesa: fix geometry shader memory leaks

Spotted by Charmaine Lee.
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agost/mesa: minor simplification of some state atom assignments
Brian Paul [Thu, 3 Jul 2014 18:02:16 +0000 (12:02 -0600)]
st/mesa: minor simplification of some state atom assignments

10 years agost/mesa: minor fix-up in st_GetSamplePosition()
Brian Paul [Thu, 3 Jul 2014 18:01:09 +0000 (12:01 -0600)]
st/mesa: minor fix-up in st_GetSamplePosition()

If the driver doesn't implement get_sample_position(), let's return
some non-garbage values.

10 years agomesa: use float to silence MSVC warning in _mesa_GetMultisamplefv()
Brian Paul [Thu, 3 Jul 2014 18:00:36 +0000 (12:00 -0600)]
mesa: use float to silence MSVC warning in _mesa_GetMultisamplefv()

10 years agonvc0: allocate more space before a counter is configured
Samuel Pitoiset [Fri, 4 Jul 2014 14:34:59 +0000 (16:34 +0200)]
nvc0: allocate more space before a counter is configured

On nvc0, a counter can have up to 6 sources instead of only one
for nve4+. This fixes a crash when a counter uses more than
one source.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agonv50/ir: use unordered_set instead of list to keep track of var uses
Tobias Klausmann [Tue, 8 Jul 2014 02:19:13 +0000 (04:19 +0200)]
nv50/ir: use unordered_set instead of list to keep track of var uses

The set of variable uses does not need to be ordered in any way, and
removing/adding elements is a fairly common operation in various
optimization passes.

This shortens runtime of piglit test fp-long-alu to ~22s from ~4h

Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agoi965/disasm: Fix disassembly of the any16h/all16h predicates.
Kenneth Graunke [Sun, 6 Jul 2014 05:21:40 +0000 (22:21 -0700)]
i965/disasm: Fix disassembly of the any16h/all16h predicates.

BRW_PREDICATE_ALIGN1_ANY16H was incorrectly being disassembled as
"all16h", and ALL16H would probably print as "(null)".

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoglsl: Fix the foreach_in_list_reverse macro.
Kenneth Graunke [Sun, 6 Jul 2014 05:04:45 +0000 (22:04 -0700)]
glsl: Fix the foreach_in_list_reverse macro.

We clearly don't want to start at the head and walk backwards; we want
to start at the last real element before the tail sentinel.  If the list
is empty, tail_pred will be the head sentinel, and we'll stop.

Nothing uses this function, so I guess nobody noticed it was broken.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoradeonsi: mark MSAA config state as dirty at the beginning of CS
Marek Olšák [Tue, 8 Jul 2014 00:02:40 +0000 (02:02 +0200)]
radeonsi: mark MSAA config state as dirty at the beginning of CS

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

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
10 years agogallium: fix u_default_transfer_inline_write for textures
Marek Olšák [Thu, 19 Jun 2014 21:34:27 +0000 (23:34 +0200)]
gallium: fix u_default_transfer_inline_write for textures

This doesn't fix any known issue. In fact, radeon drivers ignore all
the discard flags for textures and implicitly do "discard range"
for any write transfer.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
10 years agoi965: Remove artificial dependency between math instructions.
Matt Turner [Mon, 7 Jul 2014 04:31:28 +0000 (21:31 -0700)]
i965: Remove artificial dependency between math instructions.

... on Gen6+. I'm not actually sure which class Gen6 fits into.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Track dependencies in instruction scheduling per reg offset.
Matt Turner [Wed, 9 Oct 2013 05:54:46 +0000 (22:54 -0700)]
i965/fs: Track dependencies in instruction scheduling per reg offset.

Previously instruction scheduling tracked dependencies on a per-register
basis. This meant that there was an artificial dependency between
interpolation instructions writing into the same virtual register.

Instruction scheduling would insert a number of instructions between the
two instructions in this example, when they are actually independent.

   linterp vgrf8+0.0:F, hw_reg2:F, hw_reg3:F, hw_reg6:F
   linterp vgrf8+1.0:F, hw_reg2:F, hw_reg3:F, hw_reg6+16:F

This lead to cases where the first texture coordinate is interpolated at
the beginning of the shader, but the second is done immediately before
the texture operation that uses it as a source.

After this change, the artificial dependency is removed and the
interpolation instructions are scheduled together.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoconfigure: Don't special case Cygwin to use gnu99, define _XOPEN_SOURCE instead
Jon TURNEY [Mon, 2 Jun 2014 16:40:38 +0000 (17:40 +0100)]
configure: Don't special case Cygwin to use gnu99, define _XOPEN_SOURCE instead

Revert "build: Build on Cygwin with gnu99 instead of c99." and define
_XOPEN_SOURCE appropriately.

This reverts commit 53e36d333c9b619c1a5fe9a8d2d08665654b0234.

Since Cygwin 1.7.18 (April 2013), it's headers correctly prototype strtoll()
when using -std=c99, and correctly prototype strdup() when _XOPEN_SOURCE is
defined appropriately, so this workaround is no longer needed.

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Cc: Vinson Lee <vlee@freedesktop.org>
10 years agoilo: fix fence reference counting
Chia-I Wu [Tue, 8 Jul 2014 06:03:17 +0000 (14:03 +0800)]
ilo: fix fence reference counting

The old code was complicated, and was wrong when *ptr is NULL.

10 years agoi965: Extend compute-to-mrf pass to understand blocks of MOVs
Kristian Høgsberg [Tue, 8 Jul 2014 06:32:35 +0000 (23:32 -0700)]
i965: Extend compute-to-mrf pass to understand blocks of MOVs

The current compute-to-mrf pass doesn't handle blocks of MOVs.  Shaders
that end with a texture fetch follwed by an fb write are left like this:

0x00000000: pln(8)          g6<1>F          g4<0,1,0>F      g2<8,8,1>F      { align1 WE_normal 1Q compacted };
0x00000008: pln(8)          g7<1>F          g4.4<0,1,0>F    g2<8,8,1>F      { align1 WE_normal 1Q compacted };
0x00000010: send(8)         g2<1>UW         g6<8,8,1>F
                            sampler (1, 0, 0, 1) mlen 2 rlen 4              { align1 WE_normal 1Q };
0x00000020: mov(8)          g113<1>F        g2<8,8,1>F                      { align1 WE_normal 1Q compacted };
0x00000028: mov(8)          g114<1>F        g3<8,8,1>F                      { align1 WE_normal 1Q compacted };
0x00000030: mov(8)          g115<1>F        g4<8,8,1>F                      { align1 WE_normal 1Q compacted };
0x00000038: mov(8)          g116<1>F        g5<8,8,1>F                      { align1 WE_normal 1Q compacted };
0x00000040: sendc(8)        null            g113<8,8,1>F
                            render ( RT write, 0, 4, 12) mlen 4 rlen 0      { align1 WE_normal 1Q EOT };

This patch lets compute-to-mrf recognize blocks of MOVs and match them to
instructions (typically SEND) that writes multiple registers.  With this,
the above shader becomes:

0x00000000: pln(8)          g6<1>F          g4<0,1,0>F      g2<8,8,1>F      { align1 WE_normal 1Q compacted };
0x00000008: pln(8)          g7<1>F          g4.4<0,1,0>F    g2<8,8,1>F      { align1 WE_normal 1Q compacted };
0x00000010: send(8)         g113<1>UW       g6<8,8,1>F
                            sampler (1, 0, 0, 1) mlen 2 rlen 4              { align1 WE_normal 1Q };
0x00000020: sendc(8)        null            g113<8,8,1>F
                            render ( RT write, 0, 20, 12) mlen 4 rlen 0     { align1 WE_normal 1Q EOT };

which is the bulk of the shader db results:

total instructions in shared programs: 987040 -> 986720 (-0.03%)
instructions in affected programs:     844 -> 524 (-37.91%)
GAINED:                                0
LOST:                                  0

The optimization also applies to MRT shaders that write the same
color value to multiple RTs, in which case we can eliminate four MOVs in
a similar fashion.  See fbo-drawbuffers2-blend in piglit for an example.

No measurable performance impact.  No piglit regressions.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
10 years agonvc0/ir: fill offset in properly for TXD
Ilia Mirkin [Sat, 5 Jul 2014 05:24:38 +0000 (01:24 -0400)]
nvc0/ir: fill offset in properly for TXD

Apparently TXD wants its offset differently than TEX, accepting it in
the upper bits of the layer index. Unclear what happens when this is
combined with indirect sampler indexing.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
10 years agonvc0/ir: use manual TXD when offsets are involved
Ilia Mirkin [Sat, 5 Jul 2014 04:52:15 +0000 (00:52 -0400)]
nvc0/ir: use manual TXD when offsets are involved

Something about how we're implementing offsets for TXD is wrong, just
flip to the generic quadop-based implementation in that case.

This is the minimal fix appropriate for backporting.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: <mesa-stable@lists.freedesktop.org>
10 years agonvc0/ir: do quadops on the right texture coordinates for TXD
Ilia Mirkin [Sat, 5 Jul 2014 04:30:45 +0000 (00:30 -0400)]
nvc0/ir: do quadops on the right texture coordinates for TXD

handleTEX moves the layer as the first argument. This makes sure that
the quadops deal with the texture coordinates.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: <mesa-stable@lists.freedesktop.org>
10 years agonv50/ir: ignore bias for samplerCubeShadow on nv50
Ilia Mirkin [Fri, 4 Jul 2014 22:38:28 +0000 (18:38 -0400)]
nv50/ir: ignore bias for samplerCubeShadow on nv50

Unfortunately there's no good way to do this on the nv50 shader isa.
Dropping the bias seems preferable to doing the compare post-filtering.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: <mesa-stable@lists.freedesktop.org>
10 years agonv50/ir: retrieve shadow compare from first arg
Ilia Mirkin [Fri, 4 Jul 2014 21:09:43 +0000 (17:09 -0400)]
nv50/ir: retrieve shadow compare from first arg

This can only happen with texture(samplerCubeShadow, bias), where the
compare will be in the first argument.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: <mesa-stable@lists.freedesktop.org>
10 years agodocs: Import 10.2.3 release notes
Carl Worth [Mon, 7 Jul 2014 23:28:37 +0000 (16:28 -0700)]
docs: Import 10.2.3 release notes

And add a news item.

10 years agoi965/fs: Disable unlit_centroid_workaround on Haswell.
Matt Turner [Sun, 29 Jun 2014 02:18:44 +0000 (19:18 -0700)]
i965/fs: Disable unlit_centroid_workaround on Haswell.

Although the HSW PRM shows it, the BSpec lists this workaround as being
for Ivybridge only.

total instructions in shared programs: 1994951 -> 1993675 (-0.06%)
instructions in affected programs:     27325 -> 26049 (-4.67%)

10 years agoi965/vec4: Perform CSE on CMP(N) instructions.
Matt Turner [Wed, 11 Jun 2014 20:49:34 +0000 (13:49 -0700)]
i965/vec4: Perform CSE on CMP(N) instructions.

Port of commit b16b3c87 to the vec4 code.

No shader-db improvements, but might as well. The fs backend saw an
improvement because it's scalar and multiple identical CMP instructions
were generated by the SEL peepholes.

10 years agoi965/vec4: Don't emit null MOVs in CSE.
Matt Turner [Wed, 11 Jun 2014 22:24:52 +0000 (15:24 -0700)]
i965/vec4: Don't emit null MOVs in CSE.

Port of commit 219b43c6 to the vec4 code.

10 years agoi965/vec4: Improve CSE performance by expiring some available expressions.
Matt Turner [Wed, 11 Jun 2014 20:43:15 +0000 (13:43 -0700)]
i965/vec4: Improve CSE performance by expiring some available expressions.

Port of commit 5daf867f to the vec4 code.

10 years agoi965/vec4: Add basic common subexpression elimination.
Kenneth Graunke [Wed, 6 Mar 2013 18:48:55 +0000 (10:48 -0800)]
i965/vec4: Add basic common subexpression elimination.

[mattst88]: Modified to perform CSE on instructions with
            the same writemask. Offered no improvement before.

total instructions in shared programs: 1995633 -> 1995185 (-0.02%)
instructions in affected programs:     14410 -> 13962 (-3.11%)

Reviewed-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>