Paul Berry [Fri, 13 Jul 2012 21:21:27 +0000 (14:21 -0700)]
i965/blorp: Rearrange order of blit validation and preparation steps.
This patch rearranges the order of steps performed by a blorp blit
from this:
- Sync up state of window system buffers.
- Find buffers.
- Find miptrees.
- Make sure buffer formats match.
- Handle mirroring.
- Make sure width and height match.
- Handle clipping/scissoring.
- Account for window system origin conventions.
- Do depth resolves, if applicable.
- Do the blit.
- Record the need for a future HiZ resolve, if applicable.
To this:
- Sync up state of window system buffers.
- Handle mirroring.
- Make sure width and height match.
- Handle clipping/scissoring.
- Account for window system origin conventions.
- Find buffers.
- Make sure buffer formats match.
- Find miptrees.
- Do depth resolves, if applicable.
- Do the blit.
- Record the need for a future HiZ resolve, if applicable.
The steps are the same, but they are now performed in an order that
will make it possible to implement correct DrawBuffers support. Note
that the last four steps are now in a separate function
(do_blorp_blit), since they will need to be executed repeatedly when
DrawBuffers support is added.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Fri, 13 Jul 2012 20:59:41 +0000 (13:59 -0700)]
i965/blorp: Don't fall back to swrast when miptrees absent.
Previously, the blorp engine would fall back to swrast if the source
or destination of a blit had no associated miptree. This was
unnecessary, since _mesa_BlitFramebufferEXT() already takes care of
making the blit silently succeed if there are no buffers bound, so the
fallback paths could never actually happen in practice.
Removing these fallback paths will simplify the implementation of
correct DrawBuffers support in blorp.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Sat, 14 Jul 2012 01:30:55 +0000 (18:30 -0700)]
i965/blorp: Fixup scissoring of blits to window system buffers.
This patch modifies the order of operations in the blorp engine so
that clipping and scissoring are performed before adjusting the
coordinates to account for the difference in origin convention between
window system buffers and framebuffer objects. Previously, we would
do clipping and scissoring after adjusting for origin conventions, so
we would get scissoring wrong in window system buffers.
Fixes Piglit test "fbo-scissor-blit window".
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Sat, 14 Jul 2012 01:30:55 +0000 (18:30 -0700)]
i965/blorp: Simplify check that src/dst width/height match.
When checking that the source and destination dimensions match, we
don't need to store the width and height in variables; doing so just
risks confusion since right after the check, we do clipping and
scissoring, which may alter the width and height.
No functional change.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Tue, 10 Jul 2012 18:23:25 +0000 (11:23 -0700)]
i965/msaa: Work around problems with null render targets on Gen6.
On Gen6, multisampled null render targets don't seem to work
properly--they cause the GPU to hang. So, as a workaround, we render
into a dummy color buffer.
Fortunately this situation (multisampled rendering without a color
buffer) is rare, and we don't have to waste too much memory, because
we can give the workaround buffer a very small pitch.
Fixes piglit test "EXT_framebuffer_multisample/no-color {2,4}
depth-computed *" on Gen6.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Fri, 13 Jul 2012 14:25:12 +0000 (07:25 -0700)]
i965: Set width, height, and tiling properly for null render targets.
The HW docs say that the width and height of null render targets need
to match the width and height of the corresponding depth and/or
stencil buffers, and that they need to be marked as Y-tiled. Although
leaving these values at 0 doesn't seem to cause any ill effects, it
seems wise to follow the documented requirements.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Tue, 10 Jul 2012 03:05:41 +0000 (20:05 -0700)]
i965/msaa: Control multisampling behaviour via the visual.
Previously, we used the number of samples in draw buffer 0 to
determine whether to set up the 3D pipeline for multisampling. Using
the visual is cleaner, and has the benefit of working properly when
there is no color buffer.
Fixes all piglit tests "EXT_framebuffer_multisample/no-color" on Gen7.
On Gen6, the "depth-computed" variants of these tests still fail; this
will be addresed in a later patch.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Paul Berry [Tue, 10 Jul 2012 03:06:19 +0000 (20:06 -0700)]
msaa: Compute visual samples/sampleBuffers from all buffers.
This patch ensures that Visual.samples and Visual.sampleBuffers are
set correctly even in the case where there is no color buffer.
Previously, these values would retain their default value of 0 in this
circumstance, even if the depth or stencil buffer was multisampled.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Anthony G. Basile [Tue, 24 Jul 2012 19:59:54 +0000 (12:59 -0700)]
Fix compile time errors when building against uclibc
Mesa misses a few checks when compiling on a uclibc system
which cause it to fall back on glibc-ism. This patch
addresses those issues.
Acked-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Jerome Glisse [Tue, 24 Jul 2012 19:05:43 +0000 (15:05 -0400)]
r600g: enable streamout only on 2.14 or latter kernel
The kernel streamout support was supposed to get into 3.3 along
the tiling change and thus use the same kernel version bump of
2.13 to report userspace that streamout register were supported.
This is not what happen. So as streamout kernel support did not
bump the kernel driver version, rely on kernel 2.14 version bump
to know if streamout is enabled or not. Which means you need at
least 3.4 kernel.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Jordan Justen [Tue, 17 Jul 2012 18:22:32 +0000 (11:22 -0700)]
intel: move error on create context to proper path
The error was being set on the non-error path, rather
than the error path.
NOTE: This is a candidate for the 8.0 branch.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Jordan Justen [Mon, 16 Jul 2012 22:41:26 +0000 (15:41 -0700)]
mesa context: generate an error for uninstalled context functions
For 'non-legacy' contexts we will want to generate an error
if an uninstalled function is called.
The effect of this change will be that we can avoid installing
legacy functions, and they will then generate an error as
needed for deprecated functions in GL >= 3.1.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Brian Paul [Tue, 24 Jul 2012 16:33:18 +0000 (10:33 -0600)]
nouveau: include glformats.h to get missing prototype
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=52449
Brian Paul [Tue, 24 Jul 2012 15:54:50 +0000 (09:54 -0600)]
mesa: improve comment in build_tnl_program()
Brian Paul [Mon, 23 Jul 2012 17:29:42 +0000 (11:29 -0600)]
docs: the legacy makefile system is removed in Mesa 8.1
Brian Paul [Sun, 22 Jul 2012 17:29:20 +0000 (11:29 -0600)]
mesa: move _mesa_error_check_format_and_type() to glformats.c
Now all the format/type-related helper functions are in glformats.c
and image.c is just image-related functions.
Brian Paul [Sun, 22 Jul 2012 17:20:00 +0000 (11:20 -0600)]
mesa: move more format helper functions to glformats.c
Brian Paul [Sun, 22 Jul 2012 17:03:13 +0000 (11:03 -0600)]
mesa: move some format helper functions to glformats.c
Christian König [Wed, 18 Jul 2012 10:10:24 +0000 (12:10 +0200)]
radeonsi: remove old state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Fri, 20 Jul 2012 09:46:01 +0000 (11:46 +0200)]
radeonsi: move everything else into the new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Fri, 20 Jul 2012 09:08:22 +0000 (11:08 +0200)]
radeonsi: move format handling into si_state.c
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Thu, 19 Jul 2012 13:53:01 +0000 (15:53 +0200)]
radeonsi: move remaining sampler state into si_state.c
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Thu, 19 Jul 2012 13:20:45 +0000 (15:20 +0200)]
radeonsi: move draw state into new handling
Split it out into si_state_draw.c
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Thu, 19 Jul 2012 12:45:00 +0000 (14:45 +0200)]
radeonsi: move constants to new state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Thu, 19 Jul 2012 08:31:44 +0000 (10:31 +0200)]
radeonsi: move sampler states into new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 15:39:15 +0000 (17:39 +0200)]
radeonsi: move shaders to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 12:36:10 +0000 (14:36 +0200)]
radeonsi: move spi into new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 11:11:03 +0000 (13:11 +0200)]
radeonsi: move init state to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 10:07:20 +0000 (12:07 +0200)]
radeonsi: move draw_info to new state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 09:36:28 +0000 (11:36 +0200)]
radeonsi: move CB_TARGET_MASK into fb/blend state
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 09:03:32 +0000 (11:03 +0200)]
radeonsi: move stencil_ref to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 08:46:36 +0000 (10:46 +0200)]
radeonsi: move dsa state to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Wed, 18 Jul 2012 08:03:34 +0000 (10:03 +0200)]
radeonsi: move infeered fb/rs state to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 21:43:00 +0000 (23:43 +0200)]
radeonsi: move rasterizer state into new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 19:28:10 +0000 (21:28 +0200)]
radeonsi: move framebuffer to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 13:46:24 +0000 (15:46 +0200)]
radeonsi: move viewport to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 13:05:14 +0000 (15:05 +0200)]
radeonsi: move scissor state to new state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 12:52:08 +0000 (14:52 +0200)]
radeonsi: move clip state to new handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 12:31:57 +0000 (14:31 +0200)]
radeonsi: move blend color to new state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 12:12:46 +0000 (14:12 +0200)]
radeonsi: move blender to new state handling
Signed-off-by: Christian König <deathsimple@vodafone.de>
Christian König [Tue, 17 Jul 2012 12:09:03 +0000 (14:09 +0200)]
radeonsi: rework state handling v2
Add a complete new state handling for SI.
v2: fix spelling error
Signed-off-by: Christian König <deathsimple@vodafone.de>
Brad King [Mon, 16 Jul 2012 13:10:02 +0000 (09:10 -0400)]
automake: Honor GL_LIB for mangled/custom lib names
Commit
2d4b77c7 (automake: Convert src/mesa/drivers/x11/Makefile to
automake, 2012-06-12) dropped the old Makefile, which used GL_LIB, and
replaced it with a Makefile.am hard-coding the name "GL". This broke
handling of --enable-mangling and --with-gl-lib-name options which
depend on GL_LIB to specify the GL library name.
Use "@GL_LIB@" in src/mesa/drivers/x11/Makefile.am to configure the
library name. Also use this approach to simplify src/glx/Makefile.am
and drop the HAVE_MANGLED_GL conditional. While at it, fix the
compatibility link we create in "lib" for the software-only driver to
use version GL_MAJOR instead of hard-coding "1".
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Marek Olšák [Sun, 22 Jul 2012 23:27:51 +0000 (01:27 +0200)]
st/mesa: fix DDY opcode for FBOs
This fixes piglit/fbo-deriv.
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Sun, 22 Jul 2012 21:06:19 +0000 (23:06 +0200)]
st/mesa: set the centroid qualifier in fragment shader inputs
This fixes some centroid tests in the EXT_framebuffer_multisample piglit group.
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Sun, 22 Jul 2012 02:31:59 +0000 (04:31 +0200)]
st/mesa: flush the glBitmap cache before changing framebuffer state
This fixes the piglit EXT_framebuffer_multisample/bitmap tests.
Note that we must not rely on ctx->DrawBuffer when flushing the cache, because
that's already updated with a new framebuffer. We want to draw into the old
framebuffer where glBitmap was called.
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Sat, 21 Jul 2012 23:08:49 +0000 (01:08 +0200)]
st/mesa: set the correct window renderbuffer internal format
The multisample-resolve blit relies on this being correct.
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Sat, 21 Jul 2012 13:16:15 +0000 (15:16 +0200)]
mesa: fix format checking when doing a multisample resolve
v2: make it more bullet-proof
Reviewed-by: Brian Paul <brianp@vmware.com>
José Fonseca [Fri, 20 Jul 2012 17:17:14 +0000 (18:17 +0100)]
gallivm: Prefer the standard JIT engine whenever possible.
Testing shows that the standard JIT engine retrofited with AVX support is quite
stable and as capable to handle AVX instructions as MC-JIT is.
And the old JIT is much more memory efficient, as we don't need to
allocate one engine instance per shader, as we do for MC-JIT due to its
incompleteness.
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Jerome Glisse [Mon, 23 Jul 2012 15:42:36 +0000 (11:42 -0400)]
r600g: don't emit forbidden reg with old kernel on evergreen
Fix https://bugs.freedesktop.org/show_bug.cgi?id=52313
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Jerome Glisse [Mon, 23 Jul 2012 15:26:24 +0000 (11:26 -0400)]
r600g: don't emit forbidden register on old kernel
Fix https://bugs.freedesktop.org/show_bug.cgi?id=52313
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Vincent Lejeune [Sat, 14 Jul 2012 18:33:23 +0000 (20:33 +0200)]
radeon/llvm: Fix a bug with IF LOGICALNZ with int operand
Signed-off-by: Tom Stellard <thomas.stellard@amd.com>
Tom Stellard [Tue, 17 Jul 2012 18:36:06 +0000 (18:36 +0000)]
pipe_loader: Try to connect with the X server before probing pciids v2
When X is running it is neccesary for pipe_loader to authenticate with
DRM, in order to be able to use the device.
This makes it possible to run OpenCL programs while X is running.
v2:
- Fix C++ style comments
- Drop Xlib-xcb dependency
- Close the X connection when done
- Split auth code into separate function
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Tom Stellard [Tue, 17 Jul 2012 18:32:56 +0000 (18:32 +0000)]
configure.ac: Add --with-llvm-prefix option
This option allows you to specify the llvm install prefix. It is
useful for switching between different versions of LLVM.
Kenneth Graunke [Thu, 19 Jul 2012 20:41:34 +0000 (13:41 -0700)]
mesa: Prevent repeated glDeleteShader() from blowing away our refcounts.
Calling glDeleteShader() should mark shaders as pending for deletion,
but shouldn't decrement the refcount every time. Otherwise, repeated
glDeleteShader() is not safe.
This is particularly bad since glDeleteProgram() frees shaders: if you
first call glDeleteShader() on the shaders attached to the program (thus
decrementing the refcount), then called glDeleteProgram(), it would try
to free them again (decrementing the refcount another time), causing
a refcount > 0 assertion to fail.
Similar to commit
d950a778.
NOTE: This is a candidate for the 8.0 branch.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
Matt Turner [Sat, 21 Jul 2012 16:06:11 +0000 (09:06 -0700)]
imports.h: Correct ceilf typo.
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Sun, 22 Jul 2012 00:46:30 +0000 (02:46 +0200)]
st/mesa: remove st_flush_bitmap wrapper
just a cleanup
Jordan Justen [Sat, 9 Jun 2012 19:14:26 +0000 (12:14 -0700)]
mesa formats: add MESA_FORMAT_ABGR2101010_UINT
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Jordan Justen [Mon, 25 Jun 2012 20:45:42 +0000 (13:45 -0700)]
mesa formats: unpack ARGB8888/XRGB8888
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Jordan Justen [Wed, 20 Jun 2012 21:47:46 +0000 (14:47 -0700)]
mesa pack: use _mesa_problem instead of assert
If the pack type is not supported, use _mesa_problem
rather than asserting.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Jordan Justen [Mon, 25 Jun 2012 17:52:39 +0000 (10:52 -0700)]
mesa: add glformats integer type/format detection routines
_mesa_is_integer_format is moved to formats.c and renamed
as _mesa_is_enum_format_integer.
_mesa_is_format_unsigned, _mesa_is_type_integer,
_mesa_is_type_unsigned, and _mesa_is_enum_format_or_type_integer
are added.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Vinson Lee [Sat, 21 Jul 2012 07:44:06 +0000 (00:44 -0700)]
scons: Add instrumentation component libraries to linking on llvm-3.2.
llvm-3.2svn r160587 moved createBoundsCheckingPass from
lib/Transforms/Scalar to lib/Transforms/Instrumentation.
Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
Matt Turner [Fri, 20 Jul 2012 17:29:40 +0000 (10:29 -0700)]
Remove unused _mesa_memset16
Unused since commit
fd104a845.
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Matt Turner [Fri, 20 Jul 2012 17:06:35 +0000 (10:06 -0700)]
Remove _mesa_inv_sqrtf in favor of 1/SQRTF
Except for a couple of explicit uses, _mesa_inv_sqrtf was disabled since
its addition in 2003 (see
f9b1e524).
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Matt Turner [Fri, 20 Jul 2012 16:55:47 +0000 (09:55 -0700)]
Remove _mesa_sqrt* in favor of plain sqrt
Temporarily disabled since 2003 (see
386578c5b).
This saves us from calling sqrt() 128 times to generate the sqrttab in
one_time_init().
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Matt Turner [Fri, 20 Jul 2012 17:03:10 +0000 (10:03 -0700)]
Use INV_SQRT instead of 1/SQRTF
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
José Fonseca [Sat, 21 Jul 2012 10:43:06 +0000 (11:43 +0100)]
autoconf: Only kink mcjit component when available.
Should fix build failures with older LLVM version, but only tested on
LLVM 3.1.
Chad Versace [Fri, 20 Jul 2012 22:41:27 +0000 (15:41 -0700)]
i830: Fix stack corruption
Found by compiler warning:
i830_texstate.c:131:28: warning: argument to 'sizeof' in 'memset' call
is the same expression as the destination; did you mean to
dereference it? [-Wsizeof-pointer-memaccess]
memset(state, 0, sizeof(state));
~~~~~ ^~~~~
On 64-bit systems, memset here would write an extra 4 bytes.
Note: This is a candidate for the stable branches.
Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
José Fonseca [Fri, 20 Jul 2012 22:16:11 +0000 (16:16 -0600)]
mesa: disable MSVC global optimization in pack.c
To reduce excessive compilation time in release mode.
NOTE: This is a candidate for the 8.0 branch.
Tested-by: Brian Paul <brianp@vmware.com>
Brian Paul [Thu, 19 Jul 2012 22:34:24 +0000 (16:34 -0600)]
mesa: whitespace fixes in pbo.c
Brian Paul [Thu, 19 Jul 2012 21:07:10 +0000 (15:07 -0600)]
mesa: update texstore.c comment
Roland Scheidegger [Fri, 6 Jul 2012 00:53:44 +0000 (02:53 +0200)]
llvmpipe: use runtime loop instead of static loop for looping over quads
This can potentially cut shader program size by a factor of 4 for 4-wide
execution respectively 2 for 8-wide execution and while this ratios aren't
quite reached for more complex shaders it can be close.
Could not really measure a performance difference so far except for trivial
shaders (glxgears).
There seems to be a fair amount of unnecessary move's generated especially
at the beginning it might be possible to optimize those away somehow.
Things aren't quite as clean, some additional stuff needs to be done for
keeping both paths working (though llvm might be able to optimize this away).
glxgears seems to lose about 5-10% of performance, looking at the generated
shaders this is actually less than I'd think it would be - both 4 and 8-wide
shaders, despite containing a loop actually have about 10% more instructions
in total, and will have roughly 50% more executed instructions (though mostly
cheap ones). Need to figure out how to reduce overhead...
v2: keep complex interpolation for 4-wide mode, adapt to interface changes.
Reviewed-by: José Fonseca <jfonseca@vmware.com>
Roy Spliet [Wed, 18 Jul 2012 23:56:35 +0000 (01:56 +0200)]
nv30: Support negative offsets in indirect constant access.
Fixes piglit vp-address-01 amongst several others.
Signed-off-by: Roy Spliet <r.spliet@student.tudelft.nl>
Reviewed-by: Lucas Stach <dev@lynxeye.de>
Tested-by: Lucas Stach <dev@lynxeye.de>
Bryan Cain [Wed, 18 Jul 2012 04:46:39 +0000 (23:46 -0500)]
nv50/ir: set position before i instead of i->next in NV50LoweringPreSSA::visit
Fixes rendering glitches in Psychonauts such as Raz's eyes flickering white.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=51962.
Eric Anholt [Thu, 19 Jul 2012 05:58:15 +0000 (22:58 -0700)]
i965/gen7: Increase the WM threads to hardware limits.
This thread count is only supposed to be enabled when "WIZ Hashing Disable in
GT_MODE register enabled." I've always been confused whether that means the
bit in the register should be 1 or 0. For my IVB GT2's register 0x7008 value
of 0x0, this appears to work fine.
Improves l4d2 performance at 640x480 by 0.88 +/- 0.11% (n=88). Improves
performance with rasterization at 1280x1024 by 1.45% +/- 0.36% (n=6).
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Eric Anholt [Tue, 1 May 2012 22:10:14 +0000 (15:10 -0700)]
glsl: Assign locations for uniforms in UBOs using the std140 rules.
Fixes piglit layout-std140.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 21:43:31 +0000 (14:43 -0700)]
glsl: Don't resize arrays in uniform blocks.
This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 21:26:09 +0000 (14:26 -0700)]
glsl: Don't dead-code eliminiate uniforms declared in uniform blocks.
This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 21:15:14 +0000 (14:15 -0700)]
mesa: Implement the UBO-specific pnames of glGetActiveUniformsiv.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 20:59:31 +0000 (13:59 -0700)]
glsl: Propagate uniform block information into gl_uniform_storage.
Now we can actually return information on uniforms in uniform blocks
in the new queries.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 21:07:43 +0000 (14:07 -0700)]
mesa: Add implementation of glGetUniformBlockIndex().
Now that we finally have a list of uniform blocks in the linked shader
program, we can tell what their indices are.
Fixes piglit GL_ARB_uniform_buffer_object/getuniformblockindex.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Tue, 1 May 2012 20:34:04 +0000 (13:34 -0700)]
glsl: Set the uniform_block index for the linked shader variables.
At this point in the linking, we've totally lost track of the struct
gl_uniform_buffer that this pointed to in the original unlinked
shader, so we do a nasty n^2 walk to find it the new one based on the
variable name.
Note that these point into the shader's list of gl_uniform_buffers,
not the linked program's.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Fri, 27 Apr 2012 22:56:44 +0000 (15:56 -0700)]
mesa: Add support for glGetActiveUniformsiv on non-UBO pnames.
We'll need to propagate the UBO fields to the uniform storage records
before we can handle the other pnames.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Fri, 27 Apr 2012 22:37:49 +0000 (15:37 -0700)]
mesa: Add support for glGetUniformIndices().
This is a single entrypoint that maps from a series of names to the
indices of those names within the active uniforms list. Each index is
like glGetUniformLocation()'s return value, except that it doesn't
encode an array offset.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Mon, 25 Jun 2012 17:23:24 +0000 (10:23 -0700)]
mesa: Move the _mesa_uniform_merge_location_offset to glGetUniformLocation().
With the upcoming GL_ARB_uniform_buffer_object changes, the only
other caller that will want the cooked value is state_tracker.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Fri, 27 Apr 2012 20:52:56 +0000 (13:52 -0700)]
glsl: Merge the lists of uniform blocks into the linked shader program.
This attempts error-checking, but the layout isn't done yet.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Fri, 27 Apr 2012 01:21:43 +0000 (18:21 -0700)]
glsl: Translate the AST for uniform blocks into some IR structures.
We're going to need this structure to cross-validate the uniform
blocks between shader stages, since unused ir_variables might get
dropped. It's also the place we store the RowMajor qualifier, which
is not part of the GLSL type (since that would cause a bunch of type
equality checks to fail).
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Eric Anholt [Fri, 27 Apr 2012 01:19:39 +0000 (18:19 -0700)]
glsl: Turn UBO variable declarations into ir_variables and check qualifiers.
Fixes piglit layout-*-non-uniform and layout-*-within-block.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Lucas Stach [Thu, 19 Jul 2012 19:09:28 +0000 (21:09 +0200)]
st/xorg: fix masked transformations
Someone tried to be clever and "optimized" add_vertex_data2() to just use
two points for the texture coordinates and then reuse individual
components. Sadly this is not how matrix multiplication works.
Fixes rendercheck -t tmcoords
Signed-off-by: Lucas Stach <dev@lynxeye.de>
Paul Berry [Mon, 9 Jul 2012 19:50:31 +0000 (12:50 -0700)]
i965/blorp: Use IMS layout when texturing from depth/stencil surfaces.
Previously, on Gen7, when texturing from a depth or stencil surface,
the blorp engine would configure the 3D pipeline as though the input
surface was non-multisampled, and perform the necessary coordinate
transformations in the fragment shader to account for the IMS layout.
This meant outputting a lot of extra fragment shader code, and it
raised some uncertainty about how to deal with very large surfaces.
This patch modifies blorp to configure the 3D pipeline properly for
IMS layout when reading from depth and stencil surfaces.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Mon, 9 Jul 2012 19:50:31 +0000 (12:50 -0700)]
i965/blorp: Loosen assertions in compute_msaa_layout_for_pipeline.
Previously, on Gen7, compute_msaa_layout_for_pipeline() would verify
that IMS layout is not used. However, now that we configure
SURFACE_STATE correctly for IMS surfaces, IMS layout is available.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Mon, 9 Jul 2012 19:50:31 +0000 (12:50 -0700)]
i965/blorp: Configure SURFACE_STATE correctly for IMS surfaces.
This patch modifies gen7_set_surface_num_multisamples() to set up the
SURFACE_STATE appropriately for texturing from IMS format MSAA
surfaces (which are only used on Gen7 for depth and stencil buffers).
Since the function now sets more than just the number of multisamples,
it's been renamed to gen7_set_surface_msaa().
This will make it possible to remove some kludginess from the blorp
engine.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Mon, 9 Jul 2012 18:10:52 +0000 (11:10 -0700)]
i965/blorp: Optimize manual_blend() for compressed multisampled surfaces.
When downsampling a compressed multisampled surface, we can take a
shortcut to downsample any pixels that were completely covered by a
single primitive. In this case, the first color value we fetch is the
correct final color for the downsampled pixel, so we can skip the rest
of the blending operation.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Sat, 7 Jul 2012 15:28:46 +0000 (08:28 -0700)]
i965/blorp: Fix integer downsampling on Gen7.
When downsampling an integer-format buffer on Gen7, we need to use the
"avg" instruction rather than the "add" instruction, to ensure that we
don't overflow the range of 32-bit integers. Also, we need to use the
proper register type (BRW_REGISTER_TYPE_D or BRW_REGISTER_TYPE_UD) for
intermediate color data and for writing to the render target.
Note: this patch causes blorp to use the proper register type for all
operations (downsampling, upsampling, and ordinary blits). Strictly
speaking, this is only necessary for downsampling, because the other
operations exclusively use MOV instructions on the color data. But
it's simpler to use the proper register type in all cases.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Sat, 7 Jul 2012 15:02:48 +0000 (08:02 -0700)]
i965/blorp: Modify manual_blend() to avoid unnecessary loss of precision.
When downsampling from an MSAA image to a single-sampled image, it is
inevitable that some loss of numerical precision will occur, since we
have to use 32-bit floating point registers to hold the intermediate
results while blending. However, it seems reasonable to expect that
when all samples corresponding to a given pixel have the exact same
color value, there will be no loss of precision.
Previously, we averaged samples as follows:
blend = (((sample[0] + sample[1]) + sample[2]) + sample[3]) / 4
This had the potential to lose numerical precision when all samples
have the same color value, since ((sample[0] + sample[1]) + sample[2])
may not be precisely representable as a 32-bit float, even if the
individual samples are.
This patch changes the formula to:
blend = ((sample[0] + sample[1]) + (sample[2] + sample[3])) / 4
This avoids any loss of precision in the event that all samples are
the same, by ensuring that each addition operation adds two equal
values.
As a side benefit, this puts the formula in the form we will need in
order to implement correct blending of integer formats.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Sat, 7 Jul 2012 15:28:46 +0000 (08:28 -0700)]
i965: Add support for AVG instruction.
From the Ivy Bridge PRM, Vol4 Part3 p152:
"The avg instruction performs component-wise integer average of
src0 and src1 and stores the results in dst. An integer average
uses integer upward rounding. It is equivalent to increment one to
the addition of src0 and src1 and then apply an arithmetic right
shift to this intermediate value."
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Paul Berry [Thu, 19 Jul 2012 06:20:23 +0000 (23:20 -0700)]
i965: Replace fs_visitor::kill_emitted with gl_fragment_program::UsesKill.
The kill_emitted variable was duplicating the functionality of
gl_fragment_program::UsesKill. There's no need for both.
Reviewed-by: Eric Anholt <eric@anholt.net>
Paul Berry [Thu, 19 Jul 2012 06:18:14 +0000 (23:18 -0700)]
mesa: Set gl_fragment_program::UsesKill in do_set_program_inouts.
Previously, the code for setting this flag for GLSL programs was
duplicated in three places: brw_link_shader(), glsl_to_tgsi_visitor,
and ir_to_mesa_visitor. In addition to the unnecessary duplication,
there was a performance problem on i965: brw_link_shader() set the
flag before doing its final round of optimizations, which meant that
if the optimizations managed to eliminate all the discard operations,
the flag would still be set, resulting (at least in theory) in slower
performance.
This patch consolidates all of the code that sets UsesKill for GLSL
programs into do_set_program_inouts(), which already is doing a
similar job for UsesDFdy, and which occurs after i965's final round of
optimizations.
Non-GLSL programs (ARB programs and the state tracker's glBitmap
program) are unaffected.
Reviewed-by: Eric Anholt <eric@anholt.net>
Kristian Høgsberg [Thu, 19 Jul 2012 20:07:55 +0000 (16:07 -0400)]
gallium-egl: Move wayland query_buffer implementation
Move it to native_wayland_drm_bufmgr_helper.c which only gets compiled when
wayland is enabled and which already includes the right headers.
Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
Olivier Galibert [Thu, 19 Jul 2012 16:55:14 +0000 (18:55 +0200)]
softpipe: Fix segfault with fbo-cubemap.
The cube sampler generates two-dimensional texture coordinates and
hence passes NULL for the array for the third one. The actual 2D
sampler, lower in the pipe, knew not to used that array since it
didn't need it. But the samplers have become single-texel and the
coordinate array dereference has been moved up one step, to a level
where the code does not know only two coordinates are used. Hence the
segfault.
The simplest fix by far is to add a third dummy coordinate array in
the call to the next pipe step, which will be dereferenced to an
harmless 0 which then will be happily ignored by the sampler.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=52250
Signed-off-by: Olivier Galibert <galibert@pobox.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Kristian Høgsberg [Thu, 19 Jul 2012 13:02:25 +0000 (09:02 -0400)]
wayland: Support EGL_WIDTH and EGL_HEIGHT queries for wl_buffer
We're going to make the public wl_buffer struct as small as possible.
Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>