r128_drm.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* r128_drm.h -- Public header for the r128 driver -*- linux-c -*-
  2.  * Created: Wed Apr  5 19:24:19 2000 by kevin@precisioninsight.com
  3.  *
  4.  * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
  5.  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
  6.  * All rights reserved.
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a
  9.  * copy of this software and associated documentation files (the "Software"),
  10.  * to deal in the Software without restriction, including without limitation
  11.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  12.  * and/or sell copies of the Software, and to permit persons to whom the
  13.  * Software is furnished to do so, subject to the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice (including the next
  16.  * paragraph) shall be included in all copies or substantial portions of the
  17.  * Software.
  18.  *
  19.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  22.  * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  23.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  24.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  25.  * DEALINGS IN THE SOFTWARE.
  26.  *
  27.  * Authors:
  28.  *    Gareth Hughes <gareth@valinux.com>
  29.  *    Kevin E. Martin <martin@valinux.com>
  30.  */
  31. #ifndef __R128_DRM_H__
  32. #define __R128_DRM_H__
  33. /* WARNING: If you change any of these defines, make sure to change the
  34.  * defines in the X server file (r128_sarea.h)
  35.  */
  36. #ifndef __R128_SAREA_DEFINES__
  37. #define __R128_SAREA_DEFINES__
  38. /* What needs to be changed for the current vertex buffer?
  39.  */
  40. #define R128_UPLOAD_CONTEXT 0x001
  41. #define R128_UPLOAD_SETUP 0x002
  42. #define R128_UPLOAD_TEX0 0x004
  43. #define R128_UPLOAD_TEX1 0x008
  44. #define R128_UPLOAD_TEX0IMAGES 0x010
  45. #define R128_UPLOAD_TEX1IMAGES 0x020
  46. #define R128_UPLOAD_CORE 0x040
  47. #define R128_UPLOAD_MASKS 0x080
  48. #define R128_UPLOAD_WINDOW 0x100
  49. #define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */
  50. #define R128_REQUIRE_QUIESCENCE 0x400
  51. #define R128_UPLOAD_ALL 0x7ff
  52. #define R128_FRONT 0x1
  53. #define R128_BACK 0x2
  54. #define R128_DEPTH 0x4
  55. /* Primitive types
  56.  */
  57. #define R128_POINTS 0x1
  58. #define R128_LINES 0x2
  59. #define R128_LINE_STRIP 0x3
  60. #define R128_TRIANGLES 0x4
  61. #define R128_TRIANGLE_FAN 0x5
  62. #define R128_TRIANGLE_STRIP 0x6
  63. /* Vertex/indirect buffer size
  64.  */
  65. #define R128_BUFFER_SIZE 16384
  66. /* Byte offsets for indirect buffer data
  67.  */
  68. #define R128_INDEX_PRIM_OFFSET 20
  69. #define R128_HOSTDATA_BLIT_OFFSET 32
  70. /* Keep these small for testing.
  71.  */
  72. #define R128_NR_SAREA_CLIPRECTS 12
  73. /* There are 2 heaps (local/AGP).  Each region within a heap is a
  74.  *  minimum of 64k, and there are at most 64 of them per heap.
  75.  */
  76. #define R128_LOCAL_TEX_HEAP 0
  77. #define R128_AGP_TEX_HEAP 1
  78. #define R128_NR_TEX_HEAPS 2
  79. #define R128_NR_TEX_REGIONS 64
  80. #define R128_LOG_TEX_GRANULARITY 16
  81. #define R128_NR_CONTEXT_REGS 12
  82. #define R128_MAX_TEXTURE_LEVELS 11
  83. #define R128_MAX_TEXTURE_UNITS 2
  84. #endif /* __R128_SAREA_DEFINES__ */
  85. typedef struct {
  86. /* Context state - can be written in one large chunk */
  87. unsigned int dst_pitch_offset_c;
  88. unsigned int dp_gui_master_cntl_c;
  89. unsigned int sc_top_left_c;
  90. unsigned int sc_bottom_right_c;
  91. unsigned int z_offset_c;
  92. unsigned int z_pitch_c;
  93. unsigned int z_sten_cntl_c;
  94. unsigned int tex_cntl_c;
  95. unsigned int misc_3d_state_cntl_reg;
  96. unsigned int texture_clr_cmp_clr_c;
  97. unsigned int texture_clr_cmp_msk_c;
  98. unsigned int fog_color_c;
  99. /* Texture state */
  100. unsigned int tex_size_pitch_c;
  101. unsigned int constant_color_c;
  102. /* Setup state */
  103. unsigned int pm4_vc_fpu_setup;
  104. unsigned int setup_cntl;
  105. /* Mask state */
  106. unsigned int dp_write_mask;
  107. unsigned int sten_ref_mask_c;
  108. unsigned int plane_3d_mask_c;
  109. /* Window state */
  110. unsigned int window_xy_offset;
  111. /* Core state */
  112. unsigned int scale_3d_cntl;
  113. } drm_r128_context_regs_t;
  114. /* Setup registers for each texture unit
  115.  */
  116. typedef struct {
  117. unsigned int tex_cntl;
  118. unsigned int tex_combine_cntl;
  119. unsigned int tex_size_pitch;
  120. unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS];
  121. unsigned int tex_border_color;
  122. } drm_r128_texture_regs_t;
  123. typedef struct drm_r128_sarea {
  124. /* The channel for communication of state information to the kernel
  125.  * on firing a vertex buffer.
  126.  */
  127. drm_r128_context_regs_t context_state;
  128. drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS];
  129. unsigned int dirty;
  130. unsigned int vertsize;
  131. unsigned int vc_format;
  132. /* The current cliprects, or a subset thereof.
  133.  */
  134. drm_clip_rect_t boxes[R128_NR_SAREA_CLIPRECTS];
  135. unsigned int nbox;
  136. /* Counters for client-side throttling of rendering clients.
  137.  */
  138. unsigned int last_frame;
  139. unsigned int last_dispatch;
  140. drm_tex_region_t tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS+1];
  141. int tex_age[R128_NR_TEX_HEAPS];
  142. int ctx_owner;
  143. } drm_r128_sarea_t;
  144. /* WARNING: If you change any of these defines, make sure to change the
  145.  * defines in the Xserver file (xf86drmR128.h)
  146.  */
  147. typedef struct drm_r128_init {
  148. enum {
  149. R128_INIT_CCE    = 0x01,
  150. R128_CLEANUP_CCE = 0x02
  151. } func;
  152. #if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
  153. int sarea_priv_offset;
  154. #else
  155. unsigned long sarea_priv_offset;
  156. #endif
  157. int is_pci;
  158. int cce_mode;
  159. int cce_secure;
  160. int ring_size;
  161. int usec_timeout;
  162. unsigned int fb_bpp;
  163. unsigned int front_offset, front_pitch;
  164. unsigned int back_offset, back_pitch;
  165. unsigned int depth_bpp;
  166. unsigned int depth_offset, depth_pitch;
  167. unsigned int span_offset;
  168. #if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
  169. unsigned int fb_offset;
  170. unsigned int mmio_offset;
  171. unsigned int ring_offset;
  172. unsigned int ring_rptr_offset;
  173. unsigned int buffers_offset;
  174. unsigned int agp_textures_offset;
  175. #else
  176. unsigned long fb_offset;
  177. unsigned long mmio_offset;
  178. unsigned long ring_offset;
  179. unsigned long ring_rptr_offset;
  180. unsigned long buffers_offset;
  181. unsigned long agp_textures_offset;
  182. #endif
  183. } drm_r128_init_t;
  184. typedef struct drm_r128_cce_stop {
  185. int flush;
  186. int idle;
  187. } drm_r128_cce_stop_t;
  188. typedef struct drm_r128_clear {
  189. unsigned int flags;
  190. #if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
  191. int x, y, w, h;
  192. #endif
  193. unsigned int clear_color;
  194. unsigned int clear_depth;
  195. #if CONFIG_XFREE86_VERSION >= XFREE86_VERSION(4,1,0,0)
  196. unsigned int color_mask;
  197. unsigned int depth_mask;
  198. #endif
  199. } drm_r128_clear_t;
  200. typedef struct drm_r128_vertex {
  201. int prim;
  202. int idx; /* Index of vertex buffer */
  203. int count; /* Number of vertices in buffer */
  204. int discard; /* Client finished with buffer? */
  205. } drm_r128_vertex_t;
  206. typedef struct drm_r128_indices {
  207. int prim;
  208. int idx;
  209. int start;
  210. int end;
  211. int discard; /* Client finished with buffer? */
  212. } drm_r128_indices_t;
  213. typedef struct drm_r128_blit {
  214. int idx;
  215. int pitch;
  216. int offset;
  217. int format;
  218. unsigned short x, y;
  219. unsigned short width, height;
  220. } drm_r128_blit_t;
  221. typedef struct drm_r128_depth {
  222. enum {
  223. R128_WRITE_SPAN = 0x01,
  224. R128_WRITE_PIXELS = 0x02,
  225. R128_READ_SPAN = 0x03,
  226. R128_READ_PIXELS = 0x04
  227. } func;
  228. int n;
  229. int *x;
  230. int *y;
  231. unsigned int *buffer;
  232. unsigned char *mask;
  233. } drm_r128_depth_t;
  234. typedef struct drm_r128_stipple {
  235. unsigned int *mask;
  236. } drm_r128_stipple_t;
  237. typedef struct drm_r128_indirect {
  238. int idx;
  239. int start;
  240. int end;
  241. int discard;
  242. } drm_r128_indirect_t;
  243. typedef struct drm_r128_fullscreen {
  244. enum {
  245. R128_INIT_FULLSCREEN    = 0x01,
  246. R128_CLEANUP_FULLSCREEN = 0x02
  247. } func;
  248. } drm_r128_fullscreen_t;
  249. #endif