Eric Anholt [Thu, 17 Jan 2008 19:25:04 +0000 (11:25 -0800)]
[965] Fix potential segfaults from bad realloc.
C has no order of evaluation restrictions on function arguments, so we
attempted to realloc from new-size to new-size.
Xiang, Haihao [Thu, 17 Jan 2008 03:05:24 +0000 (11:05 +0800)]
i965: always call dri_emit_reloc when creating clip unit state
This fix ensures it gets the starting location of the clip program
if a clip unit state is same as a unit which is created when metaops
is actived and it doesn't impact metaops because the clip state offset
isn't emitted when metaops is actived.
Eric Anholt [Wed, 16 Jan 2008 23:07:10 +0000 (15:07 -0800)]
[965] Fix inversion of SLT/SGE results in vertex programs.
The WM code had this right, so copy its behavior. This reverts a flipping
of the arguments to SLT in brw_vs_tnl which came in with the GLSL code that
probably occurred to work around the flipped results, and brings the code back
in line with t_vp_build.c.
Eric Anholt [Wed, 16 Jan 2008 18:50:28 +0000 (10:50 -0800)]
[965] Rename depth_mask in CC key to depth_write, since it's a boolean enable.
Eric Anholt [Wed, 16 Jan 2008 18:46:35 +0000 (10:46 -0800)]
[965] Fix the type of alpha_ref in CC key, fixing ppracer rendering.
Dan Nicholson [Wed, 16 Jan 2008 06:52:25 +0000 (22:52 -0800)]
autoconf: Use -fno-strict-aliasing on GCC
This change adds -fno-strict-aliasing when using gcc and g++, just like
the existing configs.
Eric Anholt [Tue, 15 Jan 2008 23:09:21 +0000 (15:09 -0800)]
Fix the compile of disabled DEBUG_PARSING code.
Eric Anholt [Tue, 15 Jan 2008 23:08:34 +0000 (15:08 -0800)]
Bug #13492: Only call ProgramStringNotify if program parsing succeeded.
Wine intentionally tries some out-of-spec programs to test strictness, and
calling ProgramStringNotify on the results of a failed program parse resulted
in crashes in the 965 driver.
Eric Anholt [Tue, 15 Jan 2008 18:12:38 +0000 (10:12 -0800)]
[965] Increase max relocation count, fixing assertions by blender.
Kristian Høgsberg [Tue, 15 Jan 2008 15:23:15 +0000 (10:23 -0500)]
[i915] Prevent recursive batchbuffer flushing.
Workaround for recursive batchbuffer flushing: If the window is
moved, we can get into a case where we try to flush during a
flush. What happens is that when we try to grab the lock for
the first flush, we detect that the window moved which then
causes another flush (from the intel_draw_buffer() call in
intelUpdatePageFlipping()). To work around this we reset the
batchbuffer tail pointer before trying to get the lock. This
prevent the nested buffer flush, but a better fix would be to
avoid that in the first place.
Zou Nan hai [Tue, 15 Jan 2008 07:19:09 +0000 (15:19 +0800)]
i965: fix an assert fail in brw_new_batch
Eric Anholt [Mon, 14 Jan 2008 23:19:43 +0000 (15:19 -0800)]
[i915] Fix recursive lock hang in intelContendedLock handling.
Eric Anholt [Sat, 12 Jan 2008 01:03:51 +0000 (17:03 -0800)]
[intel] Delay unmapping of driver-private buffers to reduce map/unmap thrashing.
Good for a 10-15% improvement to OA.
Eric Anholt [Sat, 12 Jan 2008 00:00:50 +0000 (16:00 -0800)]
[965] Force a new vertex upload buffer at new batch time.
Otherwise, we could choose to upload into the temporary VBO that we just fired
off to the hardware. Good for a 60% OA performance improvement.
Dan Nicholson [Sun, 30 Dec 2007 16:41:53 +0000 (08:41 -0800)]
Allow osmesa to be enabled or disabled
The conditional in src/mesa/Makefile currently hardcodes the cases where
libOSMesa can be built on libGL. Likewise, the xlib case always includes
libOSMesa in the stand-alone target.
This changes the conditional to a loop over the DRIVER_DIRS variable.
This means that any driver configuration can enable or disable osmesa.
The current "stand-alone" rule is changed so that DRIVER_DIRS=x11 and
DRIVER_DIRS="x11 osmesa" are both respected.
The configure option is changed to --enable-gl-osmesa as this change
allows libOSMesa to be built upon any of the libGL-enabling drivers.
Eric Anholt [Thu, 10 Jan 2008 23:05:39 +0000 (15:05 -0800)]
[965] Remove an open-coded memcpy.
Eric Anholt [Thu, 10 Jan 2008 22:50:06 +0000 (14:50 -0800)]
[intel] Remove gratuitous (batchbuffer) flush before doing buffer clears.
Increases OA performance by about 3%.
Eric Anholt [Thu, 10 Jan 2008 22:43:43 +0000 (14:43 -0800)]
[intel] Report buffer size when allocating with INTEL_DEBUG=bufmgr and TTM.
Eric Anholt [Thu, 10 Jan 2008 22:43:16 +0000 (14:43 -0800)]
[965] Improve performance by allocating CURBE buffers a page at a time.
Since each one is only 64b, and kernel allocations are a page anyway, this
lets us reduce buffer allocation by packing many CURBEs into one buffer, for
each batchbuffer submitted. Improves openarena performance by around 10%.
Eric Anholt [Thu, 10 Jan 2008 21:46:49 +0000 (13:46 -0800)]
[intel] Remove a gratuitous flush at the end of ClearWithTris.
Eric Anholt [Thu, 10 Jan 2008 21:24:14 +0000 (13:24 -0800)]
[intel] Only flush batch when changing draw buffers, not every cliprect update.
The previous code would reference freed memory on window moves.
Eric Anholt [Thu, 10 Jan 2008 18:48:05 +0000 (10:48 -0800)]
[intel] Add more cliprect modes to cover other meanings for batch emits.
The previous change gave us only two modes, one which looped over the batch
per cliprect (3d drawing) and one that didn't (state updeast).
However, we really want 4:
- Batch doesn't care about cliprects (state updates)
- Batch needs DRAWING_RECTANGLE looping per cliprect (3d drawing)
- Batch needs to be executed just once (region fills, copies, etc.)
- Batch already includes cliprect handling, and must be flushed by unlock time
(copybuffers, clears).
All callers should now be fixed to use one of these states for any batchbuffer
emits. Thanks to Keith Whitwell for pointing out the failure.
Xiang, Haihao [Thu, 10 Jan 2008 08:48:33 +0000 (16:48 +0800)]
i965: fix bug #14002
Xiang, Haihao [Thu, 10 Jan 2008 08:45:35 +0000 (16:45 +0800)]
Kristian Høgsberg [Wed, 9 Jan 2008 21:55:32 +0000 (16:55 -0500)]
[intel] Simplify intelCreateBuffer() a bit.
Drop a bunch of unused arguments from intel_create_renderbuffer() and
introduce intel_renderbuffer_set_region() to set the region for
a renderbuffer.
Kristian Høgsberg [Thu, 10 Jan 2008 01:43:06 +0000 (20:43 -0500)]
[intel] Prepare intelCopyBuffer() for private back buffers.
Kristian Høgsberg [Wed, 9 Jan 2008 23:04:19 +0000 (18:04 -0500)]
Factor out code to do the DRM_I830_GETPARAM ioctl.
Kristian Høgsberg [Wed, 9 Jan 2008 20:55:05 +0000 (15:55 -0500)]
Fold DoBindContext() helper function into driBindContext().
Eric Anholt [Wed, 9 Jan 2008 22:30:09 +0000 (14:30 -0800)]
[intel] Re-allocate backing buffer objects on BufferData.
This may allow better concurrency (noop in openarena performance now), but is
also important for the previous commit -- otherwise, we may end up with
BufferData, draw_prims, BufferData and the draw_prims would use the new VBO
data instead of old. This could still occur with user-supplied VBOs and poor
use of MapBuffer without BufferData.
Eric Anholt [Wed, 9 Jan 2008 22:21:52 +0000 (14:21 -0800)]
[965] Allow more than one draw_prims per batchbuffer.
The comment about (vbo)_exec_api.c appeared to be stale, as the VBO code seems
to only use non-named VBOs (not actual VBOs) or freshly-allocated VBO data.
This brings a 2x speedup to openarena, because we can submit nearly-full
batchbuffers instead of many 450-byte ones.
Eric Anholt [Wed, 9 Jan 2008 22:08:12 +0000 (14:08 -0800)]
[965] Replace the always_update dirty flag with BRW_NEW_BATCH.
This allows us to avoid re-emitting some state when validate_state happens
multiple times per batchbuffer. Even though we flush batch per primitive
currently, that may still happen already if the primitive changed (this should
probably be fixed as well).
Eric Anholt [Wed, 9 Jan 2008 21:40:40 +0000 (13:40 -0800)]
[intel] Rename lost_hardware vtbl entry to new_batch.
Both drivers have ended up relying on lost_hardware being called after each
batch buffer, so update the name. This removes one of the calls on 965 whic
h was outside of the batchbuffer handling code and just duplicating what had
already happened through batchbuffer handling.
Eric Anholt [Wed, 9 Jan 2008 21:24:29 +0000 (13:24 -0800)]
[965] Remove drawing rect upload, which is handled (better) by the kernel.
Eric Anholt [Wed, 9 Jan 2008 20:33:39 +0000 (12:33 -0800)]
[intel] Clean up cliprect handling in intel drivers.
In particular, batch buffers are no longer flushed when switching from
CLIPRECTS to NO_CLIPRECTS or vice versa, and 965 just uses DRM cliprect
handling for primitives instead of trying to sneak in its own to avoid the
DRM stuff. The disadvantage is that we will re-execute state updates per
cliprect, but the advantage is that we will be able to accumulate larger
batch buffers, which were proving to be a major overhead.
Eric Anholt [Wed, 9 Jan 2008 20:41:14 +0000 (12:41 -0800)]
[intel] Remove the dead intel->need_flush member.
Eric Anholt [Wed, 9 Jan 2008 00:20:28 +0000 (16:20 -0800)]
[965] Clarify a bit of index buffer upload code.
Brian [Wed, 9 Jan 2008 21:19:50 +0000 (14:19 -0700)]
fix bug 13978: glDrawBuffersARB() didn't set all necessary state
Eric Anholt [Fri, 4 Jan 2008 23:55:59 +0000 (15:55 -0800)]
[intel] Add TTM bufmgr debug for type or offset migration of buffers.
Xiang, Haihao [Mon, 7 Jan 2008 06:08:36 +0000 (14:08 +0800)]
i915: Keith Whitwell's swizzling TEX patch. fix #8283
Brian [Mon, 7 Jan 2008 01:07:26 +0000 (18:07 -0700)]
Replace gl_framebuffer's _ColorDrawBufferMask with _ColorDrawBufferIndexes
Each array element is now a BUFFER_x token rather than a BUFFER_BIT_x bitmask.
The number of active color buffers is specified by _NumColorDrawBuffers.
This builds on the previous DrawBuffer changes and will help with drivers
implementing GL_ARB_draw_buffers.
Brian [Sun, 6 Jan 2008 17:43:20 +0000 (10:43 -0700)]
Simplify ctx->_NumColorDrawBuffers, _ColorDrawBuffers and fix bug 13835.
These fields are no longer indexed by shader output. Now, we just have
a simple array of renderbuffer pointers.
If the shader writes to gl_FragData[i], send those colors to the N
_ColorDrawBuffers. Otherwise, replicate the single gl_FragColor (or
the fixed-function color) to the N _ColorDrawBuffers.
A few more changes and simplifications can follow from this...
Brian [Sat, 5 Jan 2008 22:37:27 +0000 (15:37 -0700)]
fix depth/1 typo in glTexImage3D proxy code
Brian [Fri, 4 Jan 2008 00:17:22 +0000 (17:17 -0700)]
check if span length > 0 before calling _swrast_write_rgba_span()
Xiang, Haihao [Fri, 4 Jan 2008 09:11:39 +0000 (17:11 +0800)]
i915: don't validate PS program when falling back to software
rendering. fix #12786
Xiang, Haihao [Fri, 4 Jan 2008 06:22:23 +0000 (14:22 +0800)]
intel: some initialization for dri_bufmgr_ttm
Eric Anholt [Fri, 4 Jan 2008 00:08:40 +0000 (16:08 -0800)]
[intel] Add a single-entry relocation buffer cache.
By avoiding the repeated relocation buffer creation/map/unmap/destroy for each
new batch buffer, this improves OpenArena framerates by 30%. Caching batch
buffers themselves doesn't appear to be a significant performance win over
this change.
Eric Anholt [Thu, 3 Jan 2008 00:55:21 +0000 (16:55 -0800)]
[intel] Convert relocations to not be cleared out on buffer submit.
We have two consumers of relocations. One is static state buffers, which
want the same relocation every time. The other is the batchbuffer, which gets
thrown out immediately after submit. This lets us reduce repeated computation
for static state buffers, and clean up the code by moving relocations nearer
to where the state buffer is computed.
Eric Anholt [Thu, 3 Jan 2008 22:47:35 +0000 (14:47 -0800)]
[965] Fix some missing initialization in WM keys.
Zou Nan hai [Thu, 3 Jan 2008 08:05:27 +0000 (16:05 +0800)]
fix fd.o bug #13761
MRD computation is now changed in mesa core
Eric Anholt [Wed, 2 Jan 2008 23:47:47 +0000 (15:47 -0800)]
[965] Convert WM unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 23:03:32 +0000 (15:03 -0800)]
[965] Convert VS unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 22:47:49 +0000 (14:47 -0800)]
[965] Convert SF unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 22:09:06 +0000 (14:09 -0800)]
[965] Convert GS unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 21:53:32 +0000 (13:53 -0800)]
[965] Convert clip unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 21:20:00 +0000 (13:20 -0800)]
[965] Convert CC unit to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 20:07:00 +0000 (12:07 -0800)]
[965] Convert surface state to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 19:33:55 +0000 (11:33 -0800)]
[965] Convert sampler state to use a cache key instead of brw_cache_data.
Eric Anholt [Wed, 2 Jan 2008 23:51:27 +0000 (15:51 -0800)]
Revert "[intel] Use the memory type mask containing the caching flags."
This reverts commit
8bb9ae3693362a302206255c61f512d942df9bbf.
Validating our kernel buffers with the caching off in flags but on in mask
means that the kernel migrates the buffer to be uncached, which is undesired.
Eric Anholt [Wed, 2 Jan 2008 17:45:16 +0000 (09:45 -0800)]
[intel] Use the memory type mask containing the caching flags.
Keith Packard [Mon, 17 Dec 2007 06:25:33 +0000 (22:25 -0800)]
Set correct flags mask when validating buffers.
The 'mask' value used in the validation operation specifies which of the
'flags' bits are being modified. Buffer validation wants to pass the memory
type and access mode (rwx) to the kernel so that the buffer will be placed
correctly, and so that the right kind of fence will be created (read vs
write). That means we actually want a constant mask for these operations,
and not something computed from the bits coming in. The constant we want is
DRM_BO_MASK_MEM | DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE.
Eric Anholt [Tue, 1 Jan 2008 10:16:29 +0000 (02:16 -0800)]
[965] Improve performance by including reloc target buffer pointers in keys.
Without this, the WM binding tables would all collide, for example. Improves
openarena performance by around 2%.
Brian [Wed, 2 Jan 2008 14:24:07 +0000 (07:24 -0700)]
additional stub functions
Brian [Wed, 2 Jan 2008 14:18:46 +0000 (07:18 -0700)]
additional GL_COLOR_ATTACHMENTx_EXT cases (bug 13767)
Xiang, Haihao [Wed, 2 Jan 2008 03:38:51 +0000 (11:38 +0800)]
i915: Needn't adjust pixel centers. fix #12944
Dave Airlie [Tue, 1 Jan 2008 20:19:47 +0000 (06:19 +1000)]
Revert "r300: fix bug with maniadrive rendering"
this is correct, there is another issue with sw fallbacks
This reverts commit
cc50edbca2fd3111f9987d4117fa6656599d79dc.
Brian [Tue, 1 Jan 2008 17:20:21 +0000 (10:20 -0700)]
remove unneeded conditional
Brian [Fri, 28 Dec 2007 21:51:52 +0000 (14:51 -0700)]
fix vbo display list memleak upon context destruction
Brian [Tue, 25 Dec 2007 00:05:39 +0000 (17:05 -0700)]
fix glUniform4f typo
Brian [Tue, 1 Jan 2008 17:10:04 +0000 (10:10 -0700)]
additional GL_COLOR_ATTACHMENTx_EXT cases (bug 13767)
Bruce Merry [Fri, 21 Dec 2007 21:18:40 +0000 (23:18 +0200)]
Convert to 0/1 when setting boolean uniforms
Also add some extra tests to the shader_api regression tests
Bruce Merry [Fri, 21 Dec 2007 14:04:43 +0000 (16:04 +0200)]
Make use of count in _mesa_uniform_matrix
Bruce Merry [Fri, 21 Dec 2007 13:23:39 +0000 (15:23 +0200)]
Add a test program to test for assorted bugs in shader_api.c
Bruce Merry [Fri, 21 Dec 2007 13:20:17 +0000 (15:20 +0200)]
More fixes to shader_api
- return GL_INVALID_OPERATION instead of GL_INVALID_VALUE if location is bad
- correct the type-checking of uniforms from my previous commit
- accept location of -1 in _mesa_uniform_matrix
Bruce Merry [Fri, 21 Dec 2007 12:41:45 +0000 (14:41 +0200)]
Fix several bugs relating to uniforms and attributes in GLSL API
- fix sizes for GL_FLOAT_MAT2x3 and GL_FLOAT_MAT4x3 in sizeof_glsl_type
- fix size returns in _mesa_get_active_attrib
- fix out-of-bounds array access to vec_types in _mesa_get_active_attrib
- fix queries of matrix uniforms in _mesa_get_uniformfv
- fix _mesa_get_uniformfv to only return one base, even from an array
- allow location == -1 in _mesa_uniform
- validate types in _mesa_uniform
- allow array overruns in _mesa_uniform
Brian [Tue, 1 Jan 2008 16:26:15 +0000 (09:26 -0700)]
added 'get' info for framebuffer object tokens
Brian [Tue, 1 Jan 2008 16:02:36 +0000 (09:02 -0700)]
add 'Get' info for MAX_3D_TEXTURE_SIZE (for bug 13811)
Hans de Goede [Tue, 1 Jan 2008 15:32:01 +0000 (01:32 +1000)]
t_vp_build: fix temporary register allocation to minimise the allocations
Hans de Goede [Tue, 1 Jan 2008 15:29:51 +0000 (01:29 +1000)]
rx00: fix off by one error in tempreg check
Dave Airlie [Tue, 1 Jan 2008 15:19:23 +0000 (01:19 +1000)]
r300: fix bug with maniadrive rendering
I've no idea why I added this so I'll have to spend time tracking it down
Dan Nicholson [Sun, 30 Dec 2007 16:48:10 +0000 (08:48 -0800)]
autoconf: Remind developers to bump version numbers in configure.ac
Just like configs/default, the version number in configure.ac needs to
be bumped for releases. Maybe later we can figure out how to scrape the
version from configs/default into configure.ac.
Zou Nan hai [Sat, 29 Dec 2007 07:28:51 +0000 (15:28 +0800)]
fix fd.o bug #13847
Roland Scheidegger [Sat, 29 Dec 2007 02:03:39 +0000 (18:03 -0800)]
Bug #13839: Fix 3D texture offset miscalculation with pixels versus bytes.
Dan Nicholson [Fri, 28 Dec 2007 23:14:32 +0000 (15:14 -0800)]
Merge branch 'autoconf2'
Xiang, Haihao [Thu, 27 Dec 2007 02:43:43 +0000 (10:43 +0800)]
i915: reset swrast state after calling swrast DrawPixels.
In order to optimize DrawPixels, the i915 texenv program isn't
applied to swrast DrawPixels in the i915 driver. This causes this
program isn't applied to any following swrast functions. Resetting
the swrast state fixes this issue. Fix #13614
Dan Nicholson [Wed, 26 Dec 2007 21:41:24 +0000 (15:41 -0600)]
Merge branch 'master' into autoconf2
Dan Nicholson [Wed, 26 Dec 2007 17:12:29 +0000 (11:12 -0600)]
autoconf: Helper options for adding GCC 32/64 bit flags
Two new configure options to add -m32 or -m64 to the CFLAGS and CXXFLAGS
when GCC is in use. By default, the user supplied options are
environment variables are respected, but these options are quick helps
for the common case of x86/x86_64 using GCC.
Xiang, Haihao [Tue, 25 Dec 2007 09:22:19 +0000 (17:22 +0800)]
i915: apply commit
a0a5e8cfc04c14873441b50f7d594ef11806b9a8 from 965.
fix #11925
Xiang, Haihao [Tue, 25 Dec 2007 06:16:05 +0000 (14:16 +0800)]
mesa: fix a bad cast in put_values_z24.
The values passed to put_values_z24 are GLuint,
not GLubyte. fix #13543
Adam Jackson [Tue, 25 Dec 2007 00:16:24 +0000 (19:16 -0500)]
__driConfigOptions must be PUBLIC.
Alex Deucher [Mon, 24 Dec 2007 16:59:27 +0000 (11:59 -0500)]
R300: RV410 SE chips have half the pipes of regular RV410
This fixes 3D rendering on x700 SE chips. Reported
by Kano.
Dan Nicholson [Mon, 24 Dec 2007 00:38:18 +0000 (16:38 -0800)]
autoconf: Documentation for using the autoconf'd build
Most of the options available from configure are documented on the
autoconf.html. This page is reached as an alternative provided on the
install.html page. An FAQ about why there is no configure script has
been removed.
Roland Scheidegger [Sat, 22 Dec 2007 17:54:01 +0000 (18:54 +0100)]
fix GL_LINE_LOOP with drivers using own render pipeline stage (#12410, #13527)
primitive needs to include the begin/end flags (broken since vbo-0.2). Should
fix missing first/last line segment on gamma, i810, i915, mga, r200, radeon,
s3v, savage, unichrome (r300 already correct). Tested on r200, fixes #13527.
Kristian Høgsberg [Fri, 21 Dec 2007 20:31:00 +0000 (15:31 -0500)]
Silence compiler warnings from XML error macros.
Eric Anholt [Fri, 21 Dec 2007 19:39:33 +0000 (11:39 -0800)]
[965] Fix and enable separate stencil.
Note that this does not enable GL_EXT_stencil_two_side, because Mesa's computed
_TestTwoSide ends up respecting only STENCIL_TEST_TWO_SIDE_EXT (defaults to
GL_FALSE), even if the application uses only GL 2.0 / ATI entrypoints.
Eric Anholt [Thu, 20 Dec 2007 19:44:40 +0000 (11:44 -0800)]
[intel] Move some pixel path support from drivers to shared.
Xiang, Haihao [Fri, 21 Dec 2007 09:03:55 +0000 (17:03 +0800)]
intel: cast a pointer to unsigned long, avoid potential error.
Eric Anholt [Thu, 20 Dec 2007 19:29:39 +0000 (11:29 -0800)]
[965] Enable EXT_framebuffer_object.
To do so, merge the remainnig necessary code from the buffers, blit, span, and
screen code to shared, and replace it with those.
Eric Anholt [Thu, 20 Dec 2007 19:28:10 +0000 (11:28 -0800)]
[965] Actually enable SGIS_generate_mipmap.
Eric Anholt [Wed, 19 Dec 2007 22:26:14 +0000 (14:26 -0800)]
[intel] Fix and reenable (software) SGIS_generate_mipmap
The core problem was that _mesa_generate_mipmap was not respecting RowStride
of the source image. Additionally, the intel private data associated with the
images (level and face) was not being initialized for the
_mesa_generate_mipmap-generated images.
Eric Anholt [Thu, 20 Dec 2007 16:24:45 +0000 (08:24 -0800)]
[intel] Allow driver hooks to be NULL in intel_buffers.c and just update flags.
The 965 driver relies on flag checking instead of these hooks, and will be
using this code soon.