summaryrefslogtreecommitdiffhomepage
path: root/include/ntapi/nt_blitter.h
blob: 9c9a1453148b0dafb1c61f65358948c3edd4e747 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#ifndef _NT_BLITTER_H_
#define _NT_BLITTER_H_

#include "nt_abi.h"
#include "nt_object.h"

/* blt_alloc flag bits */
#define NT_BLITTER_ENABLE_BLOCK_ARRAY		0x01
#define NT_BLITTER_ENABLE_BLOCK_SECTIONS	0x02
#define NT_BLITTER_ENABLE_CACHE			0x04
#define NT_BLITTER_PRESERVE_BITS		0x08

/* blitter query type bits */
#define	NT_BLITTER_QUERY_INFO			0x01
#define	NT_BLITTER_QUERY_PARAMS			0x02

/* blitter context (opaque) */
typedef struct nt_blitter_context nt_blitter;

typedef struct _nt_blitter_params {
	size_t		params_size;
	size_t		block_size;
	intptr_t	block_count;
	intptr_t	cache_blocks_min;	__optional
	intptr_t	cache_blocks_max;	__optional
	size_t		zero_bits;		__optional
	uint32_t	srvtid;			__optional
	uint32_t	flags;			__optional
	int32_t		lock_tries;		__optional
	uint32_t	round_trips;		__optional
	void *		hsignal_blt;		__optional
	void *		hsignal_app;		__optional
	void *		bitmap;			__optional
	void *		region;			__optional
} nt_blitter_params;


typedef struct _nt_blitter_info {
	size_t		info_size;
	void *		region_addr;
	size_t		region_size;
	size_t		block_size;
	intptr_t	block_count;
	intptr_t	blocks_used;
	intptr_t	blocks_avail;
	intptr_t	blocks_cached;
	intptr_t	lock_tries;
	intptr_t	busy;
} nt_blitter_info;


typedef struct _nt_blitter_query {
	size_t			size;
	int32_t			type;
	uint32_t		flags;
	nt_blitter_params *	params;
	nt_blitter_info *	info;
} nt_blitter_query;


typedef struct _nt_blitter_config {
	size_t			size;
	int32_t			type;
	uint32_t		flags;
	nt_blitter_params *	params;
} nt_blitter_config;


/* blitter functions */
typedef int32_t __fastcall	ntapi_blt_alloc(
	__out	nt_blitter **		blitter,
	__in	nt_blitter_params *	params);


typedef int32_t __fastcall	ntapi_blt_free(
	__in	nt_blitter *		blitter);


typedef int32_t __fastcall	ntapi_blt_query(
	__in	nt_blitter *		blitter,
	__in	nt_blitter_query *	blt_query);


typedef int32_t __fastcall	ntapi_blt_config(
	__in	nt_blitter *		blitter,
	__in	nt_blitter_config *	blt_config);


typedef int32_t __fastcall	ntapi_blt_acquire(
	__in	nt_blitter *		blitter,
	__out	intptr_t *		block_id);


typedef int32_t __fastcall	ntapi_blt_obtain(
	__in	nt_blitter *		blitter,
	__out	intptr_t *		block_id);


typedef int32_t __fastcall	ntapi_blt_possess(
	__in	nt_blitter *		blitter,
	__out	intptr_t *		block_id);


typedef int32_t __fastcall	ntapi_blt_release(
	__in	nt_blitter *		blitter,
	__in	intptr_t		block_id);


typedef void * __fastcall	ntapi_blt_region(
	__in	const nt_blitter *	blitter);


/**
 *  blt_get,blt_set:
 *  clients might prefr to write inlined
 *  alternatives that use a cached blt_region.
**/
typedef void * __fastcall	ntapi_blt_get(
	__in	const nt_blitter *	blitter,
	__in	intptr_t		block_id);


typedef void __fastcall		ntapi_blt_set(
	__in	const nt_blitter *	blitter,
	__in	intptr_t		block_id,
	__in	void *			val);


#endif