Searched refs:nv50 (Results 1 - 25 of 47) sorted by relevance

12

/external/chromium_org/third_party/mesa/src/src/gallium/drivers/nv50/
H A Dnv50_context.c71 nv50_context_unreference_resources(struct nv50_context *nv50) argument
75 nouveau_bufctx_del(&nv50->bufctx_3d);
76 nouveau_bufctx_del(&nv50->bufctx);
78 util_unreference_framebuffer_state(&nv50->framebuffer);
80 for (i = 0; i < nv50->num_vtxbufs; ++i)
81 pipe_resource_reference(&nv50->vtxbuf[i].buffer, NULL);
83 pipe_resource_reference(&nv50->idxbuf.buffer, NULL);
86 for (i = 0; i < nv50->num_textures[s]; ++i)
87 pipe_sampler_view_reference(&nv50->textures[s][i], NULL);
90 if (!nv50
98 struct nv50_context *nv50 = nv50_context(pipe); local
121 struct nv50_context *nv50; local
[all...]
H A Dnv50_state_validate.c6 nv50_validate_fb(struct nv50_context *nv50) argument
8 struct nouveau_pushbuf *push = nv50->base.pushbuf;
9 struct pipe_framebuffer_state *fb = &nv50->framebuffer;
13 nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_FB);
54 nv50->state.rt_serialize = TRUE;
59 BCTX_REFN(nv50->bufctx_3d, FB, &mt->base, WR);
84 nv50->state.rt_serialize = TRUE;
88 BCTX_REFN(nv50->bufctx_3d, FB, &mt->base, WR);
103 nv50_validate_blend_colour(struct nv50_context *nv50) argument
105 struct nouveau_pushbuf *push = nv50
115 nv50_validate_stencil_ref(struct nv50_context *nv50) argument
126 nv50_validate_stipple(struct nv50_context *nv50) argument
137 nv50_validate_scissor(struct nv50_context *nv50) argument
179 nv50_validate_viewport(struct nv50_context *nv50) argument
204 nv50_check_program_ucps(struct nv50_context *nv50, struct nv50_program *vp, uint8_t mask) argument
225 nv50_validate_clip(struct nv50_context *nv50) argument
252 nv50_validate_blend(struct nv50_context *nv50) argument
261 nv50_validate_zsa(struct nv50_context *nv50) argument
270 nv50_validate_rasterizer(struct nv50_context *nv50) argument
279 nv50_validate_sample_mask(struct nv50_context *nv50) argument
370 nv50_state_validate(struct nv50_context *nv50, uint32_t mask, unsigned words) argument
[all...]
H A Dnv50_vbo.c135 nv50_emit_vtxattr(struct nv50_context *nv50, struct pipe_vertex_buffer *vb, argument
138 struct nouveau_pushbuf *push = nv50->base.pushbuf;
167 if (attr == nv50->vertprog->vp.edgeflag) {
181 nv50_user_vbuf_range(struct nv50_context *nv50, int vbi, argument
184 if (unlikely(nv50->vertex->instance_bufs & (1 << vbi))) {
187 *size = nv50->vtxbuf[vbi].buffer->width0;
190 assert(nv50->vb_elt_limit != ~0);
191 *base = nv50->vb_elt_first * nv50->vtxbuf[vbi].stride;
192 *size = nv50
198 nv50_upload_user_buffers(struct nv50_context *nv50, uint64_t addrs[], uint32_t limits[]) argument
223 nv50_update_user_vbufs(struct nv50_context *nv50) argument
266 nv50_release_user_vbufs(struct nv50_context *nv50) argument
275 nv50_vertex_arrays_validate(struct nv50_context *nv50) argument
444 nv50_draw_arrays(struct nv50_context *nv50, unsigned mode, unsigned start, unsigned count, unsigned instance_count) argument
563 nv50_draw_elements(struct nv50_context *nv50, boolean shorten, unsigned mode, unsigned start, unsigned count, unsigned instance_count, int32_t index_bias) argument
661 nva0_draw_stream_output(struct nv50_context *nv50, const struct pipe_draw_info *info) argument
718 struct nv50_context *nv50 = nv50_context(pipe); local
[all...]
H A Dnv50_shader_state.c32 nv50_constbufs_validate(struct nv50_context *nv50) argument
34 struct nouveau_pushbuf *push = nv50->base.pushbuf;
48 while (nv50->constbuf_dirty[s]) {
49 const int i = ffs(nv50->constbuf_dirty[s]) - 1;
50 nv50->constbuf_dirty[s] &= ~(1 << i);
52 if (nv50->constbuf[s][i].user) {
55 unsigned words = nv50->constbuf[s][0].size / 4;
60 if (!nv50->state.uniform_buffer_bound[s]) {
61 nv50->state.uniform_buffer_bound[s] = TRUE;
77 PUSH_DATAp(push, &nv50
112 nv50_program_validate(struct nv50_context *nv50, struct nv50_program *prog) argument
127 nv50_program_update_context_state(struct nv50_context *nv50, struct nv50_program *prog, int stage) argument
147 nv50_vertprog_validate(struct nv50_context *nv50) argument
168 nv50_fragprog_validate(struct nv50_context *nv50) argument
190 nv50_gmtyprog_validate(struct nv50_context *nv50) argument
215 nv50_sprite_coords_validate(struct nv50_context *nv50) argument
272 nv50_validate_derived_rs(struct nv50_context *nv50) argument
337 nv50_fp_linkage_validate(struct nv50_context *nv50) argument
521 nv50_gp_linkage_validate(struct nv50_context *nv50) argument
548 nv50_stream_output_validate(struct nv50_context *nv50) argument
[all...]
H A DMakefile4 LIBNAME = nv50
H A Dnv50_state.c210 struct nv50_context *nv50 = nv50_context(pipe); local
212 nv50->blend = hwcso;
213 nv50->dirty |= NV50_NEW_BLEND;
339 struct nv50_context *nv50 = nv50_context(pipe); local
341 nv50->rast = hwcso;
342 nv50->dirty |= NV50_NEW_RASTERIZER;
418 struct nv50_context *nv50 = nv50_context(pipe); local
420 nv50->zsa = hwcso;
421 nv50->dirty |= NV50_NEW_ZSA;
561 nv50_stage_sampler_states_bind(struct nv50_context *nv50, in argument
613 nv50_stage_set_sampler_views(struct nv50_context *nv50, int s, unsigned nr, struct pipe_sampler_view **views) argument
710 struct nv50_context *nv50 = nv50_context(pipe); local
726 struct nv50_context *nv50 = nv50_context(pipe); local
742 struct nv50_context *nv50 = nv50_context(pipe); local
752 struct nv50_context *nv50 = nv50_context(pipe); local
793 struct nv50_context *nv50 = nv50_context(pipe); local
803 struct nv50_context *nv50 = nv50_context(pipe); local
813 struct nv50_context *nv50 = nv50_context(pipe); local
823 struct nv50_context *nv50 = nv50_context(pipe); local
834 struct nv50_context *nv50 = nv50_context(pipe); local
858 struct nv50_context *nv50 = nv50_context(pipe); local
868 struct nv50_context *nv50 = nv50_context(pipe); local
878 struct nv50_context *nv50 = nv50_context(pipe); local
889 struct nv50_context *nv50 = nv50_context(pipe); local
920 struct nv50_context *nv50 = nv50_context(pipe); local
942 struct nv50_context *nv50 = nv50_context(pipe); local
996 struct nv50_context *nv50 = nv50_context(pipe); local
1034 nv50_init_state_functions(struct nv50_context *nv50) argument
[all...]
H A Dnv50_draw.c29 struct nv50_context *nv50; member in struct:nv50_render_stage
74 nv50_draw_render_stage(struct nv50_context *nv50) argument
78 rs->nv50 = nv50;
79 rs->stage.draw = nv50->draw;
H A Dnv50_tex.c200 nv50_validate_tic(struct nv50_context *nv50, int s) argument
202 struct nouveau_pushbuf *push = nv50->base.pushbuf;
203 struct nouveau_bo *txc = nv50->screen->txc;
207 for (i = 0; i < nv50->num_textures[s]; ++i) {
208 struct nv50_tic_entry *tic = nv50_tic_entry(nv50->textures[s][i]);
219 tic->id = nv50_screen_tic_alloc(nv50->screen, tic);
254 nv50->screen->tic.lock[tic->id / 32] |= 1 << (tic->id % 32);
259 BCTX_REFN(nv50->bufctx_3d, TEXTURES, res, RD);
264 for (; i < nv50->state.num_textures[s]; ++i) {
268 nv50
273 nv50_validate_textures(struct nv50_context *nv50) argument
287 nv50_validate_tsc(struct nv50_context *nv50, int s) argument
323 nv50_validate_samplers(struct nv50_context *nv50) argument
[all...]
H A Dnv50_surface.c199 struct nv50_context *nv50 = nv50_context(pipe); local
231 nv50_m2mf_transfer_rect(nv50, &drect, &srect, nx, ny);
250 BCTX_REFN(nv50->bufctx, 2D, nv04_resource(src), RD);
251 BCTX_REFN(nv50->bufctx, 2D, nv04_resource(dst), WR);
252 nouveau_pushbuf_bufctx(nv50->base.pushbuf, nv50->bufctx);
253 nouveau_pushbuf_validate(nv50->base.pushbuf);
256 ret = nv50_2d_texture_do_copy(nv50->base.pushbuf,
265 nouveau_bufctx_reset(nv50->bufctx, NV50_BIND_2D);
275 struct nv50_context *nv50 local
333 struct nv50_context *nv50 = nv50_context(pipe); local
385 struct nv50_context *nv50 = nv50_context(pipe); local
670 nv50_blit_set_dst(struct nv50_context *nv50, struct pipe_resource *res, unsigned level, unsigned layer) argument
705 nv50_blit_set_src(struct nv50_context *nv50, struct pipe_resource *res, unsigned level, unsigned layer) argument
785 nv50_blitctx_pre_blit(struct nv50_blitctx *blit, struct nv50_context *nv50) argument
827 nv50_blitctx_post_blit(struct nv50_context *nv50, struct nv50_blitctx *blit) argument
866 struct nv50_context *nv50 = nv50_context(pipe); local
981 nv50_init_surface_functions(struct nv50_context *nv50) argument
[all...]
H A Dnv50_push.c209 nv50_push_vbo(struct nv50_context *nv50, const struct pipe_draw_info *info) argument
217 ctx.push = nv50->base.pushbuf;
218 ctx.translate = nv50->vertex->translate;
219 ctx.packet_vertex_limit = nv50->vertex->packet_vertex_limit;
220 ctx.vertex_words = nv50->vertex->vertex_size;
222 for (i = 0; i < nv50->num_vtxbufs; ++i) {
223 const struct pipe_vertex_buffer *vb = &nv50->vtxbuf[i];
227 data = nouveau_resource_map_offset(&nv50->base,
232 if (apply_bias && likely(!(nv50->vertex->instance_bufs & (1 << i))))
239 if (nv50
[all...]
H A Dnv50_query.c60 nv50_query_allocate(struct nv50_context *nv50, struct nv50_query *q, int size) argument
62 struct nv50_screen *screen = nv50->screen;
83 nv50_query_allocate(nv50, q, 0);
101 struct nv50_context *nv50 = nv50_context(pipe); local
108 if (!nv50_query_allocate(nv50, q, NV50_QUERY_ALLOC_SPACE)) {
144 struct nv50_context *nv50 = nv50_context(pipe); local
145 struct nouveau_pushbuf *push = nv50->base.pushbuf;
156 nv50_query_allocate(nv50, q, NV50_QUERY_ALLOC_SPACE);
197 struct nv50_context *nv50 = nv50_context(pipe); local
198 struct nouveau_pushbuf *push = nv50
249 struct nv50_context *nv50 = nv50_context(pipe); local
326 struct nv50_context *nv50 = nv50_context(pipe); local
384 nv50_init_query_functions(struct nv50_context *nv50) argument
[all...]
H A Dnv50_transfer.c53 nv50_m2mf_transfer_rect(struct nv50_context *nv50, argument
58 struct nouveau_pushbuf *push = nv50->base.pushbuf;
59 struct nouveau_bufctx *bctx = nv50->bufctx;
151 struct nv50_context *nv50 = nv50_context(&nv->pipe); local
152 struct nouveau_pushbuf *push = nv50->base.pushbuf;
157 nouveau_bufctx_refn(nv50->bufctx, 0, dst, domain | NOUVEAU_BO_WR);
158 nouveau_pushbuf_bufctx(push, nv50->bufctx);
204 nouveau_bufctx_reset(nv50->bufctx, 0);
256 struct nv50_context *nv50 = nv50_context(pctx); local
257 struct nouveau_device *dev = nv50
330 struct nv50_context *nv50 = nv50_context(pctx); local
[all...]
/external/mesa3d/src/gallium/drivers/nv50/
H A Dnv50_context.c71 nv50_context_unreference_resources(struct nv50_context *nv50) argument
75 nouveau_bufctx_del(&nv50->bufctx_3d);
76 nouveau_bufctx_del(&nv50->bufctx);
78 util_unreference_framebuffer_state(&nv50->framebuffer);
80 for (i = 0; i < nv50->num_vtxbufs; ++i)
81 pipe_resource_reference(&nv50->vtxbuf[i].buffer, NULL);
83 pipe_resource_reference(&nv50->idxbuf.buffer, NULL);
86 for (i = 0; i < nv50->num_textures[s]; ++i)
87 pipe_sampler_view_reference(&nv50->textures[s][i], NULL);
90 if (!nv50
98 struct nv50_context *nv50 = nv50_context(pipe); local
121 struct nv50_context *nv50; local
[all...]
H A Dnv50_state_validate.c6 nv50_validate_fb(struct nv50_context *nv50) argument
8 struct nouveau_pushbuf *push = nv50->base.pushbuf;
9 struct pipe_framebuffer_state *fb = &nv50->framebuffer;
13 nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_FB);
54 nv50->state.rt_serialize = TRUE;
59 BCTX_REFN(nv50->bufctx_3d, FB, &mt->base, WR);
84 nv50->state.rt_serialize = TRUE;
88 BCTX_REFN(nv50->bufctx_3d, FB, &mt->base, WR);
103 nv50_validate_blend_colour(struct nv50_context *nv50) argument
105 struct nouveau_pushbuf *push = nv50
115 nv50_validate_stencil_ref(struct nv50_context *nv50) argument
126 nv50_validate_stipple(struct nv50_context *nv50) argument
137 nv50_validate_scissor(struct nv50_context *nv50) argument
179 nv50_validate_viewport(struct nv50_context *nv50) argument
204 nv50_check_program_ucps(struct nv50_context *nv50, struct nv50_program *vp, uint8_t mask) argument
225 nv50_validate_clip(struct nv50_context *nv50) argument
252 nv50_validate_blend(struct nv50_context *nv50) argument
261 nv50_validate_zsa(struct nv50_context *nv50) argument
270 nv50_validate_rasterizer(struct nv50_context *nv50) argument
279 nv50_validate_sample_mask(struct nv50_context *nv50) argument
370 nv50_state_validate(struct nv50_context *nv50, uint32_t mask, unsigned words) argument
[all...]
H A Dnv50_vbo.c135 nv50_emit_vtxattr(struct nv50_context *nv50, struct pipe_vertex_buffer *vb, argument
138 struct nouveau_pushbuf *push = nv50->base.pushbuf;
167 if (attr == nv50->vertprog->vp.edgeflag) {
181 nv50_user_vbuf_range(struct nv50_context *nv50, int vbi, argument
184 if (unlikely(nv50->vertex->instance_bufs & (1 << vbi))) {
187 *size = nv50->vtxbuf[vbi].buffer->width0;
190 assert(nv50->vb_elt_limit != ~0);
191 *base = nv50->vb_elt_first * nv50->vtxbuf[vbi].stride;
192 *size = nv50
198 nv50_upload_user_buffers(struct nv50_context *nv50, uint64_t addrs[], uint32_t limits[]) argument
223 nv50_update_user_vbufs(struct nv50_context *nv50) argument
266 nv50_release_user_vbufs(struct nv50_context *nv50) argument
275 nv50_vertex_arrays_validate(struct nv50_context *nv50) argument
444 nv50_draw_arrays(struct nv50_context *nv50, unsigned mode, unsigned start, unsigned count, unsigned instance_count) argument
563 nv50_draw_elements(struct nv50_context *nv50, boolean shorten, unsigned mode, unsigned start, unsigned count, unsigned instance_count, int32_t index_bias) argument
661 nva0_draw_stream_output(struct nv50_context *nv50, const struct pipe_draw_info *info) argument
718 struct nv50_context *nv50 = nv50_context(pipe); local
[all...]
H A Dnv50_shader_state.c32 nv50_constbufs_validate(struct nv50_context *nv50) argument
34 struct nouveau_pushbuf *push = nv50->base.pushbuf;
48 while (nv50->constbuf_dirty[s]) {
49 const int i = ffs(nv50->constbuf_dirty[s]) - 1;
50 nv50->constbuf_dirty[s] &= ~(1 << i);
52 if (nv50->constbuf[s][i].user) {
55 unsigned words = nv50->constbuf[s][0].size / 4;
60 if (!nv50->state.uniform_buffer_bound[s]) {
61 nv50->state.uniform_buffer_bound[s] = TRUE;
77 PUSH_DATAp(push, &nv50
112 nv50_program_validate(struct nv50_context *nv50, struct nv50_program *prog) argument
127 nv50_program_update_context_state(struct nv50_context *nv50, struct nv50_program *prog, int stage) argument
147 nv50_vertprog_validate(struct nv50_context *nv50) argument
168 nv50_fragprog_validate(struct nv50_context *nv50) argument
190 nv50_gmtyprog_validate(struct nv50_context *nv50) argument
215 nv50_sprite_coords_validate(struct nv50_context *nv50) argument
272 nv50_validate_derived_rs(struct nv50_context *nv50) argument
337 nv50_fp_linkage_validate(struct nv50_context *nv50) argument
521 nv50_gp_linkage_validate(struct nv50_context *nv50) argument
548 nv50_stream_output_validate(struct nv50_context *nv50) argument
[all...]
H A DMakefile4 LIBNAME = nv50
H A Dnv50_state.c210 struct nv50_context *nv50 = nv50_context(pipe); local
212 nv50->blend = hwcso;
213 nv50->dirty |= NV50_NEW_BLEND;
339 struct nv50_context *nv50 = nv50_context(pipe); local
341 nv50->rast = hwcso;
342 nv50->dirty |= NV50_NEW_RASTERIZER;
418 struct nv50_context *nv50 = nv50_context(pipe); local
420 nv50->zsa = hwcso;
421 nv50->dirty |= NV50_NEW_ZSA;
561 nv50_stage_sampler_states_bind(struct nv50_context *nv50, in argument
613 nv50_stage_set_sampler_views(struct nv50_context *nv50, int s, unsigned nr, struct pipe_sampler_view **views) argument
710 struct nv50_context *nv50 = nv50_context(pipe); local
726 struct nv50_context *nv50 = nv50_context(pipe); local
742 struct nv50_context *nv50 = nv50_context(pipe); local
752 struct nv50_context *nv50 = nv50_context(pipe); local
793 struct nv50_context *nv50 = nv50_context(pipe); local
803 struct nv50_context *nv50 = nv50_context(pipe); local
813 struct nv50_context *nv50 = nv50_context(pipe); local
823 struct nv50_context *nv50 = nv50_context(pipe); local
834 struct nv50_context *nv50 = nv50_context(pipe); local
858 struct nv50_context *nv50 = nv50_context(pipe); local
868 struct nv50_context *nv50 = nv50_context(pipe); local
878 struct nv50_context *nv50 = nv50_context(pipe); local
889 struct nv50_context *nv50 = nv50_context(pipe); local
920 struct nv50_context *nv50 = nv50_context(pipe); local
942 struct nv50_context *nv50 = nv50_context(pipe); local
996 struct nv50_context *nv50 = nv50_context(pipe); local
1034 nv50_init_state_functions(struct nv50_context *nv50) argument
[all...]
H A Dnv50_draw.c29 struct nv50_context *nv50; member in struct:nv50_render_stage
74 nv50_draw_render_stage(struct nv50_context *nv50) argument
78 rs->nv50 = nv50;
79 rs->stage.draw = nv50->draw;
H A Dnv50_tex.c200 nv50_validate_tic(struct nv50_context *nv50, int s) argument
202 struct nouveau_pushbuf *push = nv50->base.pushbuf;
203 struct nouveau_bo *txc = nv50->screen->txc;
207 for (i = 0; i < nv50->num_textures[s]; ++i) {
208 struct nv50_tic_entry *tic = nv50_tic_entry(nv50->textures[s][i]);
219 tic->id = nv50_screen_tic_alloc(nv50->screen, tic);
254 nv50->screen->tic.lock[tic->id / 32] |= 1 << (tic->id % 32);
259 BCTX_REFN(nv50->bufctx_3d, TEXTURES, res, RD);
264 for (; i < nv50->state.num_textures[s]; ++i) {
268 nv50
273 nv50_validate_textures(struct nv50_context *nv50) argument
287 nv50_validate_tsc(struct nv50_context *nv50, int s) argument
323 nv50_validate_samplers(struct nv50_context *nv50) argument
[all...]
H A Dnv50_surface.c199 struct nv50_context *nv50 = nv50_context(pipe); local
231 nv50_m2mf_transfer_rect(nv50, &drect, &srect, nx, ny);
250 BCTX_REFN(nv50->bufctx, 2D, nv04_resource(src), RD);
251 BCTX_REFN(nv50->bufctx, 2D, nv04_resource(dst), WR);
252 nouveau_pushbuf_bufctx(nv50->base.pushbuf, nv50->bufctx);
253 nouveau_pushbuf_validate(nv50->base.pushbuf);
256 ret = nv50_2d_texture_do_copy(nv50->base.pushbuf,
265 nouveau_bufctx_reset(nv50->bufctx, NV50_BIND_2D);
275 struct nv50_context *nv50 local
333 struct nv50_context *nv50 = nv50_context(pipe); local
385 struct nv50_context *nv50 = nv50_context(pipe); local
670 nv50_blit_set_dst(struct nv50_context *nv50, struct pipe_resource *res, unsigned level, unsigned layer) argument
705 nv50_blit_set_src(struct nv50_context *nv50, struct pipe_resource *res, unsigned level, unsigned layer) argument
785 nv50_blitctx_pre_blit(struct nv50_blitctx *blit, struct nv50_context *nv50) argument
827 nv50_blitctx_post_blit(struct nv50_context *nv50, struct nv50_blitctx *blit) argument
866 struct nv50_context *nv50 = nv50_context(pipe); local
981 nv50_init_surface_functions(struct nv50_context *nv50) argument
[all...]
H A Dnv50_push.c209 nv50_push_vbo(struct nv50_context *nv50, const struct pipe_draw_info *info) argument
217 ctx.push = nv50->base.pushbuf;
218 ctx.translate = nv50->vertex->translate;
219 ctx.packet_vertex_limit = nv50->vertex->packet_vertex_limit;
220 ctx.vertex_words = nv50->vertex->vertex_size;
222 for (i = 0; i < nv50->num_vtxbufs; ++i) {
223 const struct pipe_vertex_buffer *vb = &nv50->vtxbuf[i];
227 data = nouveau_resource_map_offset(&nv50->base,
232 if (apply_bias && likely(!(nv50->vertex->instance_bufs & (1 << i))))
239 if (nv50
[all...]
H A Dnv50_query.c60 nv50_query_allocate(struct nv50_context *nv50, struct nv50_query *q, int size) argument
62 struct nv50_screen *screen = nv50->screen;
83 nv50_query_allocate(nv50, q, 0);
101 struct nv50_context *nv50 = nv50_context(pipe); local
108 if (!nv50_query_allocate(nv50, q, NV50_QUERY_ALLOC_SPACE)) {
144 struct nv50_context *nv50 = nv50_context(pipe); local
145 struct nouveau_pushbuf *push = nv50->base.pushbuf;
156 nv50_query_allocate(nv50, q, NV50_QUERY_ALLOC_SPACE);
197 struct nv50_context *nv50 = nv50_context(pipe); local
198 struct nouveau_pushbuf *push = nv50
249 struct nv50_context *nv50 = nv50_context(pipe); local
326 struct nv50_context *nv50 = nv50_context(pipe); local
384 nv50_init_query_functions(struct nv50_context *nv50) argument
[all...]
/external/chromium_org/third_party/mesa/src/src/gallium/targets/xvmc-nouveau/
H A DMakefile8 $(TOP)/src/gallium/drivers/nv50/libnv50.a \
/external/mesa3d/src/gallium/targets/xvmc-nouveau/
H A DMakefile8 $(TOP)/src/gallium/drivers/nv50/libnv50.a \

Completed in 793 milliseconds

12