mesa.git
16 years agogallium: use cso_save/restore_sampler_textures() functions
Brian [Mon, 31 Mar 2008 20:38:27 +0000 (14:38 -0600)]
gallium: use cso_save/restore_sampler_textures() functions

16 years agogallium: draw_passthrough.c is obsolete - removed
Brian [Mon, 31 Mar 2008 20:20:16 +0000 (14:20 -0600)]
gallium: draw_passthrough.c is obsolete - removed

16 years agogallium: set the bypass_vs flag now
Brian [Mon, 31 Mar 2008 20:18:36 +0000 (14:18 -0600)]
gallium: set the bypass_vs flag now

The glBitmap vertex shader is a no-op, but we still have to specify it in
order to convey the number of inputs/outputs.

16 years agogallium: move the test for bypass_vs into the vs_XXX_run() functions
Brian [Mon, 31 Mar 2008 20:14:30 +0000 (14:14 -0600)]
gallium: move the test for bypass_vs into the vs_XXX_run() functions

Also:
1. Added an identity_viewport flag to skip viewport transformation when it
has no effect.  Might also add an explicit bypass_viewport flag someday.
2. Separate the code for computing clip codes and doing the viewport transform.
Predicate them separately.
Note: even if bypass_vs is set, we still look at the shader to determine the
number of inputs and outputs.

16 years agogallium: draw_passthrough.c is not used anymore
Brian [Mon, 31 Mar 2008 20:13:09 +0000 (14:13 -0600)]
gallium: draw_passthrough.c is not used anymore

16 years agogallium: draw_passthrough.c is not used anymore
Brian [Mon, 31 Mar 2008 20:06:42 +0000 (14:06 -0600)]
gallium: draw_passthrough.c is not used anymore

16 years agogallium: turn on clipping for bitmaps
Brian [Mon, 31 Mar 2008 18:18:20 +0000 (12:18 -0600)]
gallium: turn on clipping for bitmaps

Bitmaps can extend beyond window edges so we need to clip.
Also, move some state atom vars to st_context to be a bit more efficient.

16 years agogallium: Eliminate p_winsys::printf
José Fonseca [Mon, 31 Mar 2008 00:02:08 +0000 (09:02 +0900)]
gallium: Eliminate p_winsys::printf

Not convenient and almost not used at all. Better replacements in p_debug.h

16 years agodraw: Do not run full pipeline when flatshade_first for point primitives.
Michal Krol [Sun, 30 Mar 2008 21:21:20 +0000 (23:21 +0200)]
draw: Do not run full pipeline when flatshade_first for point primitives.

16 years agodraw: Fix bypass_vs semantic misuse.
Michal Krol [Sun, 30 Mar 2008 20:48:49 +0000 (22:48 +0200)]
draw: Fix bypass_vs semantic misuse.

16 years agogallium: Set vertex state/buffers en-mass.
Brian Paul [Sat, 29 Mar 2008 13:41:03 +0000 (14:41 +0100)]
gallium: Set vertex state/buffers en-mass.

16 years agogallium: Fix some MSVC warnings.
José Fonseca [Tue, 25 Mar 2008 17:30:34 +0000 (17:30 +0000)]
gallium: Fix some MSVC warnings.

16 years agogallium: begin some bounding box code for bitmap cache
Brian [Sat, 29 Mar 2008 00:41:10 +0000 (18:41 -0600)]
gallium: begin some bounding box code for bitmap cache

16 years agogallium: added an (int) cast in setup_bitmap_vertex_data() to fix a signed/unsigned...
Brian [Sat, 29 Mar 2008 00:18:55 +0000 (18:18 -0600)]
gallium: added an (int) cast in setup_bitmap_vertex_data() to fix a signed/unsigned arithmetic problem

Negative values became very large uints.

16 years agogallium: Fix computation of Z values when not using early Z.
Brian [Fri, 28 Mar 2008 21:22:34 +0000 (15:22 -0600)]
gallium: Fix computation of Z values when not using early Z.

This fixes the missing bitmaps in the engine and fogcoord demos.

16 years agogallium: don't call st_flush_bitmap_cache() if the only change is _NEW_PACKUNPACK...
Brian [Fri, 28 Mar 2008 21:17:50 +0000 (15:17 -0600)]
gallium: don't call st_flush_bitmap_cache() if the only change is _NEW_PACKUNPACK state

16 years agogallium: disable a debug hack
Brian [Fri, 28 Mar 2008 20:56:05 +0000 (14:56 -0600)]
gallium: disable a debug hack

16 years agogallium: implement a glBitmap cache
Brian [Fri, 28 Mar 2008 20:53:47 +0000 (14:53 -0600)]
gallium: implement a glBitmap cache

The bitmap cache attempts to accumulate a series of glBitmap calls in a
buffer to effectively render a whole bunch of bitmaps at once.

The cache can be disabled, if needed, by setting UseBitmapCache=GL_FALSE.

16 years agomesa: fix texture/renderbuffer mix-up in test_attachment_completeness()
Brian Paul [Fri, 28 Mar 2008 19:10:16 +0000 (13:10 -0600)]
mesa: fix texture/renderbuffer mix-up in test_attachment_completeness()

16 years agogallium: re-work texture format selection code
Brian Paul [Fri, 28 Mar 2008 19:09:19 +0000 (13:09 -0600)]
gallium: re-work texture format selection code

Use same code for choosing texture format and renderbuffer format.

16 years agogallium: remove redundant compare bit in sampler state
Roland Scheidegger [Fri, 28 Mar 2008 14:43:00 +0000 (15:43 +0100)]
gallium: remove redundant compare bit in sampler state

16 years agogallium: Bump PIPE_MAX_SAMPLERS to 16.
Michal Krol [Fri, 28 Mar 2008 11:31:35 +0000 (12:31 +0100)]
gallium: Bump PIPE_MAX_SAMPLERS to 16.

We need it to fulfil D3D minimum requirements.

16 years agoIf visual is 32bpp, set visual->alphaBits = 8.
Brian [Fri, 28 Mar 2008 03:11:45 +0000 (21:11 -0600)]
If visual is 32bpp, set visual->alphaBits = 8.

This works since we always use XImages for color buffers.  It wouldn't always
work for Windows/Pixmaps.

16 years agogallium: replace PIPE_ATTRIB_MAX with PIPE_MAX_ATTRIBS
Brian [Thu, 27 Mar 2008 23:41:55 +0000 (17:41 -0600)]
gallium: replace PIPE_ATTRIB_MAX with PIPE_MAX_ATTRIBS

The later follows the naming scheme of other limits.
Keep the old definition until all possible usage is updated.

16 years agogallium: updated/improved comments, minor re-formatting
Brian Paul [Thu, 27 Mar 2008 23:18:25 +0000 (17:18 -0600)]
gallium: updated/improved comments, minor re-formatting

16 years agoconsolidate some parsing functions that were pretty much identical for vertex/fragmen...
Brian [Thu, 27 Mar 2008 22:19:46 +0000 (16:19 -0600)]
consolidate some parsing functions that were pretty much identical for vertex/fragment programs

cherry-picked from master

16 years agomesa: misc sync-up with master
Brian [Thu, 27 Mar 2008 22:05:40 +0000 (16:05 -0600)]
mesa: misc sync-up with master

16 years agoraise GL_INVALID_OPERATION if glProgramString compilation fails
Brian [Thu, 27 Mar 2008 22:04:20 +0000 (16:04 -0600)]
raise GL_INVALID_OPERATION if glProgramString compilation fails

cherry-picked from master

16 years agoFix the compile of disabled DEBUG_PARSING code.
Brian [Thu, 27 Mar 2008 21:54:44 +0000 (15:54 -0600)]
Fix the compile of disabled DEBUG_PARSING code.

cherry-picked from master

16 years agomake sure state token values are fully initialized
Brian [Thu, 27 Mar 2008 21:52:00 +0000 (15:52 -0600)]
make sure state token values are fully initialized

cherry-picked from master

16 years agoadded program_error2() function for better error reporting
Brian [Thu, 27 Mar 2008 21:51:07 +0000 (15:51 -0600)]
added program_error2() function for better error reporting

cherry-picked from master

16 years agoFix state.texgen parsing error (bug 12313).
Brian [Thu, 27 Mar 2008 21:48:54 +0000 (15:48 -0600)]
Fix state.texgen parsing error (bug 12313).

Replace *(*inst++) with *(*inst)++ in a few places.

Cherry-picked from master.

16 years agogallium: Update calls to the simple shader functions
Brian [Thu, 27 Mar 2008 21:42:52 +0000 (15:42 -0600)]
gallium: Update calls to the simple shader functions

16 years agogallium: return pipe_shader_state from the simple shader functions
Brian [Thu, 27 Mar 2008 21:42:09 +0000 (15:42 -0600)]
gallium: return pipe_shader_state from the simple shader functions

Allows us to fix a mem leak (tokens array).

16 years agogallium: fix Element() macro redefinition warning
Brian [Thu, 27 Mar 2008 21:41:52 +0000 (15:41 -0600)]
gallium: fix Element() macro redefinition warning

16 years agogallium: fix incorrect types for shaders
Brian [Thu, 27 Mar 2008 21:35:25 +0000 (15:35 -0600)]
gallium: fix incorrect types for shaders

16 years agogallium: remove temporary static var
Brian [Thu, 27 Mar 2008 21:33:47 +0000 (15:33 -0600)]
gallium: remove temporary static var

16 years agogallium: silence unused var warning
Brian [Thu, 27 Mar 2008 21:27:31 +0000 (15:27 -0600)]
gallium: silence unused var warning

16 years agocell: include cell_state_per_fragment.h to silence warning
Brian [Thu, 27 Mar 2008 21:27:14 +0000 (15:27 -0600)]
cell: include cell_state_per_fragment.h to silence warning

16 years agocell: added (uint64_t) cast to silence warning
Brian [Thu, 27 Mar 2008 21:26:54 +0000 (15:26 -0600)]
cell: added (uint64_t) cast to silence warning

16 years agocell: fix unclosed comment
Brian [Thu, 27 Mar 2008 21:26:22 +0000 (15:26 -0600)]
cell: fix unclosed comment

16 years agoxlib: Fix build error from recent fence changes
Ian Romanick [Wed, 26 Mar 2008 17:52:08 +0000 (10:52 -0700)]
xlib: Fix build error from recent fence changes

16 years agocell: Implement code-gen for logic op
Ian Romanick [Wed, 26 Mar 2008 17:45:32 +0000 (10:45 -0700)]
cell: Implement code-gen for logic op

This also implements code-gen for the float-to-packed color
conversion.  It's currently hardcoded for A8R8G8B8, but that can
easily be fixed as soon as other color depths are supported by the
Cell driver.

16 years agogallium: need to call st_validate_state() in Bitmap()
Brian Paul [Wed, 26 Mar 2008 15:02:54 +0000 (09:02 -0600)]
gallium: need to call st_validate_state() in Bitmap()

16 years agogallium: as for aapoints, make the extra texcoord per-shader state
Brian Paul [Wed, 26 Mar 2008 14:21:17 +0000 (08:21 -0600)]
gallium: as for aapoints, make the extra texcoord per-shader state

16 years agogallium: Change pipe->flush() interface to optionally return a fence.
Michel Dänzer [Wed, 26 Mar 2008 09:36:40 +0000 (09:36 +0000)]
gallium: Change pipe->flush() interface to optionally return a fence.

The cell driver still uses an internal CELL_FLUSH_WAIT flag, in the long run
proper fencing should be implemented for it.

16 years agogallium: the generic attrib we use for computing coverage is per-shader
Brian [Wed, 26 Mar 2008 01:19:14 +0000 (19:19 -0600)]
gallium: the generic attrib we use for computing coverage is per-shader

Fixes a very tricky conformance failure.

16 years agogallium: added fragment emit/write debug counters
Brian [Wed, 26 Mar 2008 01:18:56 +0000 (19:18 -0600)]
gallium: added fragment emit/write debug counters

16 years agocell: Enable MIT-SHM on Cell.
Ian Romanick [Wed, 26 Mar 2008 01:15:34 +0000 (18:15 -0700)]
cell: Enable MIT-SHM on Cell.

16 years agoxlib: Add support for MIT-SHM in xlib winsys driver
Ian Romanick [Wed, 26 Mar 2008 01:07:56 +0000 (18:07 -0700)]
xlib: Add support for MIT-SHM in xlib winsys driver

Gives about a 3% performance increase in gears on x86-64 (non-tiled)
and about 10% performance increase in gears on Cell (tiled).  I
actually expected more of a boost. :(

16 years agocell: Float convert-to and convert-from instructions use different shift bias
Ian Romanick [Mon, 24 Mar 2008 19:15:59 +0000 (12:15 -0700)]
cell: Float convert-to and convert-from instructions use different shift bias

16 years agodraw: Take flatshade_first rasterizer bit into account.
Michal Krol [Tue, 25 Mar 2008 22:49:11 +0000 (23:49 +0100)]
draw: Take flatshade_first rasterizer bit into account.

16 years agogallium: Introduce flatshade_first field to rasterizer_state.
Michal Krol [Tue, 25 Mar 2008 22:48:30 +0000 (23:48 +0100)]
gallium: Introduce flatshade_first field to rasterizer_state.

This bit tells us which vertex of the primitive is used to
propagate color for the remaining vertices if flatshade mode.

16 years agogallium: disable the selection/feedback draw module's options for wide lines, points...
Brian Paul [Tue, 25 Mar 2008 20:12:55 +0000 (14:12 -0600)]
gallium: disable the selection/feedback draw module's options for wide lines, points, etc.

Disable paths that would convert points/lines to tris as that upsets selection,
feedback, rastpos.

16 years agogallium: added some debug code (disable)
Brian Paul [Tue, 25 Mar 2008 18:27:48 +0000 (12:27 -0600)]
gallium: added some debug code (disable)

16 years agomesa: fix some issues in _mesa_combine_programs()
Brian Paul [Tue, 25 Mar 2008 18:27:32 +0000 (12:27 -0600)]
mesa: fix some issues in _mesa_combine_programs()

Use a temporay register to connect outputs of first program to inputs of
second program.
Also, fix bug in replace_registers(): didn't search/replace DstReg.

16 years agodraw: vertex fetch can be validated too early leading to an assertion... disable
Keith Whitwell [Tue, 25 Mar 2008 18:15:58 +0000 (18:15 +0000)]
draw: vertex fetch can be validated too early leading to an assertion... disable

16 years agodraw: don't use fetch_and_store for bypass_vs mode, it's not quite right
Keith Whitwell [Tue, 25 Mar 2008 18:09:25 +0000 (18:09 +0000)]
draw: don't use fetch_and_store for bypass_vs mode, it's not quite right

16 years agomesa: append fog instructions after parsing if a fog option is set
Brian Paul [Tue, 25 Mar 2008 17:32:31 +0000 (11:32 -0600)]
mesa: append fog instructions after parsing if a fog option is set

Drivers don't have to worry about it then.

16 years agomesa: when negating scalar src args, use NEGATE_XYZW, not NEGATE_X
Brian Paul [Tue, 25 Mar 2008 17:22:57 +0000 (11:22 -0600)]
mesa: when negating scalar src args, use NEGATE_XYZW, not NEGATE_X

This makes things easier on the back-end when generating GPU code.

16 years agoFix typo
José Fonseca [Tue, 25 Mar 2008 17:47:39 +0000 (17:47 +0000)]
Fix typo

16 years agodraw: take primitive into account when deciding if the pipeline is active
Keith Whitwell [Tue, 25 Mar 2008 15:17:53 +0000 (15:17 +0000)]
draw: take primitive into account when deciding if the pipeline is active

16 years agogallium: Use debug_get_option for GETENV
José Fonseca [Tue, 25 Mar 2008 11:37:54 +0000 (11:37 +0000)]
gallium: Use debug_get_option for GETENV

16 years agogallium: Fix default option on Windows.
José Fonseca [Tue, 25 Mar 2008 11:37:24 +0000 (11:37 +0000)]
gallium: Fix default option on Windows.

16 years agogallium: don't enable stencil test if no stencil buffer.
Brian Paul [Tue, 25 Mar 2008 01:59:59 +0000 (19:59 -0600)]
gallium: don't enable stencil test if no stencil buffer.

Also, if not doing two-sided stencil, set back-face state = front-face state.

16 years agogallium: be smarter about picking the sampler unit for pstipple, aaalines
Brian [Tue, 25 Mar 2008 01:36:44 +0000 (19:36 -0600)]
gallium: be smarter about picking the sampler unit for pstipple, aaalines

Also, if the app really uses all available sampler/texture units, don't just
die.  Just use the last sampler for the pstipple or aaline texture.

16 years agogallium: fix a few bugs, warnings in the p_debug code
Brian [Tue, 25 Mar 2008 00:49:56 +0000 (18:49 -0600)]
gallium: fix a few bugs, warnings in the p_debug code

added missing _ to a _debug_printf() call.

16 years agogallium: move sampler_unit field to pstip_fragment_shader since it's per-shader
Brian [Tue, 25 Mar 2008 00:32:48 +0000 (18:32 -0600)]
gallium: move sampler_unit field to pstip_fragment_shader since it's per-shader

Also, fix another texture refcounting bug.

16 years agogallium: save/restore samplers in draw_textured_quad()
Brian [Tue, 25 Mar 2008 00:31:01 +0000 (18:31 -0600)]
gallium: save/restore samplers in draw_textured_quad()

16 years agomesa: call glutDestroyWindow (help find mem leaks)
Brian Paul [Mon, 24 Mar 2008 23:20:52 +0000 (17:20 -0600)]
mesa: call glutDestroyWindow (help find mem leaks)

16 years agogallium: fix a few texture border/mipmap glitches found w/ conform
Brian Paul [Mon, 24 Mar 2008 23:20:22 +0000 (17:20 -0600)]
gallium: fix a few texture border/mipmap glitches found w/ conform

16 years agogallium: check SamplersUsed to determine if texture needed, as in st_atom_sampler.c
Brian Paul [Mon, 24 Mar 2008 18:59:54 +0000 (12:59 -0600)]
gallium: check SamplersUsed to determine if texture needed, as in st_atom_sampler.c

Otherwise, we were sometimes setting texture state but not the corresponding
sampler state.

16 years agogallium: make a copy of the vertex shader's token array.
Brian [Mon, 24 Mar 2008 22:31:15 +0000 (16:31 -0600)]
gallium: make a copy of the vertex shader's token array.

This solves problems when the state tracker frees the token array when the
draw module still needs it.

16 years agogallium: use pipe_texture_reference() in a few places (fixes refcounting bugs)
Brian [Mon, 24 Mar 2008 22:26:45 +0000 (16:26 -0600)]
gallium: use pipe_texture_reference() in a few places (fixes refcounting bugs)

16 years agogallium: added tgsi_num_tokens() function to return number of tokens in token array.
Brian [Mon, 24 Mar 2008 22:24:32 +0000 (16:24 -0600)]
gallium: added tgsi_num_tokens() function to return number of tokens in token array.

Maybe move to a different file someday.

16 years agogallium: Simple cross platform get-opt system.
José Fonseca [Mon, 24 Mar 2008 22:30:33 +0000 (22:30 +0000)]
gallium: Simple cross platform get-opt system.

Uses getenv on Linux, and a memory mapped text file on Windows.

It supports boolean options, flags, and plain strings.

16 years agogallium: cleanup p_debug
José Fonseca [Mon, 24 Mar 2008 20:18:59 +0000 (20:18 +0000)]
gallium: cleanup p_debug

Now debug_printf is disabled on release builds. Use debug_error or
_debug_printf to output messages on release versions.

16 years agogallium: move filter assignment out of loop
Brian [Mon, 24 Mar 2008 18:51:50 +0000 (12:51 -0600)]
gallium: move filter assignment out of loop

16 years agogallium: fix REALLOC() to copy smaller of old/new sizes
Brian [Mon, 24 Mar 2008 18:50:28 +0000 (12:50 -0600)]
gallium: fix REALLOC() to copy smaller of old/new sizes

16 years agogallium: Protect operator precedence in macro.
José Fonseca [Mon, 24 Mar 2008 18:25:31 +0000 (18:25 +0000)]
gallium: Protect operator precedence in macro.

16 years agogallium: free bitmap fragment shaders, misc clean-up
Brian Paul [Mon, 24 Mar 2008 17:55:29 +0000 (11:55 -0600)]
gallium: free bitmap fragment shaders, misc clean-up

16 years agogallium: add missing cso_save_samplers() call
Brian Paul [Mon, 24 Mar 2008 17:46:41 +0000 (11:46 -0600)]
gallium: add missing cso_save_samplers() call

16 years agogallium: Remove util_gen_mipmap_filter().
Michal Krol [Mon, 24 Mar 2008 15:50:39 +0000 (16:50 +0100)]
gallium: Remove util_gen_mipmap_filter().

16 years agogallium: pass the filter mode to util_gen_mipmap().
Brian [Mon, 24 Mar 2008 14:53:16 +0000 (08:53 -0600)]
gallium: pass the filter mode to util_gen_mipmap().

Remove util_gen_mipmap_filter() when no longer used.

16 years agogallium: tweak coords in u_gen_mipmap code
Michal Krol [Mon, 24 Mar 2008 14:09:34 +0000 (08:09 -0600)]
gallium: tweak coords in u_gen_mipmap code

16 years agodraw: pre-declare referenced structs
Keith Whitwell [Mon, 24 Mar 2008 10:53:26 +0000 (10:53 +0000)]
draw: pre-declare referenced structs

16 years agoRevert "draw: Fix #include order to fix Linux build."
Keith Whitwell [Mon, 24 Mar 2008 10:52:20 +0000 (10:52 +0000)]
Revert "draw: Fix #include order to fix Linux build."

This reverts commit a6d17bf671d6bfbb187a62ba14b9ad08fb5dafe1.

16 years agodraw: Fix #include order to fix Linux build.
Michel Dänzer [Mon, 24 Mar 2008 09:56:12 +0000 (09:56 +0000)]
draw: Fix #include order to fix Linux build.

16 years agodraw: check need_pipeline() in passthrough
Keith Whitwell [Sun, 23 Mar 2008 21:55:19 +0000 (21:55 +0000)]
draw: check need_pipeline() in passthrough

16 years agodraw: tweak the definition of draw_need_pipeline, fix minor bug
Keith Whitwell [Sun, 23 Mar 2008 21:54:44 +0000 (21:54 +0000)]
draw: tweak the definition of draw_need_pipeline, fix minor bug

16 years agodraw: fix crlf
Keith Whitwell [Sun, 23 Mar 2008 21:31:23 +0000 (21:31 +0000)]
draw: fix crlf

16 years agodraw: rename emit functions to match pipe_format names
Keith Whitwell [Sun, 23 Mar 2008 21:31:14 +0000 (21:31 +0000)]
draw: rename emit functions to match pipe_format names

16 years agodraw: restructure fetch/emit as a pair of function calls
Keith Whitwell [Sun, 23 Mar 2008 20:36:00 +0000 (20:36 +0000)]
draw: restructure fetch/emit as a pair of function calls

16 years agogallium: Add util_gen_mipmap_filter().
Michal Krol [Sun, 23 Mar 2008 19:39:35 +0000 (20:39 +0100)]
gallium: Add util_gen_mipmap_filter().

We need a way to specify the type of minification filter
used to downsample mipmap levels.
The old util_gen_mipmap() retains its behaviour and uses
LINEAR filter.

16 years agogallium: Fix memory leak.
José Fonseca [Sun, 23 Mar 2008 19:38:11 +0000 (19:38 +0000)]
gallium: Fix memory leak.

pipe cso's were being destroyed, but the hash elements themselves not.

proper fix is IMHO add a destructor callback to cso_hash.

16 years agogallium: Remove the debug_mask_* stuff.
José Fonseca [Sun, 23 Mar 2008 18:57:35 +0000 (18:57 +0000)]
gallium: Remove the debug_mask_* stuff.

Overcomplex and not much different from using a global variable...

16 years agogallium: Fix typo.
José Fonseca [Sun, 23 Mar 2008 18:52:37 +0000 (18:52 +0000)]
gallium: Fix typo.

16 years agogallium: Memory debugging utilities.
José Fonseca [Sun, 23 Mar 2008 18:38:10 +0000 (18:38 +0000)]
gallium: Memory debugging utilities.

There are no known tools for windows kernel memory debugging, so this is a
simple set of malloc etc wrappers.

Enabled by default on win32 debug builds

16 years agogallium: wrap decls in extern "C"
José Fonseca [Sun, 23 Mar 2008 18:30:53 +0000 (18:30 +0000)]
gallium: wrap decls in extern "C"

16 years agodraw: fix some unsigned vs ushort confusion
Keith Whitwell [Sun, 23 Mar 2008 18:21:00 +0000 (18:21 +0000)]
draw:  fix some unsigned vs ushort confusion

Middle-end elements are ushort, but prior to that have to treat all
elements as unsigned to avoid wrapping and/or overruns.