mesa.git
14 years agoMerge branch 'mesa_7_7_branch'
Brian Paul [Tue, 5 Jan 2010 02:16:24 +0000 (19:16 -0700)]
Merge branch 'mesa_7_7_branch'

Conflicts:
docs/relnotes.html
src/gallium/drivers/llvmpipe/lp_tex_sample_c.c
src/gallium/drivers/r300/r300_cs.h
src/mesa/drivers/dri/i965/brw_wm_surface_state.c
src/mesa/main/enums.c

14 years agomesa: add missing _mesa_lock_texture() call
Brian Paul [Tue, 5 Jan 2010 02:05:31 +0000 (19:05 -0700)]
mesa: add missing _mesa_lock_texture() call

14 years agoi915: Use _MaxLevel on principle in texture setup.
Eric Anholt [Tue, 29 Dec 2009 23:55:34 +0000 (15:55 -0800)]
i915: Use _MaxLevel on principle in texture setup.

It was OK before because we proceed to clamp the value to hardware
limits, but given that other use of MaxLevel has been a trap, let's
avoid it.

14 years agointel: Fix CopyTexImage from tiled mipmap levels > 0.
Eric Anholt [Mon, 4 Jan 2010 17:39:07 +0000 (09:39 -0800)]
intel: Fix CopyTexImage from tiled mipmap levels > 0.

Fixes piglit fbo-copyteximage.

14 years agoi965: Fix the surface offset calculation for tiled buffers.
Eric Anholt [Mon, 4 Jan 2010 16:47:01 +0000 (08:47 -0800)]
i965: Fix the surface offset calculation for tiled buffers.

If we ever had a non-tile-aligned tiled renderbuffer, the math was all
off.  Use the existing x,y coordinates instead of trying to
reconstruct them from an incorrectly-calculated offset value.

14 years agor600: support vertex_array_bgra
Andre Maasikas [Tue, 29 Dec 2009 12:47:01 +0000 (14:47 +0200)]
r600: support vertex_array_bgra

Use vertex program key mechanism and swizzle during vertex fetch - is there
a better way?

14 years agomesa: added GL_DU8DV8_ATI in extract_float_rgba()
Brian Paul [Mon, 4 Jan 2010 20:59:43 +0000 (13:59 -0700)]
mesa: added GL_DU8DV8_ATI in extract_float_rgba()

Fixes warning seen with Shadowgrounds.  See bug 24016.

14 years agodocs: initial release notes for 7.7.1
Brian Paul [Mon, 4 Jan 2010 19:47:37 +0000 (12:47 -0700)]
docs: initial release notes for 7.7.1

14 years agomesa: Prevent possible array out-of-bounds access by _mesa_light.
Vinson Lee [Mon, 4 Jan 2010 20:06:04 +0000 (12:06 -0800)]
mesa: Prevent possible array out-of-bounds access by _mesa_light.

14 years agoi965g: Fix assert.
Vinson Lee [Mon, 4 Jan 2010 19:28:37 +0000 (11:28 -0800)]
i965g: Fix assert.

14 years agotgsi: Fix assert.
Vinson Lee [Mon, 4 Jan 2010 19:25:38 +0000 (11:25 -0800)]
tgsi: Fix assert.

14 years agoMerge branch 'gallium-conditional-rendering'
Brian Paul [Mon, 4 Jan 2010 18:47:39 +0000 (11:47 -0700)]
Merge branch 'gallium-conditional-rendering'

14 years agomesa: regenerated enums.c file
Brian Paul [Mon, 4 Jan 2010 18:29:38 +0000 (11:29 -0700)]
mesa: regenerated enums.c file

14 years agoglapi: comment-out TIMEOUT_IGNORED
Brian Paul [Mon, 4 Jan 2010 18:29:09 +0000 (11:29 -0700)]
glapi: comment-out TIMEOUT_IGNORED

This is not really a GLenum value.

14 years agoglsl: use varName variable in _slang_gen_assignment()
Brian Paul [Tue, 29 Dec 2009 17:26:28 +0000 (10:26 -0700)]
glsl: use varName variable in _slang_gen_assignment()

14 years agomesa: more detailed error message in extract_float_rgba()
Brian Paul [Mon, 4 Jan 2010 18:26:56 +0000 (11:26 -0700)]
mesa: more detailed error message in extract_float_rgba()

14 years agofix overflow
Alan Hourihane [Mon, 4 Jan 2010 17:41:49 +0000 (17:41 +0000)]
fix overflow

14 years agost/mesa: Only call st_texture_image_unmap() if texImage->Data is non-NULL.
Michel Dänzer [Mon, 4 Jan 2010 15:54:29 +0000 (16:54 +0100)]
st/mesa: Only call st_texture_image_unmap() if texImage->Data is non-NULL.

This was already done in st_TexImage() but was missed between incremental
changes to st_TexSubimage().

14 years agosilence compiler warning
Alan Hourihane [Mon, 4 Jan 2010 12:42:51 +0000 (12:42 +0000)]
silence compiler warning

14 years agoFix test
Alan Hourihane [Mon, 4 Jan 2010 12:41:33 +0000 (12:41 +0000)]
Fix test

14 years agosvga: Fix debug build crash when rendering to depth/stencil renderbuffer only.
Michel Dänzer [Mon, 4 Jan 2010 12:05:43 +0000 (13:05 +0100)]
svga: Fix debug build crash when rendering to depth/stencil renderbuffer only.

14 years agost/xorg: Proper calculation of screen pitch.
Michel Dänzer [Mon, 4 Jan 2010 12:04:05 +0000 (13:04 +0100)]
st/xorg: Proper calculation of screen pitch.

14 years agovmware/xorg: Fix SCons build.
Michel Dänzer [Mon, 4 Jan 2010 12:02:40 +0000 (13:02 +0100)]
vmware/xorg: Fix SCons build.

14 years agor600: support vertex_array_bgra
Andre Maasikas [Tue, 29 Dec 2009 12:47:01 +0000 (14:47 +0200)]
r600: support vertex_array_bgra

Use vertex program key mechanism and swizzle during vertex fetch - is there
a better way?

14 years agor300: Use C-style comments.
Vinson Lee [Mon, 4 Jan 2010 07:33:32 +0000 (23:33 -0800)]
r300: Use C-style comments.

14 years agoprogs/egl: Silence uninitialized variable warnings.
Vinson Lee [Mon, 4 Jan 2010 05:39:20 +0000 (21:39 -0800)]
progs/egl: Silence uninitialized variable warnings.

14 years agoprogs/samples: Silence compiler warnings.
Vinson Lee [Mon, 4 Jan 2010 05:29:33 +0000 (21:29 -0800)]
progs/samples: Silence compiler warnings.

14 years agor300: Silence 'mixed declarations and code' warnings.
Vinson Lee [Mon, 4 Jan 2010 04:51:23 +0000 (20:51 -0800)]
r300: Silence 'mixed declarations and code' warnings.

14 years agoOnly enable verbose NoOp dispatch if DEBUG is defined
Kristian Høgsberg [Mon, 4 Jan 2010 04:24:13 +0000 (23:24 -0500)]
Only enable verbose NoOp dispatch if DEBUG is defined

By default we generate a function per GL entry point to warn if it's
called without a context set.  This is to allow the function to print
it's name in the warning.  By using a generic function that doesn't print
the function name in the non-DEBUG case, we reduce libGL size from
320008 bytes to 283144 bytes (11%).

14 years agor300: Silence 'mixed declarations and code' warning.
Vinson Lee [Mon, 4 Jan 2010 04:16:59 +0000 (20:16 -0800)]
r300: Silence 'mixed declarations and code' warning.

14 years agoNoop dispatch: move warning code out of the generated functions
Kristian Høgsberg [Mon, 4 Jan 2010 03:46:43 +0000 (22:46 -0500)]
Noop dispatch: move warning code out of the generated functions

This reduces libGL size by 11% here, going from 360968 bytes to
320008 bytes.

14 years agor300: Silence 'mixed declarations and code' warning.
Vinson Lee [Mon, 4 Jan 2010 02:32:07 +0000 (18:32 -0800)]
r300: Silence 'mixed declarations and code' warning.

14 years agor300g: Silence 'mixed declarations and code' warning.
Vinson Lee [Mon, 4 Jan 2010 02:05:12 +0000 (18:05 -0800)]
r300g: Silence 'mixed declarations and code' warning.

14 years agoFix glut to work with -fvisibility=hidden
Kristian Høgsberg [Mon, 4 Jan 2010 01:59:52 +0000 (20:59 -0500)]
Fix glut to work with -fvisibility=hidden

The GLUTAPI #define used in the header file to mark the font structs
visible wasn't kicking in because of the #define glutBitmap9By15 XXX
prior to #include <GL/glut.h>.  High quality code... worked around by
copying the GLUTAPI specifier to the invidual C files.

14 years agoExport a few glapi functions used by gallium and r300
Kristian Høgsberg [Mon, 4 Jan 2010 00:53:01 +0000 (19:53 -0500)]
Export a few glapi functions used by gallium and r300

Fixes breakage from -fvisibility-hidden commit.

14 years agor300g: Remove comma at end of enumerator list.
Vinson Lee [Sun, 3 Jan 2010 23:07:35 +0000 (15:07 -0800)]
r300g: Remove comma at end of enumerator list.

14 years agollvmpipe: Remove comma at end of enumerator list.
Vinson Lee [Sun, 3 Jan 2010 22:42:36 +0000 (14:42 -0800)]
llvmpipe: Remove comma at end of enumerator list.

14 years agoCompile with -fvisibility-hidden by default
Kristian Høgsberg [Sat, 2 Jan 2010 23:59:54 +0000 (18:59 -0500)]
Compile with -fvisibility-hidden by default

We have all functions that need to be visible marked with PUBLIC and
this is trimming around 4% off the DRI driver .so size.

14 years agomesa: Cope with the degenerate case of zero length ranges.
José Fonseca [Sun, 3 Jan 2010 19:58:54 +0000 (19:58 +0000)]
mesa: Cope with the degenerate case of zero length ranges.

Fixes assertion failures on glean's bufferObject test.

14 years agogdi: Don't generate import libraries for opengl32.dll.
José Fonseca [Fri, 1 Jan 2010 21:54:01 +0000 (21:54 +0000)]
gdi: Don't generate import libraries for opengl32.dll.

Both MinGW and MSVC include opengl32 import libraries, and its safer to
always use those.

14 years agomesa: fix blend enable/disable calls in meta.c code
Francis Galiegue [Sun, 3 Jan 2010 16:42:17 +0000 (09:42 -0700)]
mesa: fix blend enable/disable calls in meta.c code

Fixes regression in some DRI drivers since the GL_EXT_draw_buffers2 changes.

Signed-off-by: Brian Paul <brianp@vmware.com>
14 years agoapple: Purge existing (not working) GLX_USE_APPLEGL from dated libGL on OSX
Jeremy Huddleston [Thu, 24 Dec 2009 16:47:29 +0000 (08:47 -0800)]
apple: Purge existing (not working) GLX_USE_APPLEGL from dated libGL on OSX

Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
14 years agoglxcmds: Fix comment about __DRI_ALLOCATE
Jeremy Huddleston [Thu, 24 Dec 2009 17:20:33 +0000 (09:20 -0800)]
glxcmds: Fix comment about __DRI_ALLOCATE

Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
14 years agotrace: Remove comma at end of enumerator list.
Vinson Lee [Sun, 3 Jan 2010 11:06:33 +0000 (03:06 -0800)]
trace: Remove comma at end of enumerator list.

14 years agortasm: Play nicely with Windows's Data Execution Prevention.
José Fonseca [Sun, 3 Jan 2010 11:02:12 +0000 (11:02 +0000)]
rtasm: Play nicely with Windows's Data Execution Prevention.

14 years agoprogs/vp: Ensure null-terminated byte string.
Vinson Lee [Sun, 3 Jan 2010 10:38:22 +0000 (02:38 -0800)]
progs/vp: Ensure null-terminated byte string.

14 years agoprogs/tests: Silence uninitialized variable warning.
Vinson Lee [Sun, 3 Jan 2010 05:58:40 +0000 (21:58 -0800)]
progs/tests: Silence uninitialized variable warning.

14 years agoprogs/tests: Silence warn_unused_result warning.
Vinson Lee [Sun, 3 Jan 2010 05:52:51 +0000 (21:52 -0800)]
progs/tests: Silence warn_unused_result warning.

14 years agoi810: Fix include recursion.
Vinson Lee [Sun, 3 Jan 2010 05:05:06 +0000 (21:05 -0800)]
i810: Fix include recursion.

14 years agosis: ifdef out unused variable.
Vinson Lee [Sun, 3 Jan 2010 04:47:15 +0000 (20:47 -0800)]
sis: ifdef out unused variable.

Silences GCC warning.

14 years agost/xorg: Ensure null-terminated byte string.
Vinson Lee [Sun, 3 Jan 2010 04:39:04 +0000 (20:39 -0800)]
st/xorg: Ensure null-terminated byte string.

14 years agor300g: Use C-style comments.
Vinson Lee [Sun, 3 Jan 2010 04:17:43 +0000 (20:17 -0800)]
r300g: Use C-style comments.

14 years agoglu/sgi: Initialize members of struct O_curve.
Vinson Lee [Sun, 3 Jan 2010 04:04:00 +0000 (20:04 -0800)]
glu/sgi: Initialize members of struct O_curve.

14 years agosvga: Use a shader id as low as possible.
José Fonseca [Sun, 3 Jan 2010 00:47:30 +0000 (00:47 +0000)]
svga: Use a shader id as low as possible.

14 years agoutil: Minor enhancements/corrections to the bitmask logic.
José Fonseca [Sun, 3 Jan 2010 00:41:01 +0000 (00:41 +0000)]
util: Minor enhancements/corrections to the bitmask logic.

14 years agosvga: Rename error labels.
José Fonseca [Sat, 2 Jan 2010 21:46:42 +0000 (21:46 +0000)]
svga: Rename error labels.

Make it easier to insert/remove error branches.

14 years agoglu/sgi: Initialize members of struct O_surface.
Vinson Lee [Sat, 2 Jan 2010 23:46:11 +0000 (15:46 -0800)]
glu/sgi: Initialize members of struct O_surface.

14 years agoglu/sgi: Initialize member of struct O_trim.
Vinson Lee [Sat, 2 Jan 2010 23:29:25 +0000 (15:29 -0800)]
glu/sgi: Initialize member of struct O_trim.

14 years agogallium: Hunt down all references to GALLIUM_AUXILIARY_DIRS.
José Fonseca [Sat, 2 Jan 2010 20:22:52 +0000 (20:22 +0000)]
gallium: Hunt down all references to GALLIUM_AUXILIARY_DIRS.

14 years agoautoconf: fix build breakage
Marc Dietrich [Sat, 2 Jan 2010 12:51:17 +0000 (13:51 +0100)]
autoconf: fix build breakage

14 years agomesa: added _mesa_GetBufferParameteri64v()
Brian Paul [Sat, 2 Jan 2010 00:50:02 +0000 (17:50 -0700)]
mesa: added _mesa_GetBufferParameteri64v()

This is a new function in GL 3.2.  No dispatch for this function yet.

14 years agoglu/sgi: Initialize member of struct Property.
Vinson Lee [Sat, 2 Jan 2010 07:01:03 +0000 (23:01 -0800)]
glu/sgi: Initialize member of struct Property.

14 years agoprogs/samples: 'Silence no previous prototype' warnings.
Vinson Lee [Sat, 2 Jan 2010 01:54:11 +0000 (17:54 -0800)]
progs/samples: 'Silence no previous prototype' warnings.

14 years agoglu/sgi: Initialize member of struct Dlnode.
Vinson Lee [Sat, 2 Jan 2010 01:25:16 +0000 (17:25 -0800)]
glu/sgi: Initialize member of struct Dlnode.

14 years agoglu/sgi: Initialize members of struct O_nurbscurve.
Vinson Lee [Sat, 2 Jan 2010 01:19:27 +0000 (17:19 -0800)]
glu/sgi: Initialize members of struct O_nurbscurve.

14 years agoscons: Build glew on all platforms.
José Fonseca [Sat, 2 Jan 2010 01:12:35 +0000 (01:12 +0000)]
scons: Build glew on all platforms.

It is required for progs.

14 years agox86: Silence printf format warnings.
Vinson Lee [Sat, 2 Jan 2010 01:06:16 +0000 (17:06 -0800)]
x86: Silence printf format warnings.

14 years agoscons: Update the MSVC SA to match latest scons code.
José Fonseca [Sat, 2 Jan 2010 00:56:01 +0000 (00:56 +0000)]
scons: Update the MSVC SA to match latest scons code.

14 years agoscons: Axe generic.py.
José Fonseca [Sat, 2 Jan 2010 00:55:29 +0000 (00:55 +0000)]
scons: Axe generic.py.

Progs are now built together with the rest so no longer needed.

14 years agoprogs/rbug: s/wait/rbug_wait/
Vinson Lee [Sat, 2 Jan 2010 00:25:37 +0000 (16:25 -0800)]
progs/rbug: s/wait/rbug_wait/

wait conflicts with wait in /usr/include/sys/wait.h.

14 years agollvmpipe: Silence uninitialized variable warning.
Vinson Lee [Sat, 2 Jan 2010 00:03:53 +0000 (16:03 -0800)]
llvmpipe: Silence uninitialized variable warning.

14 years agoscons: Put glut and glew shared libraries into build/xxx/bin or lib.
José Fonseca [Fri, 1 Jan 2010 22:35:28 +0000 (22:35 +0000)]
scons: Put glut and glew shared libraries into build/xxx/bin or lib.

Use bin subdir for windows dlls, lib for unices.

14 years agopython: Don't generate a import library for python module either.
José Fonseca [Fri, 1 Jan 2010 22:03:07 +0000 (22:03 +0000)]
python: Don't generate a import library for python module either.

14 years agoi965: Add missing include.
José Fonseca [Fri, 1 Jan 2010 21:58:21 +0000 (21:58 +0000)]
i965: Add missing include.

14 years agoscons: Remove duplicated code.
José Fonseca [Fri, 1 Jan 2010 21:55:08 +0000 (21:55 +0000)]
scons: Remove duplicated code.

14 years agoscons: Disable version symlinking for DLLs.
José Fonseca [Fri, 1 Jan 2010 21:54:51 +0000 (21:54 +0000)]
scons: Disable version symlinking for DLLs.

Fixes windows build.

14 years agogdi: Don't generate import libraries for opengl32.dll.
José Fonseca [Fri, 1 Jan 2010 21:54:01 +0000 (21:54 +0000)]
gdi: Don't generate import libraries for opengl32.dll.

Both MinGW and MSVC include opengl32 import libraries, and its safer to
always use those.

14 years agoscons: Fix glew build on MSVC.
José Fonseca [Fri, 1 Jan 2010 19:58:39 +0000 (19:58 +0000)]
scons: Fix glew build on MSVC.

The environment for building the DLL needs to be quite different from
the environment for building the programs, in order to get
the dllexport/dllimport attribute done currectly. I don't know how MinGW
managed to build the programs, but MS linker refuses to link symbols with
mismatching attributes.

14 years agoutil: Silent potential loss of precision warnings.
José Fonseca [Fri, 1 Jan 2010 19:39:09 +0000 (19:39 +0000)]
util: Silent potential loss of precision warnings.

Also ensure multiplication doesn't happen for negative numbers.

14 years agollvmpipe: Use C-style comment.
Vinson Lee [Fri, 1 Jan 2010 23:38:19 +0000 (15:38 -0800)]
llvmpipe: Use C-style comment.

14 years agogallium/util: Silence format warnings.
Vinson Lee [Fri, 1 Jan 2010 23:32:52 +0000 (15:32 -0800)]
gallium/util: Silence format warnings.

14 years agoARB prog parser: Silence unused variable warnings.
Vinson Lee [Fri, 1 Jan 2010 23:12:58 +0000 (15:12 -0800)]
ARB prog parser: Silence unused variable warnings.

14 years agogallium/util: Replace h_addr with h_addr_list[0].
Vinson Lee [Fri, 1 Jan 2010 23:01:22 +0000 (15:01 -0800)]
gallium/util: Replace h_addr with h_addr_list[0].

Fixes compilation error on Mac OS.

14 years agoglu/sgi: Initialize members of class Knotvector.
Vinson Lee [Fri, 1 Jan 2010 22:46:11 +0000 (14:46 -0800)]
glu/sgi: Initialize members of class Knotvector.

14 years agoglu/sgi: Initialize member of struct Property.
Vinson Lee [Fri, 1 Jan 2010 22:39:16 +0000 (14:39 -0800)]
glu/sgi: Initialize member of struct Property.

14 years agotgsi: Add missing semantic name in text parser.
Igor Oliveira [Fri, 1 Jan 2010 18:03:27 +0000 (19:03 +0100)]
tgsi: Add missing semantic name in text parser.

14 years agor300: Fix scons build.
José Fonseca [Fri, 1 Jan 2010 00:35:43 +0000 (00:35 +0000)]
r300: Fix scons build.

14 years agoscons: Don't list cell as a driver.
José Fonseca [Fri, 1 Jan 2010 00:22:48 +0000 (00:22 +0000)]
scons: Don't list cell as a driver.

Cell driver's SConscript never got written, and it is not trivial one to
write, so don't accept cell in the driver option to avoid confusion.

14 years agollvmpipe: Add missing include path.
José Fonseca [Fri, 1 Jan 2010 00:20:52 +0000 (00:20 +0000)]
llvmpipe: Add missing include path.

The abscense was being masked previously.

14 years agogallium: Generate a single library for auxiliaries with Make too.
José Fonseca [Thu, 31 Dec 2009 23:46:46 +0000 (23:46 +0000)]
gallium: Generate a single library for auxiliaries with Make too.

14 years agoscons: Aggregate all tiny libraries in a single library.
José Fonseca [Thu, 31 Dec 2009 22:18:17 +0000 (22:18 +0000)]
scons: Aggregate all tiny libraries in a single library.

Makes integration of gallium into out of tree components much easier. No
pratical change for components in this tree,

14 years agogallium: Remove the sct module.
José Fonseca [Thu, 31 Dec 2009 21:41:24 +0000 (21:41 +0000)]
gallium: Remove the sct module.

Not used, and its functionality is now addressed by
pipe_context::is_texture/buffer_referenced callbacks.

14 years agoscons: Build progs together with everything else.
José Fonseca [Thu, 31 Dec 2009 21:10:25 +0000 (21:10 +0000)]
scons: Build progs together with everything else.

This is a substantial reorganization, This particular commit enables:
- building the progs for unices platforms
- glew is now built as a shared library (it is the default, and it is
inconvenient and pointless to shift away from that default)
- all progs get built by default

14 years agoprogs: Ignore derived files.
José Fonseca [Thu, 31 Dec 2009 20:55:33 +0000 (20:55 +0000)]
progs: Ignore derived files.

14 years agoglsl: Ignore programs.
José Fonseca [Thu, 31 Dec 2009 20:52:06 +0000 (20:52 +0000)]
glsl: Ignore programs.

14 years agoscons: Don't globally define WIN32_LEAN_AND_MEAN.
José Fonseca [Thu, 31 Dec 2009 20:19:18 +0000 (20:19 +0000)]
scons: Don't globally define WIN32_LEAN_AND_MEAN.

Some of the demo progams legitimately need the functionality
that's disabled by WIN32_LEAN_AND_MEAN.

Instead the solution should be to define WIN32_LEAN_AND_MEAN just before
including windows.h on a case by case basis.

14 years agomesa: Avoid WIN32_LEAN_AND_MEAN re-definition.
José Fonseca [Thu, 31 Dec 2009 20:14:30 +0000 (20:14 +0000)]
mesa: Avoid WIN32_LEAN_AND_MEAN re-definition.

14 years agomesa: Make condrender.[ch] prototypes match.
José Fonseca [Fri, 1 Jan 2010 11:20:38 +0000 (11:20 +0000)]
mesa: Make condrender.[ch] prototypes match.

GLAPI on windows is more than "extern" -- it includes the --, so the
mismatch between condrender.[ch] prototypes causes "different linkage"
errors on windows.

14 years agoscons: Expose convienience libraries to the host environment.
José Fonseca [Thu, 31 Dec 2009 17:58:56 +0000 (17:58 +0000)]
scons: Expose convienience libraries to the host environment.

This fixes MinGW cross compilation build, recently broken due to the use
of convenience libraries in the GLSL preprocessor.

14 years agoglut: Silent the glut*_ATEXIT_HACK defined but not used warnings.
José Fonseca [Thu, 31 Dec 2009 17:53:23 +0000 (17:53 +0000)]
glut: Silent the glut*_ATEXIT_HACK defined but not used warnings.

There are two ways to silent this: put inline keyword, or reimplement the
hack as a #define. inline keyword actually varies slightly with compiler
so I've opted by the latter.