Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
#ifndef __NOUVEAU_STATEBUF_H__
2
#define __NOUVEAU_STATEBUF_H__
3
 
4
/* state buffers: lightweight state objects interface */
5
/* relocations are not supported, but Gallium CSOs don't require them */
6
 
7
struct nouveau_statebuf_builder
8
{
9
	uint32_t* p;
10
#ifdef DEBUG
11
	uint32_t* pend;
12
#endif
13
};
14
 
15
#ifdef DEBUG
16
#define sb_init(var) {var, var + sizeof(var) / sizeof((var)[0])}
17
#define sb_data(sb, v) do {assert((sb).p != (sb).pend);  *(sb).p++ = (v);} while(0)
18
#else
19
#define sb_init(var) {var}
20
#define sb_data(sb, v) *(sb).p++ = (v)
21
#endif
22
 
23
static INLINE uint32_t sb_header(unsigned subc, unsigned mthd, unsigned size)
24
{
25
	return (size << 18) | (subc << 13) | mthd;
26
}
27
 
28
#define sb_method(sb, v, n)  sb_data(sb, sb_header(SUBC_3D(v), n));
29
 
30
#define sb_len(sb, var) ((sb).p - (var))
31
#define sb_emit(push, sb_buf, sb_len) do {PUSH_SPACE((push), (sb_len)); PUSH_DATAp((push), (sb_buf), (sb_len)); } while(0)
32
#endif