mesa.git
10 years agoegl-wayland: Add support for RGB565 pixel format for Wayland clients
Singh, Satyeshwar [Wed, 16 Oct 2013 01:10:12 +0000 (01:10 +0000)]
egl-wayland: Add support for RGB565 pixel format for Wayland clients

With this patch Wayland clients can now ask EGL for RGB 565 format buffers
and attach them to a Wayland compositor.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
10 years agoscons: Fix build when rtti is disabled
Alexander von Gluck IV [Tue, 15 Oct 2013 17:08:59 +0000 (12:08 -0500)]
scons: Fix build when rtti is disabled

* The rtti fix actually dug up a bug in the scons build scripts.
* Autotools took the LLVM cpp and cxx flags, while scons only took
  the cpp flags.
* This grabs the cxx flags and applies them where needed. We may
  want to make the same change for the llvm cpp flags in scons.
* The only linux platform I can find with LLVM no-rtti is Ubuntu.
* Fixes bug #70471

Tested-by: Vinson Lee <vlee@freedesktop.org>
10 years agollvmpipe: Advertise PIPE_CAP_DEPTH_CLIP_DISABLE.
José Fonseca [Wed, 16 Oct 2013 01:08:26 +0000 (18:08 -0700)]
llvmpipe: Advertise PIPE_CAP_DEPTH_CLIP_DISABLE.

Actually implemented by draw module.

Tested piglit ARB_depth_clamp tests, which pass 100%.

Trivial.

10 years agodraw: make vs_slot signed.
José Fonseca [Thu, 12 Sep 2013 14:15:24 +0000 (15:15 +0100)]
draw: make vs_slot signed.

Otherwise (vs_slot < 0) will never be true.

Trivial.

10 years agoconfigure.ac: drop obsolete variable HAVE_COMMON_DRI
Emil Velikov [Fri, 11 Oct 2013 23:19:55 +0000 (00:19 +0100)]
configure.ac: drop obsolete variable HAVE_COMMON_DRI

The original intent of the variable was to prevent adding
libdrm dependency for non drm drivers (swrast). This is
already handled with __NOT_HAVE_DRM_H, and with the recent
merge of the dri_util and drisw_util code this variable has
started causing build issues.

Eg. the following will fail
$ ./autogen.sh --with-dri-drivers=swrast --with-gallium-drivers=
$ make

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Andreas Boll <andreas.boll.dev@gmail.com>
10 years agoswrast: add correct include for out-of-tree builds
Emil Velikov [Mon, 14 Oct 2013 16:14:41 +0000 (17:14 +0100)]
swrast: add correct include for out-of-tree builds

The xmlpool/options.h file was not accessible when building
out-of-tree leading to failure.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70378
Reported-by: Fabio Pedretti <fabio.ped@libero.it>
Tested-by: Fabio Pedretti <fabio.ped@libero.it>
Tested-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Andreas Boll <andreas.boll.dev@gmail.com>
10 years agomesa: fix transform feedback when a geometry shader is active.
Bryan Cain [Tue, 16 Apr 2013 20:56:28 +0000 (15:56 -0500)]
mesa: fix transform feedback when a geometry shader is active.

When a geometry shader is active, the transform feedback primitive
type ("mode") needs to be validated against the geometry shader output
primitive type, not the primitive type passed to the glDraw*()
function.

Fixes the following piglit tests:
- glsl-1.50-geometry-primitive-types GL_LINES
- glsl-1.50-geometry-primitive-types GL_LINES_ADJACENCY
- glsl-1.50-geometry-primitive-types GL_LINE_STRIP
- glsl-1.50-geometry-primitive-types GL_LINE_STRIP_ADJACENCY
- glsl-1.50-geometry-primitive-types GL_TRIANGLES
- glsl-1.50-geometry-primitive-types GL_TRIANGLES_ADJACENCY
- glsl-1.50-geometry-primitive-types GL_TRIANGLE_FAN

Exposes previously hidden failures in the following piglit tests:
- glsl-1.50-geometry-primitive-id-restart GL_LINES other
- glsl-1.50-geometry-primitive-id-restart GL_LINES_ADJACENCY other
- glsl-1.50-geometry-primitive-id-restart GL_LINE_LOOP ffs
- glsl-1.50-geometry-primitive-id-restart GL_LINE_LOOP other
- glsl-1.50-geometry-primitive-id-restart GL_LINE_STRIP other
- glsl-1.50-geometry-primitive-id-restart GL_LINE_STRIP_ADJACENCY other
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLES other
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLES_ADJACENCY other
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLE_FAN ffs
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLE_FAN other
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLE_STRIP other
- glsl-1.50-geometry-primitive-id-restart GL_TRIANGLE_STRIP_ADJACENCY other

(These failures were previously hidden due to a flaw in the test: it
doesn't check for GL errors.  I'll fix the test shortly).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/gs: Set the REORDER bit in 3DSTATE_GS.
Paul Berry [Wed, 28 Aug 2013 21:25:31 +0000 (14:25 -0700)]
i965/gs: Set the REORDER bit in 3DSTATE_GS.

Ivy Bridge's "reorder enable" bit gives us a binary choice for the
order in which vertices from triangle strips are delivered to the
geometry shader.  Neither choice follows the OpenGL spec, but setting
the bit is better, because it gets triangle orientation correct.

Haswell replaces the "reorder enable" bit with a new "reorder mode"
bit (which occupies the same location in the command packet).  This
bit gives us a different binary choice, which affects both triangle
strips and triangle strips with adjacency.  Setting the bit ("reorder
trailing") gives the proper order according to the OpenGL spec.

So in either case we want to set the bit.

On Ivy Bridge, fixes piglit test "triangle-strip-orientation".

On Haswell, fixes piglit tests "glsl-1.50-geometry-primitive-types
{GL_TRIANGLE_STRIP,GL_TRIANGLE_STRIP_ADJACENCY}" and
"glsl-1.50-geometry-tri-strip-ordering-with-prim-restart *".

v2: Rename the bit to "REORDER_TRAILING" for consistency with Haswell
docs.

Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoi965/fs: Remove bogus field prog_data->dispatch_width.
Paul Berry [Sun, 1 Sep 2013 12:49:17 +0000 (05:49 -0700)]
i965/fs: Remove bogus field prog_data->dispatch_width.

Despite the name, this field wasn't being set to the dispatch width at
all; it was always 8.  The only place it was used was that the
constant buffer read length was aligned to it, and as far as I can
tell from the docs, there is no need to align this value to the
dispatch width; aligning it to a multiple of 8 is sufficient.  So I've
just replaced it with a hardcoded 8.

v2: In gen6_wm_state, use brw->wm.base.push_const_size for consistency
with VS and GS state upload.

Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agoglsl: Add new GLSL 1.50 constants.
Paul Berry [Fri, 26 Jul 2013 18:55:52 +0000 (11:55 -0700)]
glsl: Add new GLSL 1.50 constants.

This patch populates the following built-in GLSL 1.50 variables based
on constants stored in ctx->Const:

- gl_MaxVertexOutputComponents
- gl_MaxGeometryInputComponents
- gl_MaxGeometryOutputComponents
- gl_MaxFragmentInputComponents
- gl_MaxGeometryTextureImageUnits
- gl_MaxGeometryOutputVertices
- gl_MaxGeometryTotalOutputComponents
- gl_MaxGeometryUniformComponents
- gl_MaxGeometryVaryingComponents

On i965/gen7, fixes all Piglit tests in "spec/glsl-1.50/built-in
constants/*" except for gl_MaxCombinedTextureImageUnits and
gl_MaxGeometryUniformComponents.

Reviewed-by: Matt Turner <mattst88@gmail.com>
10 years agoi965: Move the common binding table offset code to brw_shader.cpp.
Eric Anholt [Thu, 3 Oct 2013 16:58:43 +0000 (09:58 -0700)]
i965: Move the common binding table offset code to brw_shader.cpp.

Now that both vec4 and fs are dynamically assigning offsets, a lot of the
code is the same.

v2: Avoid passing around the next offset through the class.  (Review by
    Paul)

Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965/vec4: Dynamically assign the VS/GS binding table offsets.
Eric Anholt [Thu, 3 Oct 2013 16:55:06 +0000 (09:55 -0700)]
i965/vec4: Dynamically assign the VS/GS binding table offsets.

Note that the dropped comment in brw_context.h is mostly (better written)
in brw_binding_table.c as well.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965/fs: Dynamically set up the WM binding table offsets.
Eric Anholt [Thu, 3 Oct 2013 01:53:04 +0000 (18:53 -0700)]
i965/fs: Dynamically set up the WM binding table offsets.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965: Make a brw_stage_prog_data for storing the SURF_INDEX information.
Eric Anholt [Wed, 2 Oct 2013 21:07:40 +0000 (14:07 -0700)]
i965: Make a brw_stage_prog_data for storing the SURF_INDEX information.

It would be nice to be able to pack our binding table so that programs
that use 1 render target don't upload an extra BRW_MAX_DRAW_BUFFERS - 1
binding table entries.  To do that, we need the compiled program to have
information on where its surfaces go.

v2: Rename size to size_bytes to be more explicit.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965: Always have the struct gl_program * in the backend visitor.
Eric Anholt [Thu, 3 Oct 2013 17:30:07 +0000 (10:30 -0700)]
i965: Always have the struct gl_program * in the backend visitor.

vec4 already had it, so put it in the FS, too.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965: Drop a couple of unused defines.
Eric Anholt [Thu, 3 Oct 2013 16:56:45 +0000 (09:56 -0700)]
i965: Drop a couple of unused defines.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agoi965: Remove dead arguments from prog_data_compare.
Eric Anholt [Wed, 2 Oct 2013 21:37:26 +0000 (14:37 -0700)]
i965: Remove dead arguments from prog_data_compare.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
10 years agobuild: remove forced -fno-rtti
Alexander von Gluck IV [Sat, 12 Oct 2013 17:12:31 +0000 (17:12 +0000)]
build: remove forced -fno-rtti

* As discussed on the mailing list,
  forced no-rtti breaks C++ public
  API's such as the Haiku C++ libGL.so
* -fno-rtti *can* be still set however
  instead of blindly forcing -fno-rtti,
  we can rely on the llvm-config
  --cppflags output.
  If the system llvm is built without
  rtti (default), the no-rtti flag will be
  present in llvm-config --cppflags
  (which we pick up on)
  If llvm is built with rtti
  (REQUIRES_RTTI=1), then -fno-rtti is
  removed from llvm-config --cppflags.
* We could selectively add / remove rtti
  from various components, however mixing
  rtti and non-rtti code is tricky and
  could introduce missing symbols.
* This needs impact tested.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
10 years agoconfigure.ac: Don't check for awk, grep, nm.
Matt Turner [Fri, 11 Oct 2013 04:00:08 +0000 (21:00 -0700)]
configure.ac: Don't check for awk, grep, nm.

Not used since d53901c6.

10 years agoconfigure.ac: Don't check for cross compiling.
Matt Turner [Fri, 11 Oct 2013 21:39:54 +0000 (14:39 -0700)]
configure.ac: Don't check for cross compiling.

Dead since c845140a.

10 years agoi965: Don't copy prop source mods into instructions that can't take them.
Matt Turner [Fri, 20 Sep 2013 02:48:22 +0000 (19:48 -0700)]
i965: Don't copy prop source mods into instructions that can't take them.

10 years agomesa: Add missing switch break in invalidate_framebuffer_storage()
Constantin Baranov [Sat, 12 Oct 2013 22:17:15 +0000 (01:17 +0300)]
mesa: Add missing switch break in invalidate_framebuffer_storage()

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70411
Cc: "9.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
10 years agost/vdpau: add format conversions for GetBitsYCbCr
Grigori Goronzy [Sun, 13 Oct 2013 16:08:45 +0000 (18:08 +0200)]
st/vdpau: add format conversions for GetBitsYCbCr

Add simple plain C routines for NV12<->YV12 and YUYV<->UYVY
conversions. The NV12->YV12 conversion is commonly used, for instance
by VLC.

Reviewed-by: Christian König <christian.koenig@amd.com>
10 years agoradeon: use staging for mapping linear textures
Grigori Goronzy [Sun, 13 Oct 2013 16:08:44 +0000 (18:08 +0200)]
radeon: use staging for mapping linear textures

Textures that likely reside in VRAM, are mapped for reading and
don't require direct mapping should be staged into GTT, to avoid bad
performance. This fixes readback performance of VDPAU surfaces.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
10 years agoradeon/uvd: use PIPE_BIND_LINEAR for video surfaces
Grigori Goronzy [Sun, 13 Oct 2013 16:08:43 +0000 (18:08 +0200)]
radeon/uvd: use PIPE_BIND_LINEAR for video surfaces

This new bind flag forces linear storage, but does not have other
side effects like R600_RESOURCE_FLAG_TRANSFER.

Reviewed-by: Christian König <christian.koenig@amd.com>
10 years agoradeonsi: Allow Sinking pass to move preloaded const/res/sampl
Vincent Lejeune [Sat, 5 Oct 2013 14:04:48 +0000 (16:04 +0200)]
radeonsi: Allow Sinking pass to move preloaded const/res/sampl

This fixes a crash in Unigine Heaven 3.0, and probably in some
others apps.

10 years agoradeonsi: pass alpha_ref value to PS in the user sgpr
Vadim Girlin [Sun, 13 Oct 2013 15:53:54 +0000 (19:53 +0400)]
radeonsi: pass alpha_ref value to PS in the user sgpr

Currently it's hardcoded in the shader, so every change requires
compilation of the shader variant, killing the performance
in Serious Sam 3 and probably other apps.

This patch passes alpha_ref in the user sgpr and removes it from
the shader key.

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
10 years agor600g: fix tgsi_op2_s with trans-only instructions
Vadim Girlin [Thu, 10 Oct 2013 04:09:37 +0000 (08:09 +0400)]
r600g: fix tgsi_op2_s with trans-only instructions

This fixes the issue when dst and src is the same reg and operation on one
channel overwrites the source for other channels, e.g.:

UMUL TEMP[2].xyz, TEMP[0].xyzz, TEMP[2].xxxx

In this example the result of the operation on channel x is written in
TEMP[2].x and then used as a second source operand for channels y and z
instead of original value in TEMP[2].x.

This patch stores the results in temp reg and moves them to
dst after performing operation on all channels.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=70327

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
10 years agoi965: Merge intel_context.h into brw_context.h.
Kenneth Graunke [Fri, 27 Sep 2013 23:11:36 +0000 (16:11 -0700)]
i965: Merge intel_context.h into brw_context.h.

v2: Keep the random 32-bit only version of memcpy, since Ian says I
    can't delete it without data proving it isn't useful.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Delete our copy of likely/unlikely macros.
Kenneth Graunke [Fri, 27 Sep 2013 22:32:20 +0000 (15:32 -0700)]
i965: Delete our copy of likely/unlikely macros.

brw_context.h includes imports.h which includes compiler.h which already
defines these.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agomesa: Move U_FIXED/S_FIXED macros from i965 to macros.h.
Kenneth Graunke [Mon, 8 Jul 2013 01:44:12 +0000 (18:44 -0700)]
mesa: Move U_FIXED/S_FIXED macros from i965 to macros.h.

These make it easy to convert a floating point value to a fixed point
numbers.  The second parameter is the number of bits used for the
fractional part of the number.

It looks like core Mesa has similar functions already, but none that
allows an arbitrary number of fractional bits.  The more generic version
is probably useful to everyone.

r600g apparently has an identical copy of the S_FIXED macro, but doesn't
include this file.  I'm not sure what to do about that, so I'm just
going to leave it for now.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agomesa: Move ROUND_DOWN_TO() macro from i915/i965 to macros.h.
Kenneth Graunke [Mon, 8 Jul 2013 01:38:38 +0000 (18:38 -0700)]
mesa: Move ROUND_DOWN_TO() macro from i915/i965 to macros.h.

This seems generally useful, so it may as well live in core Mesa.

In fact, the comment for ALIGN() in macros.h actually says to "see also"
ROUND_DOWN_TO, which...was in a driver somewhere.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move need_workaround_flush = true to intel_batchbuffer_init.
Kenneth Graunke [Fri, 27 Sep 2013 22:29:00 +0000 (15:29 -0700)]
i965: Move need_workaround_flush = true to intel_batchbuffer_init.

intel_batchbuffer_init() sets up initial batchbuffer state; it seems
like a reasonable place to initialize this flag.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move DriverFlag initialization to brw_init_state().
Kenneth Graunke [Fri, 27 Sep 2013 22:00:22 +0000 (15:00 -0700)]
i965: Move DriverFlag initialization to brw_init_state().

Configuring which dirty flags we want sounds like a job for
brw_init_state().

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Merge intelInitContext into brwCreateContext.
Kenneth Graunke [Fri, 27 Sep 2013 21:57:47 +0000 (14:57 -0700)]
i965: Merge intelInitContext into brwCreateContext.

The split here was completely arbitrary.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move viewport driver hook setup to brw_init_driver_functions.
Kenneth Graunke [Fri, 27 Sep 2013 21:52:06 +0000 (14:52 -0700)]
i965: Move viewport driver hook setup to brw_init_driver_functions.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Make brwInitFunctions take brw_context rather than intel_screen.
Kenneth Graunke [Fri, 27 Sep 2013 21:46:26 +0000 (14:46 -0700)]
i965: Make brwInitFunctions take brw_context rather than intel_screen.

It actually just wants generation checking, and brw->gen is the usual
way of doing that.  In the future, we'll also want to check brw->hw_ctx,
which isn't available from the screen.

While we're changing the function signature, convert from camel case to
our usual naming conventions.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Merge intelInitFunctions() and brwInitFunctions().
Kenneth Graunke [Fri, 27 Sep 2013 21:42:43 +0000 (14:42 -0700)]
i965: Merge intelInitFunctions() and brwInitFunctions().

They do exactly the same thing.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Merge intel_context.c into brw_context.c.
Kenneth Graunke [Fri, 27 Sep 2013 21:36:49 +0000 (14:36 -0700)]
i965: Merge intel_context.c into brw_context.c.

There's no point in having two files for context functions.  This patch
moves the code from intel_context.c into brw_context.c unmodified
(other than whitespace fixes).

Right now, this looks silly; future patches will merge functions and
tidy things up.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965: Move memset of TextureFormatSupported to brw_init_surface_formats.
Kenneth Graunke [Fri, 27 Sep 2013 18:34:09 +0000 (11:34 -0700)]
i965: Move memset of TextureFormatSupported to brw_init_surface_formats.

brw_init_surface_formats already sets entries in TextureFormatsSupported
to true; it may as well take care of initializing it to false too.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Remove has_aa_line_parameters.
Kenneth Graunke [Thu, 26 Sep 2013 19:10:48 +0000 (12:10 -0700)]
i965: Remove has_aa_line_parameters.

This flag is only used in one place, and is only set on one platform.
Just check for original Gen4 in the relevant function.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move state setup from brwCreateContext to brw_init_state().
Kenneth Graunke [Thu, 26 Sep 2013 19:06:32 +0000 (12:06 -0700)]
i965: Move state setup from brwCreateContext to brw_init_state().

This seems like a better place for it, and helps clean up
brwCreateContext (which is full of a lot of random stuff).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965: Remove the brw_context::emit_state_always flag.
Kenneth Graunke [Thu, 26 Sep 2013 19:03:41 +0000 (12:03 -0700)]
i965: Remove the brw_context::emit_state_always flag.

This was always set to false, and is only used for debugging.
To enable it, simply change the if (0) block and recompile.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move hardware feature flags to brw_device_info.
Kenneth Graunke [Thu, 26 Sep 2013 18:55:36 +0000 (11:55 -0700)]
i965: Move hardware feature flags to brw_device_info.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move device quirks to brw_device_info.
Kenneth Graunke [Thu, 26 Sep 2013 18:36:42 +0000 (11:36 -0700)]
i965: Move device quirks to brw_device_info.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move hardware limits to brw_device_info.
Kenneth Graunke [Thu, 26 Sep 2013 00:01:55 +0000 (17:01 -0700)]
i965: Move hardware limits to brw_device_info.

Since each kind of device has its own brw_device_info structure, we can
simply store the URB and thread limits there.  This eliminates all the
large if-ladders, and simplifies the context initialization code quite a
bit.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965: Replace some intel_screen fields with brw_device_info references.
Kenneth Graunke [Thu, 4 Jul 2013 19:35:22 +0000 (12:35 -0700)]
i965: Replace some intel_screen fields with brw_device_info references.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Delete the INTEL_SEPARATE_STENCIL override.
Kenneth Graunke [Thu, 4 Jul 2013 19:28:59 +0000 (12:28 -0700)]
i965: Delete the INTEL_SEPARATE_STENCIL override.

This option was useful during initial development, but it's been ages
since I've heard of anyone using it.  Plus, Gen7+ mandates separate
stencil, so it was really only useful on Sandybridge anyway.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Add a new brw_device_info structure.
Kenneth Graunke [Thu, 4 Jul 2013 19:11:36 +0000 (12:11 -0700)]
i965: Add a new brw_device_info structure.

The idea is that struct brw_device_info should store statically-known
information about hardware features.  Using the new family name in the
PCI ID table, we can easily grab the right structure.

This is basically the equivalent of intel_device_info in the kernel.

This patch also makes the new structure available from intel_screen, but
nothing uses it.  Right now, it looks very redundant with existing
fields, but that will change.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Add the family name to the PCI ID table.
Kenneth Graunke [Thu, 4 Jul 2013 19:02:41 +0000 (12:02 -0700)]
i965: Add the family name to the PCI ID table.

I removed this a while ago, since we never used it, but I'm finally
resurrecting the idea in the next commits.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Remove #define name from PCI ID table.
Kenneth Graunke [Thu, 4 Jul 2013 18:55:36 +0000 (11:55 -0700)]
i965: Remove #define name from PCI ID table.

Nothing uses the #define name, and it's not terribly useful - the
numerical ID serves the same purpose.  The only thing we could really do
with it is generate slightly prettier preprocessed code.  But who looks
at that?

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Pull most driconf option handling into a centralized function.
Kenneth Graunke [Fri, 27 Sep 2013 17:40:57 +0000 (10:40 -0700)]
i965: Pull most driconf option handling into a centralized function.

Using a helper function clarifies the context initialization code.

I would've liked to completely centralize it, but moving the optionCache
code from intelInitExtensions into here would've required setting flags
in the context, which seems like a waste.

v2: Rebase for the introduction of disable_derivative_optimization.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Move a bunch of code from intelInitContext to brwCreateContext.
Kenneth Graunke [Wed, 25 Sep 2013 22:57:08 +0000 (15:57 -0700)]
i965: Move a bunch of code from intelInitContext to brwCreateContext.

Now that intelInitContext isn't shared between i915 and i965, the split
is fairly arbitrary.  This patch moves a bunch of the basic context
creation and generation checking code up to the top-level function
(and slightly earlier).

More will follow.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Update the comment about viewport hacks.
Kenneth Graunke [Fri, 27 Sep 2013 17:13:55 +0000 (10:13 -0700)]
i965: Update the comment about viewport hacks.

It wasn't clear that this was necessary for EGL, or why.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Pull out INTEL_DEBUG handling into new intel_debug.[ch] files.
Kenneth Graunke [Mon, 8 Jul 2013 02:02:56 +0000 (19:02 -0700)]
i965: Pull out INTEL_DEBUG handling into new intel_debug.[ch] files.

Now that there isn't an intel_context structure, the split between
brw_context.[ch] and intel_context.[ch] is rather awkward and arbitrary.
Removing intel_context.[ch] seems desirable, but not everything really
belongs in brw_context.[ch], either.

Moving INTEL_DEBUG handling into separate intel_debug.[ch] files should
make them relatively easy to find.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agoi965: Rename brwCreateContext's error parameter to dri_ctx_error.
Kenneth Graunke [Wed, 25 Sep 2013 22:48:41 +0000 (15:48 -0700)]
i965: Rename brwCreateContext's error parameter to dri_ctx_error.

"error" is a very generic name.  dri_ctx_error is the name used in
intelInitContext(), which is more specific.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
10 years agodri: Move i965-specific context flag logic to dri common.
Eric Anholt [Fri, 27 Sep 2013 00:17:06 +0000 (17:17 -0700)]
dri: Move i965-specific context flag logic to dri common.

Nobody else yet can do a forward context anyway, but others should be able
to do debug contexts, and those would have just had no effect currently.

10 years agoi915g: Fix assert
Stephane Marchesin [Sat, 12 Oct 2013 18:38:14 +0000 (11:38 -0700)]
i915g: Fix assert

Now that we support start, assert on start + num < max samplers

Reported by xexaxo

10 years agomesa: Bump version to 10.0.0.
Paul Berry [Fri, 11 Oct 2013 03:16:56 +0000 (20:16 -0700)]
mesa: Bump version to 10.0.0.

Mesa now supports OpenGL 3.2 and GLSL 1.50, so bump the Mesa major
version from 9 to 10 to reflect this.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
10 years agomesa: Remove warning that geometry shader support is experimental.
Paul Berry [Tue, 8 Oct 2013 22:02:10 +0000 (15:02 -0700)]
mesa: Remove warning that geometry shader support is experimental.

Geometry shader support is now working well, and adequately piglit
tested.  There are just a few piglit failures left to fix.  So there's
no need for an "experimental" warning anymore.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
10 years agoi965: Turn on GLSL 1.50 and GL 3.2 support for i965 gen7.
Paul Berry [Fri, 22 Mar 2013 21:41:17 +0000 (14:41 -0700)]
i965: Turn on GLSL 1.50 and GL 3.2 support for i965 gen7.

Geometry shaders were the last thing we needed to finish before
turning on GLSL 1.50 and GL 3.2 support.  They are now working well,
with just a few piglit failures left to fix.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
10 years agoradeon/llvm: show LLVM disassembly when available
Jay Cornwall [Fri, 11 Oct 2013 01:06:48 +0000 (20:06 -0500)]
radeon/llvm: show LLVM disassembly when available

With code dump enabled LLVM may generate disassembly during compilation.
Show this disassembly when available and prefer it to SI bytecode dump.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
Signed-off-by: Jay Cornwall <jay@jcornwall.me>
10 years agosoftpipe: fix seamless cube filtering
Roland Scheidegger [Sat, 12 Oct 2013 01:09:27 +0000 (03:09 +0200)]
softpipe: fix seamless cube filtering

Fix coord wrapping (and face selection too) in case of edges.
Unfortunately, the coord wrapping is way more complicated than what
the code did, as it depends on the face and the direction where the
texel falls off the face (the logic needed to get this right in fact
seems utterly ridiculous).
Also fix a bug in (y direction under/overflow) face selection.
And get rid of complicated cube corner handling. Just like edge case,
the coord wrapping was wrong and it seems very difficult to fix.
I'm near certain it can't always work anyway (though ordinary seamless
filtering on edge has actually a similar problem but not as severe)
because we don't have per-pixel face, hence could have multiple corner
texels which would make it very difficult to average the remaining texels
correctly. Hence simply pick a texel which would only have fallen off one
edge but not both instead, which is not quite accurate but actually I think
should be enough to meet OpenGL (but not d3d10) requirements.

v2: small fixes suggested by Brian, add some comments.

Reviewed-by: Brian Paul <brianp@vmware.com>
10 years agollvmpipe: increase fs shader variant instruction cache limit by factor 4
Roland Scheidegger [Sat, 12 Oct 2013 01:09:19 +0000 (03:09 +0200)]
llvmpipe: increase fs shader variant instruction cache limit by factor 4

The previous limit of of 128*1024 was reported to cause frequent recompiles
in some apps due to shader variant thrashing on IRC in some apps leading
to noticeable lags.
Note that the LP_MAX_SHADER_VARIANTS limit (1024) was more or less impossible
to reach, since even simple fragment shaders without texturing (glxgears) used
more than twice than 128 instructions, hence the instruction limit would have
always been reached first (excluding things like trivial shaders not writing
color). Even with the new limit it is VERY likely the instruction limit is hit
first.
Should help with such lags due to recompiles (though other shader types have
their own limits, LP_MAX_SETUP_VARIANTS and DRAW_MAX_SHADER_VARIANTS, in
particular the latter seems a bit small (128)).

Reviewed-by: Brian Paul <brianp@vmware.com>
10 years agomesa: Do not use newlocale on NetBSD.
Vinson Lee [Fri, 11 Oct 2013 23:57:02 +0000 (16:57 -0700)]
mesa: Do not use newlocale on NetBSD.

Fixes this build error.

  CC       imports.lo
../../src/mesa/main/imports.c: In function '_mesa_strtof':
../../src/mesa/main/imports.c:570:20: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'loc'
../../src/mesa/main/imports.c:570:20: error: 'loc' undeclared (first use in this function)
../../src/mesa/main/imports.c:570:20: note: each undeclared identifier is reported only once for each function it appears in
../../src/mesa/main/imports.c:572:7: error: implicit declaration of function 'newlocale'
../../src/mesa/main/imports.c:572:23: error: 'LC_CTYPE_MASK' undeclared (first use in this function)
../../src/mesa/main/imports.c:574:4: error: implicit declaration of function 'strtof_l'
../../src/mesa/main/imports.c:580:1: warning: control reaches end of non-void function

Signed-off-by: Vinson Lee <vlee@freedesktop.org>
10 years agosvga: s/0/FALSE/
Brian Paul [Fri, 11 Oct 2013 15:20:56 +0000 (09:20 -0600)]
svga: s/0/FALSE/

10 years agomesa: add comment to clarify ctx->Driver.MapBufferRange() return value
Brian Paul [Fri, 11 Oct 2013 15:20:56 +0000 (09:20 -0600)]
mesa: add comment to clarify ctx->Driver.MapBufferRange() return value

10 years agost/mesa: whitespace fixes in st_cb_bufferobjects.c
Brian Paul [Fri, 11 Oct 2013 15:20:56 +0000 (09:20 -0600)]
st/mesa: whitespace fixes in st_cb_bufferobjects.c

10 years agovbo: assorted minor clean-ups
Brian Paul [Fri, 11 Oct 2013 15:20:56 +0000 (09:20 -0600)]
vbo: assorted minor clean-ups

Use GL_TRUE/FALSE instead of 1/0.  Remove extraneous parentheses.
Remove trailing whitespace.

10 years agoglsl: fix signed/unsigned comparison warning
Brian Paul [Fri, 11 Oct 2013 15:20:56 +0000 (09:20 -0600)]
glsl: fix signed/unsigned comparison warning

10 years agowayland: Only pass wl_drm instance to gbm when using gbm platform
Kristian Høgsberg [Fri, 11 Oct 2013 22:30:09 +0000 (15:30 -0700)]
wayland: Only pass wl_drm instance to gbm when using gbm platform

10 years agowayland: Don't rely on static variable for identifying wl_drm buffers
Kristian Høgsberg [Thu, 26 Sep 2013 19:25:11 +0000 (12:25 -0700)]
wayland: Don't rely on static variable for identifying wl_drm buffers

Now that libEGL has been fixed to not leak all kinds of symbols, gbm
links to its own copy of the libwayland-drm.a helper library.  That means
we can't rely on comparing the addresses of a static vtable symbol in that
library to determine if a wl_buffer is a wl_drm_buffer.  Instead, we
move the vtable into the wl_drm struct and use that for comparing.

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

Cc: 9.2 <mesa-stable@lists.freedesktop.org>
10 years agoglapi: Do not use backtrace on NetBSD.
Vinson Lee [Fri, 11 Oct 2013 21:16:35 +0000 (14:16 -0700)]
glapi: Do not use backtrace on NetBSD.

execinfo.h is not available on NetBSD.

Fixes this bulid error.

  CC       glapi_gentable.lo
glapi_gentable.c:44:22: fatal error: execinfo.h: No such file or directory

Signed-off-by: Vinson Lee <vlee@freedesktop.org>
10 years agoglsl: Remove extraneous .dir-locals.el
Ian Romanick [Mon, 7 Oct 2013 18:21:24 +0000 (11:21 -0700)]
glsl: Remove extraneous .dir-locals.el

This was overriding the top-level .dir-locals.el causing some settings
(like forcing spaces instead of tabs!) to be lost.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agor600g: fix crash in set_framebuffer_state
Grigori Goronzy [Thu, 10 Oct 2013 23:23:20 +0000 (01:23 +0200)]
r600g: fix crash in set_framebuffer_state

We should be able to safely set the framebuffer state without a
fragment shader bound. bind_ps_state will take care of updating the
necessary state bits later.

v2: check in update_db_shader_control

10 years agomesa: Allow external textures to use fallback (0, 0, 0, 1)
Topi Pohjolainen [Mon, 7 Oct 2013 12:42:42 +0000 (15:42 +0300)]
mesa: Allow external textures to use fallback (0, 0, 0, 1)

Fixes GL2ExtensionTests/egl_image_external/TestSimpleUnassociated.test
which is part of gles2/3 conformance suite. Here image external
textures are switched to be treated the same as 2D textures. These
can be associated with the fallback texture providing fixed sample
values of (0, 0, 0, 1).

The OES_EGL_image_external spec says:

  "Sampling an external texture which is not associated with any EGLImage
   sibling will return a sample value of (0,0,0,1)."

  "External textures cannot be used with TexImage2D, TexSubImage2D,
   CompressedTexImage2D, CompressedTexSubImage2D, CopyTexImage2D, or
   CopyTexSubImage2D, and an INVALID_ENUM error will be generated if
   this is attempted."

And quoting Chad:

  "That's enforced in _mesa_TexImage*() by calling
   legal_teximage_target(), and enforced in _mesa_TexSubImage*() by
   calling legal_texsubmimage_target(). Each of the
   legal_tex*image_target() functions reject external textures.
   Therefore, allowing GL_TEXTURE_EXTERNAL_OES in store_texsubimage()
   won't violate the above spec quote.

   I think it's safe to allow GL_TEXTURE_EXTERNAL_OES in
   store_texsubimage(), as long as the texture has only a single
   plane. Luckily, that's the only type of external textures that
   Mesa currently supports."

CC: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
10 years agodoxygen: Add i965 to list of modules in html header
Chad Versace [Fri, 11 Oct 2013 05:20:39 +0000 (22:20 -0700)]
doxygen: Add i965 to list of modules in html header

Signed-off-by: Chad Versace <Chad Versace chad@chad-versace.us>
10 years agoi965: extend fast texture upload
Frank Henigman [Tue, 8 Oct 2013 01:17:39 +0000 (21:17 -0400)]
i965: extend fast texture upload

Extend the fast texture upload from BGRA X-tiled to include RGBA,
Alpha/Luminance, and Y-tiled.  Speed improvements, measured with
mesa demos teximage program, on 256 x 256 texture, in MB/s, on a
Sandy Bridge (Ivy is comparable):

              before  after   increase
BGRA/X-tiled   3266    4524    1.39x
BGRA/Y-tiled   1739    3971    2.28x
RGBA/X-tiled    474    4694    9.90x
RGBA/Y-tiled    477    3368    7.06x
   L/X-tiled   1268    1516    1.20x
   L/Y-tiled   1439    1581    1.10x

v2: Cosmetic changes only: reformat and reword comments, make doxygen-friendly,
    rename variables, use existing macros, add an assert.

Signed-off-by: Frank Henigman <fjhenigman@google.com>
Reviewed-and-tested-by: Chad Versace <chad.versace@linux.intel.com>
10 years agohaiku: Fix llvmpipe and clean up softpipe tracing
Alexander von Gluck IV [Sun, 6 Oct 2013 15:41:54 +0000 (15:41 +0000)]
haiku: Fix llvmpipe and clean up softpipe tracing

* Fix LLVM library and defines
* Only enable tracing when scons build=debug

Acked-by: Brian Paul <brianp@vmware.com>
10 years agohaiku: Remove common directory search path
Alexander von Gluck IV [Sun, 6 Oct 2013 15:37:10 +0000 (15:37 +0000)]
haiku: Remove common directory search path

* /boot/common no longer exists in Haiku as of
  a few days ago (and this is undefined)

Acked-by: Brian Paul <brianp@vmware.com>
10 years agodri: Reference the global driver vtable once at screen init..
Eric Anholt [Thu, 26 Sep 2013 17:51:29 +0000 (10:51 -0700)]
dri: Reference the global driver vtable once at screen init..

This is part of the prep for megadrivers, which won't allow using a single
global symbol due to the fact that there will be multiple drivers built
into the same dri.so file.  For that, we'll need screen init to take a
reference to the driver to set up this vtable.

v2: Fix two missed references to driDriverAPI.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
10 years agoi965: Clean up error handling for context creation.
Eric Anholt [Fri, 27 Sep 2013 00:08:28 +0000 (17:08 -0700)]
i965: Clean up error handling for context creation.

The intel_screen.c used to be a dispatch to one of 3 driver functions, but
was down to 1, so it was kind of a waste.  In addition, it was trying to
free all of the data that might have been partially freed in the kernel
3.6 check (which comes after intelInitContext, and thus might have had
driverPrivate set and result in intelDestroyContext() doing work on the
freed data).  By moving the driverPrivate setup earlier, we can use
intelDestroyContext() consistently and avoid such problems in the future.

v2: Adjust the prototype of brwCreateContext to use the proper enum
    (fixing a compiler warning in some builds)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
10 years agointel: Remove silly check for !bufmgr.
Eric Anholt [Thu, 26 Sep 2013 23:57:17 +0000 (16:57 -0700)]
intel: Remove silly check for !bufmgr.

If bufmgr didn't get created, then screen creation failed, and we never
should have got here in the first place.  This was added by Chris Wilson
in 2010 with no explanation for why it would be needed.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agodri: Move API version validation into dri/common.
Eric Anholt [Thu, 26 Sep 2013 19:01:56 +0000 (12:01 -0700)]
dri: Move API version validation into dri/common.

i965, i915, radeon, r200, swrast, and nouveau were mostly trying to do the
same logic, except where they failed to.  Notably, swrast had code that
appeared to try to enable GLES1/2 but forgot to set api_mask (thus
preventing any gles context from being created), and the non-intel drivers
didn't support MESA_GL_VERSION_OVERRIDE.

nouveau still relies on _mesa_compute_version(), because I don't know what
its limits actually are, and gallium drivers don't declare limits up front
at all.  I think I've heard talk about doing so, though.

v2: Compat max version should be 30 (noted by Ken)
    Drop r100's custom max version check, too (noted by Emil Velikov)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agodri: Merge drisw_util.c into dri_util.c
Eric Anholt [Thu, 26 Sep 2013 18:35:31 +0000 (11:35 -0700)]
dri: Merge drisw_util.c into dri_util.c

The only important difference was not calling drmGetVersion, and making
the swrast extension vtable.  That doesn't justify duplicating the other
330 lines of code.

v2: fix the scons build (code by Emil Velikov)
v3: fix scons build with swrast-only (code by Emil Velikov)
v4: Drop the new define I added, when we already have __NOT_HAVE_DRM_H.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
10 years agodri: Add an explanatory comment for an important driver entrypoint.
Eric Anholt [Thu, 26 Sep 2013 17:33:12 +0000 (10:33 -0700)]
dri: Add an explanatory comment for an important driver entrypoint.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agodri: Remove dead comment.
Eric Anholt [Thu, 26 Sep 2013 17:25:37 +0000 (10:25 -0700)]
dri: Remove dead comment.

The code it was referencing was removed in 2010.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Convert gen7 to using GRFs for texture messages.
Eric Anholt [Thu, 10 Oct 2013 00:17:59 +0000 (17:17 -0700)]
i965/fs: Convert gen7 to using GRFs for texture messages.

Looking at Lightsmark's shaders, the way we used MRFs (or in gen7's
case, GRFs) was bad in a couple of ways.  One was that it prevented
compute-to-MRF for the common case of a texcoord that gets used
exactly once, but where the texcoord setup all gets emitted before the
texture calls (such as when it's a bare fragment shader input, which
gets interpolated before processing main()).  Another was that it
introduced a bunch of dependencies that constrained scheduling, and
forced waits for texture operations to be done before they are
required.  For example, we can now move the compute-to-MRF
interpolation for the second texture send down after the first send.

The downside is that this generally prevents
remove_duplicate_mrf_writes() from doing anything, whereas previously
it avoided work for the case of sampling from the same texcoord twice.
However, I suspect that most of the win that originally justified that
code was in avoiding the WAR stall on the first send, which this patch
also avoids, rather than the small cost of the extra instruction.  We
see instruction count regressions in shaders in unigine, yofrankie,
savage2, hon, and gstreamer.

Improves GLB2.7 performance by 0.633628% +/- 0.491809% (n=121/125, avg of
~66fps, outliers below 61 dropped).

Improves openarena performance by 1.01092% +/- 0.66897% (n=425).

No significant difference on Lightsmark (n=44).

v2: Squash in the fix for register unspilling for send-from-GRF, fixing a
    segfault in lightsmark.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Acked-by: Matt Turner <mattst88@gmail.com>
10 years agoi965/fs: Allocate more register classes on gen7.
Eric Anholt [Wed, 22 May 2013 18:26:03 +0000 (11:26 -0700)]
i965/fs: Allocate more register classes on gen7.

For texturing from GRFs, we now have payloads of arbitrary sizes up to the
message length limit.

v2 (Kenneth Graunke): Rebase on intel_context -> brw_context change.
v3: Add some comment text.
v4: Change some magic 16s to BRW_MAX_MRF (noted by Ken).  Leave the 11,
    which is the magic "max sampler message length".  BRW_MAX_MRF sizing
    on the little int arrays is retained because I could see us needing to
    extend in the future if we move to GRFs for FB writes (those go to at
    least 12 long in a quick scan of the specs)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v2)
Acked-by: Matt Turner <mattst88@gmail.com>
10 years agoi965/fs: Use per-channel interference for register_coalesce_2().
Eric Anholt [Tue, 30 Apr 2013 21:30:19 +0000 (14:30 -0700)]
i965/fs: Use per-channel interference for register_coalesce_2().

This will let us coalesce into texture-from-GRF arguments, which would
otherwise be prevented due to the live interval for the whole vgrf
extending across all the MOVs setting up the channels of the message

v2 (Kenneth Graunke): Rebase for renames.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Use the new per-channel live ranges for dead code elimination.
Eric Anholt [Tue, 5 Jun 2012 18:42:25 +0000 (11:42 -0700)]
i965/fs: Use the new per-channel live ranges for dead code elimination.

v2 (Kenneth Graunke): Rebase on s/live_variables/live_intervals/g.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Keep a copy of the live variables class around.
Eric Anholt [Tue, 5 Jun 2012 18:37:22 +0000 (11:37 -0700)]
i965/fs: Keep a copy of the live variables class around.

Now optimization passes will be able to look at the per-channel ranges.

v2: Rebase on various optimization pass changes.
v3 (Kenneth Graunke): Rename live_variables to live_intervals; split
   introduction of invalidate_live_intervals() into a separate patch.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Invalidate live intervals when compacting; don't fix them.
Kenneth Graunke [Wed, 7 Aug 2013 01:37:19 +0000 (18:37 -0700)]
i965/fs: Invalidate live intervals when compacting; don't fix them.

When compacting the list of VGRFs, we patch up the live interval ranges
(which are indexed by VGRF number).  Unfortunately, once we make
per-component data available, this will become too complicated to
maintain.  Instead, simply invalidate them.

This was pulled out of a patch by Eric Anholt.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agoi965/fs: Remove start/end aliases in compute_live_intervals().
Kenneth Graunke [Wed, 7 Aug 2013 01:32:55 +0000 (18:32 -0700)]
i965/fs: Remove start/end aliases in compute_live_intervals().

In compute_live_intervals(), start and end are shorter names for
the virtual_grf_start and virtual_grf_end class members.

Now that the fs_live_intervals class has arrays named start and end
which are indexed by var, rather than VGRF, reusing the name is
confusing.  Plus, most of the code has been factored out, so using the
long names isn't as inconvenient.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agoi965/fs: Track live variable ranges on a per-channel level.
Eric Anholt [Tue, 5 Jun 2012 18:23:09 +0000 (11:23 -0700)]
i965/fs: Track live variable ranges on a per-channel level.

This is the information we'll actually use to replace the
virtual_grf_start[]/end[] arrays.

No change in shader-db.

v2 (Kenneth Graunke): Rebase; minor comment updates.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Factor def[]/use[] setup out to a separate function.
Eric Anholt [Fri, 5 Apr 2013 21:20:43 +0000 (14:20 -0700)]
i965/fs: Factor def[]/use[] setup out to a separate function.

These blocks are about to grow some more code, and the indentation was
getting out of hand.

v2 (Kenneth Graunke): Rebase, minor typo fixes and style changes.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
10 years agoi965/fs: Create a helper function for invalidating live intervals.
Kenneth Graunke [Tue, 6 Aug 2013 09:17:24 +0000 (02:17 -0700)]
i965/fs: Create a helper function for invalidating live intervals.

For now, this simply sets live_intervals_valid = false, but in the
future it will do something more sophisticated.

Based on a patch by Eric Anholt.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agoi965/fs: Do live variables dataflow analysis on a per-channel level.
Eric Anholt [Mon, 4 Jun 2012 23:00:32 +0000 (16:00 -0700)]
i965/fs: Do live variables dataflow analysis on a per-channel level.

This significantly improves our handling of VGRFs of size > 1.

Previously, we only marked VGRFs as def'd if the whole register was
written by a single instruction.  Large VGRFs which were written
piecemeal would not be considered def'd at all, even if they were
ultimately completely written.

Without being def'd, these were then marked "live in" to the basic
block, often extending the range to preceding blocks and sometimes
even the start of the program.

The new per-component tracking gives more accurate live intervals,
which makes register coalescing more effective.

In the future, this should help with texturing from GRFs on Gen7+.
A sampler message might be represented by a 2-register VGRF which
holds the texture coordinates.  If those are incoming varyings,
they'll be produced by two PLN instructions, which are piecemeal writes.

No reduction in shader-db instruction counts.  However, code which
prints the live interval ranges does show that some VGRFs now have
smaller (and more correct) live intervals.

v2: Rebase on current send-from-GRF code requiring adding extra use[]s.
v3: Rebase on live intervals fix to include defs in the end of the
    interval.
v4 (Kenneth Graunke): Rebase; split off a few preparatory patches;
    add lots of comments; minor style changes; rewrite commit message.
v5 (Eric Anholt): whitespace nit.

Written-by: Eric Anholt <eric@anholt.net> [v1-3]
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> [v4]
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net> (v4)
10 years agoi965/fs: Rename num_vars to num_vgrfs in live interval analysis.
Kenneth Graunke [Tue, 6 Aug 2013 08:12:54 +0000 (01:12 -0700)]
i965/fs: Rename num_vars to num_vgrfs in live interval analysis.

num_vars was shorthand for the number of virtual GRFs.  num_vgrfs is a
bit clearer.  Plus, the next patch will introduce "vars" which are
distinct from vgrfs.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
10 years agoi965/fs: Short-circuit a loop in live variable analysis.
Kenneth Graunke [Tue, 6 Aug 2013 07:47:00 +0000 (00:47 -0700)]
i965/fs: Short-circuit a loop in live variable analysis.

This has no functional effect, but should make subsequent changes a
little simpler.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>