Kenneth Graunke [Mon, 18 Oct 2010 22:35:10 +0000 (15:35 -0700)]
glsl: Add compiler support for ARB_shader_texture_lod.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Tested-by: Marek Olšák <maraeo@gmail.com>
Kenneth Graunke [Tue, 19 Oct 2010 18:23:32 +0000 (11:23 -0700)]
mesa: Add ARB_shader_texture_lod to the extension list; off by default.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Marcin Slusarz [Mon, 9 May 2011 18:12:38 +0000 (20:12 +0200)]
nv50/nvc0: make transfers aware of PIPE_TRANSFER_MAP_DIRECTLY
If state tracker asked us to map resource directly and we can't
do it (because of tiling), return NULL instead of doing full transfer
- state tracker should handle it and fallback to some other method
or repeat transfer without PIPE_TRANSFER_MAP_DIRECTLY.
It greatly improves performance of xorg state tracker on nv50+,
because its fallback (DFS/UTS) is much faster than full transfer.
Matt Turner [Mon, 9 May 2011 04:17:05 +0000 (00:17 -0400)]
r300/compiler: align memory allocations to 8-bytes
Eliminates unaligned accesses on strict architectures. Spotted by Jay
Estabrook.
Signed-off-by: Matt Turner <mattst88@gmail.com>
NOTE: This is a candidate for the 7.10 branch.
Marek Olšák [Sat, 7 May 2011 21:31:37 +0000 (23:31 +0200)]
r300g: unreference a zbuffer surface after decompression
Marek Olšák [Sat, 7 May 2011 21:29:23 +0000 (23:29 +0200)]
r300g: remove redundant state variable hyperz_locked
Marek Olšák [Mon, 9 May 2011 16:18:56 +0000 (18:18 +0200)]
mesa: document instructions ir_to_mesa emits
GLSL stopped using:
BRA, EXP, LOG, LRP, NRM3, NRM4, XPD.
GLSL started using:
KIL, SCS, SSG, SWZ.
(omg why SWZ? isn't proc_src_register flexible enough?)
GLSL doesn't use these opcodes some Radeons do support:
ARR, DP2A, DST, LRP, XPD.
These opcodes are now unused:
AND, NOT, NRM3, NRM4, OR, XOR.
(plus maybe the NV extensions which are unused by Gallium)
In addition to that, we don't use two-dimensional indirect addressing,
which the Mesa IR can do.
Michel Dänzer [Mon, 9 May 2011 16:26:50 +0000 (18:26 +0200)]
r300c: Fix up for register allocator rewrite.
Was broken by commit
fe622bac0c1b5b9f2a9fcf9f35b51232a06bea42 ('r300/compiler:
Rewrite register allocator').
Jerome Glisse [Mon, 9 May 2011 16:09:51 +0000 (12:09 -0400)]
r600g: anisotropic filtering support for evergreen hw
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Carl-Philip Haensch [Fri, 6 May 2011 20:48:08 +0000 (22:48 +0200)]
r600g: add support for anisotropic filtering
Michel Dänzer [Mon, 9 May 2011 10:29:47 +0000 (12:29 +0200)]
gallium: Factor out unknown endianness detection.
Matt Turner [Mon, 9 May 2011 04:17:04 +0000 (00:17 -0400)]
Don't allow compilation if endianness isn't known
PIPE_ARCH_UNKNOWN_ENDIAN is used no where else. All #else branches of
ifdef PIPE_ARCH_LITTLE assume big-endian. Not #error'ing out here
only serves to allow bad things to happen.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Matt Turner [Mon, 9 May 2011 04:17:03 +0000 (00:17 -0400)]
p_config.h: Rely on glibc endianness definitions when available
Suggested by Julien Cristau.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Marcin Slusarz [Sun, 8 May 2011 22:37:20 +0000 (00:37 +0200)]
st/xorg: add some debugging messages to xorg_exa.c
Marcin Slusarz [Sun, 8 May 2011 22:36:44 +0000 (00:36 +0200)]
st/xorg: remove DEBUG_PRINT macro and add exa_debug_printf
Localizes preprocessor usage to one place.
Marcin Slusarz [Sun, 8 May 2011 22:36:02 +0000 (00:36 +0200)]
st/xorg: fix compilation of xorg_exa.c with DEBUG_PRINT set to 1
Nicolas Kaiser [Sun, 8 May 2011 13:41:10 +0000 (07:41 -0600)]
cell: fix unbalanced parenthesis
Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
Signed-off-by: Brian Paul <brianp@vmware.com>
Matt Turner [Fri, 6 May 2011 17:01:13 +0000 (13:01 -0400)]
mesa: add precision to M_PI constant
Value found in my math.h header.
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
Matt Turner [Fri, 6 May 2011 17:01:12 +0000 (13:01 -0400)]
mesa: replace ONE_DIV_LN2 constant with M_LOG2E
1/ln(2) is equivalent to log2(e), so define it as such.
log2(e) = ln(e)/ln(2) = 1/ln(2)
Worst of all, the definitions for M_LOG2E and ONE_DIV_LN2
(right beside each other!) weren't the same.
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Fri, 6 May 2011 19:59:51 +0000 (21:59 +0200)]
r300/compiler: implement TXD and TXL opcodes
Marek Olšák [Fri, 6 May 2011 19:57:52 +0000 (21:57 +0200)]
r300g: handle seamless_cube_map caps
Benjamin Franzke [Fri, 6 May 2011 19:28:46 +0000 (21:28 +0200)]
egl/wayland: Follow wl_resource_destroy changes
Christoph Bumiller [Fri, 6 May 2011 19:11:03 +0000 (21:11 +0200)]
nv50,nvc0: activate seamless cube map filtering
Marek Olšák [Mon, 2 May 2011 11:01:01 +0000 (13:01 +0200)]
docs: update relnotes-7.11
Marek Olšák [Mon, 2 May 2011 15:45:48 +0000 (17:45 +0200)]
docs: update GL3 status
Marek Olšák [Mon, 2 May 2011 00:38:20 +0000 (02:38 +0200)]
r600g: implement seamless_cube_map for evergreen
The r600/r700 support will follow soon.
Marek Olšák [Mon, 2 May 2011 00:37:46 +0000 (02:37 +0200)]
gallium: implement seamless cubemap extensions
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Fri, 6 May 2011 16:32:06 +0000 (18:32 +0200)]
mesa: handle TEXTURE_CUBE_MAP_SEAMLESS in SamplerParameter
Reviewed-by: Brian Paul <brianp@vmware.com>
Marek Olšák [Tue, 3 May 2011 09:37:25 +0000 (11:37 +0200)]
mesa: implement AMD_seamless_cubemap_per_texture
Alex Deucher [Fri, 6 May 2011 17:18:00 +0000 (13:18 -0400)]
r600g: avoid recursion in rv670 flush workaround
Should fix:
https://bugs.freedesktop.org/show_bug.cgi?id=36914
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Marcin Slusarz [Fri, 6 May 2011 17:06:20 +0000 (19:06 +0200)]
gallium/xorg st/nv50: add PIPE_BIND_CURSOR
We need to distinguish surfaces for mouse cursors from scanouts,
because nv50 hardware display engine ignores tiling flags.
Kostas Georgiou [Fri, 6 May 2011 16:44:24 +0000 (17:44 +0100)]
Add pci id for FirePro 2270
Signed-off-by: Kostas Georgiou <georgiou@opengamma.com>
Alex Deucher [Fri, 6 May 2011 17:02:24 +0000 (13:02 -0400)]
egl_dri2: add new radeon pci ids
There seriously needs to be a better way to do
this.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Kristian Høgsberg [Fri, 6 May 2011 14:31:18 +0000 (10:31 -0400)]
egl: Add a cursor use bit to MESA_drm_image
Benjamin Franzke [Sat, 30 Apr 2011 09:17:01 +0000 (11:17 +0200)]
egl/wayland-drm: Generalize interface
Do not depend on _EGLDisplay and _EGLImage.
nobled [Fri, 6 May 2011 07:39:24 +0000 (09:39 +0200)]
glx: Check flush DRI extension version at runtime
The DRI driver itself might not have version 3 of the
DRI2 flush extension, in which case this would've
pointed to out of bounds memory...
Alex Deucher [Thu, 5 May 2011 23:30:30 +0000 (19:30 -0400)]
r600g: add back SOURCE_FORMAT setting that get accidently dropped
Spotted by Henri Verbeet
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Alex Deucher [Thu, 5 May 2011 22:54:03 +0000 (18:54 -0400)]
r600g: fix up the rules for enabling SOURCE_FORMAT(EXPORT_NORM)
Setting SOURCE_FORMAT to EXPORT_NORM is an optimization.
Leaving SOURCE_FORMAT at 0 will work in all cases, but is less
efficient. The conditions for the setting the EXPORT_NORM
optimization are as follows:
R600/RV6xx:
BLEND_CLAMP is enabled
BLEND_FLOAT32 is disabled
11-bit or smaller UNORM/SNORM/SRGB
R7xx/evergreen:
11-bit or smaller UNORM/SNORM/SRGB
16-bit or smaller FLOAT
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Alex Deucher [Thu, 5 May 2011 22:45:55 +0000 (18:45 -0400)]
r600g: further r6xx cache flush fixes
Don't emit sync packets for additional CBs or DB.
Spotted by Fredrik Höglund.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Dave Airlie [Thu, 5 May 2011 22:40:08 +0000 (08:40 +1000)]
r600g: add rv670 flushing workaround.
Hopefully we can find out the proper fix for this, but for now
this makes the fbo mipmap tests pass on my rv670 (x2 card).
Signed-off-by: Dave Airlie <airlied@redhat.com>
Alex Deucher [Thu, 5 May 2011 07:17:16 +0000 (03:17 -0400)]
r600g: fix cache flushes on r6xx
r6xx asics have some problems with the surface
sync logic for the CB and DB. It's recommended
to use the event write interface for flushing
the DB/CB caches rather than the sync packets.
A single event write flush flushes all dst
caches, so we only need one for all CBs and DB.
Should fix:
https://bugs.freedesktop.org/show_bug.cgi?id=35312
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Marcin Slusarz [Thu, 5 May 2011 20:37:22 +0000 (22:37 +0200)]
mesa: don't call git if it's not git repository
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Marcin Slusarz [Thu, 5 May 2011 20:37:21 +0000 (22:37 +0200)]
mesa: don't touch git_sha1.h if sha1 didn't change
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Henri Verbeet [Thu, 5 May 2011 18:54:36 +0000 (20:54 +0200)]
r600g: Match alpha ref precision to color format precision.
This fixes piglit fbo-alphatest-formats on Evergreen.
Signed-off-by: Henri Verbeet <hverbeet@gmail.com>
Dave Airlie [Thu, 5 May 2011 06:23:46 +0000 (16:23 +1000)]
Revert "DRI2/GLX: make swap event handling match spec"
This reverts commit
70227e21bbd4411956ceeb5039640140e64a11a8.
revert this until we sort things out, with a new glproto release
with compatible struct names.
Dave Airlie [Tue, 3 May 2011 18:45:39 +0000 (20:45 +0200)]
r600g: do RV6xx base updates inline with state updates.
This seems more in line with what the documentation suggests we should be
doing. It doesn't fix the rv635 regression, though I thought it might,
so it means I've no idea whats actually going wrong there.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Jesse Barnes [Tue, 3 May 2011 19:17:28 +0000 (12:17 -0700)]
DRI2/GLX: make swap event handling match spec
We only handle a 32 bit swap count, so use the new structure definitions.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Jesse Barnes [Tue, 3 May 2011 17:20:14 +0000 (10:20 -0700)]
GLX: don't crash when indirect clients try to set an event mask
After sending the GLXChangeDrawableAttributes request, we also set a
local set of attributes on the DRI drawable. But in the indirect case
this array won't be present, so skip the setting in that case to avoid a
crash.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
José Fonseca [Wed, 4 May 2011 13:10:24 +0000 (14:10 +0100)]
scons: Add a few more human friendly messages.
José Fonseca [Wed, 4 May 2011 13:10:15 +0000 (14:10 +0100)]
mesa/gdi: Silence gcc warning about unused result.
José Fonseca [Tue, 3 May 2011 18:09:53 +0000 (19:09 +0100)]
st/wgl: Allow to create pbuffers bigger than the desktop.
We use a hidden window for pbuffer contexts, but Windows limits window
sizes to the desktop size by default. This means that creating a big
pbuffer on a small resolution single monitor would truncate the pbuffer
size to the desktop.
This change overrides the windows maximum size, allow to create windows
arbitrarily large.
José Fonseca [Mon, 18 Apr 2011 15:41:25 +0000 (16:41 +0100)]
st/wgl: Cope with zero width/height windows.
While ensuring the framebuffer area is never zero.
Brian Paul [Wed, 4 May 2011 00:56:20 +0000 (18:56 -0600)]
i915g: add const qualifier to silence warning
Brian Paul [Wed, 4 May 2011 00:19:49 +0000 (18:19 -0600)]
mesa: remove unused restart.[ch] files
_mesa_PrimitiveRestartIndex() is in varray.c and glPrimitiveRestart()
is handled in the vbo module.
Ian Romanick [Tue, 3 May 2011 16:50:53 +0000 (09:50 -0700)]
glsl: Remove extra newline from error message
Alex Deucher [Tue, 3 May 2011 20:12:04 +0000 (16:12 -0400)]
r600c: add some new pci ids
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Alex Deucher [Tue, 3 May 2011 19:26:07 +0000 (15:26 -0400)]
r600g: add some new pci ids
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Marcin Slusarz [Tue, 3 May 2011 09:45:01 +0000 (11:45 +0200)]
st/xorg: flush after loading the cursor
We need cursor data to land in destination buffer before drmModeSetCursor.
It fixes "cursor lag" on nv50.
Michel Dänzer [Tue, 3 May 2011 11:23:14 +0000 (13:23 +0200)]
gallium/draw: Fix enum type taken by draw_get_shader_param().
Pointed out by clang:
src/gallium/auxiliary/draw/draw_context.h:251:41: warning: implicit conversion
from enumeration type 'enum pipe_cap' to different enumeration type
'enum pipe_shader_cap' [-Wconversion]
return tgsi_exec_get_shader_param(param);
~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~
Marek Olšák [Mon, 2 May 2011 14:41:04 +0000 (16:41 +0200)]
mesa: implement AMD_shader_stencil_export
It's just an alias of the ARB variant with some GLSL compiler changes.
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Marek Olšák [Tue, 3 May 2011 09:54:40 +0000 (11:54 +0200)]
r600g: reorder caps
Marek Olšák [Tue, 3 May 2011 09:54:07 +0000 (11:54 +0200)]
r600g: set correct PIPE_CAP_MAX_COMBINED_SAMPLERS
Marek Olšák [Mon, 2 May 2011 10:59:24 +0000 (12:59 +0200)]
mesa: make AMD_draw_buffers_blend an alias of the ARB variant
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Marek Olšák [Mon, 2 May 2011 10:42:52 +0000 (12:42 +0200)]
glapi: regenerate files for AMD_draw_buffers_blend
Marek Olšák [Mon, 2 May 2011 10:33:08 +0000 (12:33 +0200)]
glapi: add functions for AMD_draw_buffers_blend
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Marek Olšák [Mon, 2 May 2011 15:13:59 +0000 (17:13 +0200)]
mesa: flush vertices before changing GL_RASTERIZER_DISCARD state, not after
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Marek Olšák [Mon, 2 May 2011 00:36:42 +0000 (02:36 +0200)]
mesa: make _NEW_TEXTURE dirty when changing GL_TEXTURE_CUBE_MAP_SEAMLESS
Otherwise there would be no way to know whether the state has been changed.
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Christoph Bumiller [Mon, 2 May 2011 21:55:05 +0000 (23:55 +0200)]
nv50,nvc0: advertise GL_FIXED vertex buffers as supported
We'll handle them like f64 vertex buffers, by falling back to
copying vertex data to the command buffer through translate.
Christoph Bumiller [Mon, 2 May 2011 22:00:55 +0000 (00:00 +0200)]
mesa,st/mesa: fix WPOS adjustment
Tested-by: Marek Olšák <maraeo@gmail.com>
Jon TURNEY [Fri, 29 Apr 2011 11:52:10 +0000 (12:52 +0100)]
Default to --disable-gallium-r300 if not --with-driver=dri
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Signed-off-by: Marek Olšák <maraeo@gmail.com>
Marek Olšák [Mon, 2 May 2011 00:04:17 +0000 (02:04 +0200)]
gallium: reorder fields of pipe_rasterizer_state to pack it more tightly
sizeof(struct pipe_rasterizer_state):
Before: 32 bytes
After: 28 bytes
Reviewed-by: Brian Paul <brianp@vmare.com>
Marek Olšák [Mon, 2 May 2011 15:11:46 +0000 (17:11 +0200)]
r600g: document some new evergreen formats
Marek Olšák [Mon, 2 May 2011 09:39:47 +0000 (11:39 +0200)]
r600g: remove some more FIXME comments
Michel Dänzer [Mon, 2 May 2011 07:36:49 +0000 (09:36 +0200)]
st/xorg: Fix two more instances of typo 'accle'.
Marcin Slusarz [Sun, 1 May 2011 21:51:10 +0000 (23:51 +0200)]
st/xorg: fix typos
Eric Anholt [Fri, 29 Apr 2011 22:59:30 +0000 (15:59 -0700)]
i965/gen6: Align interleaved URB writes for overflow outputs as well.
Fixes glsl-max-varyings.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=35614
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Marcin Slusarz [Mon, 25 Apr 2011 21:59:40 +0000 (23:59 +0200)]
targets/xorg-nouveau: load nouveau_dri.so instead of i915_dri.so
Marcin Slusarz [Mon, 25 Apr 2011 21:57:11 +0000 (23:57 +0200)]
targets/xorg-nouveau: add libnvc0.a to nouveau libs
Marek Olšák [Sun, 1 May 2011 23:43:33 +0000 (01:43 +0200)]
r600g: remove some FIXME comments
All texture LOD tests pass.
Marek Olšák [Sun, 1 May 2011 23:10:19 +0000 (01:10 +0200)]
Revert "r600g: truncate point sampled texture coordinates"
This reverts commit
1dc204d145dc8c0b19473a7814c201a8954b6274.
MC_COORD_TRUNCATE is for MPEG and produces quite an interesting behavior
on regular textures. Anyway that commit broke filtering in demos/cubemap.
Marek Olšák [Sun, 1 May 2011 12:31:41 +0000 (14:31 +0200)]
st/mesa: remove set-but-unused variables
Marek Olšák [Sun, 1 May 2011 12:13:09 +0000 (14:13 +0200)]
tgsi: remove set-but-unused variables
Marek Olšák [Sun, 1 May 2011 12:12:47 +0000 (14:12 +0200)]
draw: remove set-but-unused variable
Marek Olšák [Sun, 1 May 2011 12:01:59 +0000 (14:01 +0200)]
rbug: remove set-but-unused variables
Marek Olšák [Sun, 1 May 2011 11:44:00 +0000 (13:44 +0200)]
ir_to_mesa: remove set-but-unused variables
Marek Olšák [Sun, 1 May 2011 11:38:48 +0000 (13:38 +0200)]
mesa: remove set-but-unused variables in texcompress_s3tc
Marek Olšák [Sun, 1 May 2011 11:35:43 +0000 (13:35 +0200)]
mesa: remove set-but-unused variable in bind_attrib_location
Marek Olšák [Sun, 1 May 2011 11:33:38 +0000 (13:33 +0200)]
mesa: remove unused-but-set variable in extract_uint_rgba
Marek Olšák [Sun, 1 May 2011 11:31:46 +0000 (13:31 +0200)]
r300/compiler: remove set-but-unused variables
Marek Olšák [Sun, 1 May 2011 11:25:52 +0000 (13:25 +0200)]
r600g: remove set-but-unused variable
Marek Olšák [Sat, 30 Apr 2011 22:04:06 +0000 (00:04 +0200)]
r600g: remove FIXME comment
DONTBLOCK is correctly handled in r600_bo_map.
José Fonseca [Sat, 30 Apr 2011 21:36:18 +0000 (22:36 +0100)]
mesa: GL_PROVOKING_VERTEX_EXT is a GLenum, not GLboolean.
Tom Stellard [Sat, 30 Apr 2011 20:15:29 +0000 (13:15 -0700)]
r300/compiler: Cleanups from the regalloc merge
Tom Stellard [Sat, 30 Apr 2011 19:52:32 +0000 (12:52 -0700)]
r300/compiler: Add return statement to rc_list()
Tom Stellard [Sat, 30 Apr 2011 19:26:15 +0000 (12:26 -0700)]
r300g: Fix scons build
Broken by the dependency on ralloc introduced by
fe622bac0c1b5b9f2a9fcf9f35b51232a06bea42
Daniel Vetter [Sat, 30 Apr 2011 18:40:42 +0000 (20:40 +0200)]
i915g: enable X-tiling for s3tc textures
Tested-by: Christopher Egert <cme3000@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Tom Stellard [Tue, 26 Apr 2011 07:29:39 +0000 (00:29 -0700)]
r300/compiler: Enable swizzle packing in the allocator for r300 and r400
Tom Stellard [Mon, 18 Apr 2011 05:33:04 +0000 (22:33 -0700)]
r300/compiler: Handle loops in the register allocator
Tom Stellard [Tue, 12 Apr 2011 23:08:25 +0000 (16:08 -0700)]
r300/compiler: Handle loops in rc_get_readers()
Tom Stellard [Tue, 11 Jan 2011 08:05:08 +0000 (00:05 -0800)]
r300/compiler: Rewrite register allocator
The new allocator uses ra and does swizzle packing.
Also, a data structure (struct rc_variable) and associated functions have
been added for generating UD and DU chains.