157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez/*
257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * Copyright (C) 2009-2010 Francisco Jerez.
357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * All Rights Reserved.
457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez *
557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * Permission is hereby granted, free of charge, to any person obtaining
657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * a copy of this software and associated documentation files (the
757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * "Software"), to deal in the Software without restriction, including
857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * without limitation the rights to use, copy, modify, merge, publish,
957382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * distribute, sublicense, and/or sell copies of the Software, and to
1057382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * permit persons to whom the Software is furnished to do so, subject to
1157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * the following conditions:
1257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez *
1357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * The above copyright notice and this permission notice (including the
1457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * next paragraph) shall be included in all copies or substantial
1557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * portions of the Software.
1657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez *
1757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1957382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
2057382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
2157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
2257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez *
2557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez */
2657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
2757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez#ifndef __NOUVEAU_ARRAY_H__
2857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez#define __NOUVEAU_ARRAY_H__
2957382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
3057382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerezstruct nouveau_array;
3157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
3257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereztypedef unsigned (*extract_u_t)(struct nouveau_array *, int, int);
3357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereztypedef float (*extract_f_t)(struct nouveau_array *, int, int);
3457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
3557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerezstruct nouveau_array {
3657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	int attr;
3757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	int stride, fields, type;
3857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
3957382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	struct nouveau_bo *bo;
4057382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	unsigned offset;
4157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	const void *buf;
4257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
4357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	extract_u_t extract_u;
4457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez	extract_f_t extract_f;
4557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez};
4657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
4757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerezvoid
4857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereznouveau_init_array(struct nouveau_array *a, int attr, int stride,
4957382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez		   int fields, int type, struct gl_buffer_object *obj,
502e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		   const void *ptr, GLboolean map, struct gl_context *ctx);
5157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
5257382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerezvoid
5357382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereznouveau_deinit_array(struct nouveau_array *a);
5457382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
5557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerezvoid
5657382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereznouveau_cleanup_array(struct nouveau_array *a);
5757382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez
5857382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez#endif
59