r128_drm.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:7k
源码类别:

嵌入式Linux

开发平台:

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.  *    Kevin E. Martin <martin@valinux.com>
  29.  *    Gareth Hughes <gareth@valinux.com>
  30.  *
  31.  */
  32. #ifndef _R128_DRM_H_
  33. #define _R128_DRM_H_
  34. /* WARNING: If you change any of these defines, make sure to change the
  35.  * defines in the X server file (r128_sarea.h)
  36.  */
  37. #ifndef __R128_SAREA_DEFINES__
  38. #define __R128_SAREA_DEFINES__
  39. /* What needs to be changed for the current vertex buffer?
  40.  */
  41. #define R128_UPLOAD_CONTEXT 0x001
  42. #define R128_UPLOAD_SETUP 0x002
  43. #define R128_UPLOAD_TEX0 0x004
  44. #define R128_UPLOAD_TEX1 0x008
  45. #define R128_UPLOAD_TEX0IMAGES 0x010
  46. #define R128_UPLOAD_TEX1IMAGES 0x020
  47. #define R128_UPLOAD_CORE 0x040
  48. #define R128_UPLOAD_MASKS 0x080
  49. #define R128_UPLOAD_WINDOW 0x100
  50. #define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */
  51. #define R128_REQUIRE_QUIESCENCE 0x400
  52. #define R128_UPLOAD_ALL 0x7ff
  53. #define R128_FRONT 0x1
  54. #define R128_BACK 0x2
  55. #define R128_DEPTH 0x4
  56. /* Primitive types
  57.  */
  58. #define R128_POINTS 0x1
  59. #define R128_LINES 0x2
  60. #define R128_LINE_STRIP 0x3
  61. #define R128_TRIANGLES 0x4
  62. #define R128_TRIANGLE_FAN 0x5
  63. #define R128_TRIANGLE_STRIP 0x6
  64. /* Vertex/indirect buffer size
  65.  */
  66. #if 1
  67. #define R128_BUFFER_SIZE 16384
  68. #else
  69. #define R128_BUFFER_SIZE (128 * 1024)
  70. #endif
  71. /* Byte offsets for indirect buffer data
  72.  */
  73. #define R128_INDEX_PRIM_OFFSET 20
  74. #define R128_HOSTDATA_BLIT_OFFSET 32
  75. /* 2048x2048 @ 32bpp texture requires this many indirect buffers
  76.  */
  77. #define R128_MAX_BLIT_BUFFERS ((2048 * 2048 * 4) / R128_BUFFER_SIZE)
  78. /* Keep these small for testing.
  79.  */
  80. #define R128_NR_SAREA_CLIPRECTS 12
  81. /* There are 2 heaps (local/AGP).  Each region within a heap is a
  82.  *  minimum of 64k, and there are at most 64 of them per heap.
  83.  */
  84. #define R128_LOCAL_TEX_HEAP 0
  85. #define R128_AGP_TEX_HEAP 1
  86. #define R128_NR_TEX_HEAPS 2
  87. #define R128_NR_TEX_REGIONS 64
  88. #define R128_LOG_TEX_GRANULARITY 16
  89. #define R128_NR_CONTEXT_REGS 12
  90. #define R128_TEX_MAXLEVELS 11
  91. #endif /* __R128_SAREA_DEFINES__ */
  92. typedef struct {
  93. /* Context state - can be written in one large chunk */
  94. unsigned int dst_pitch_offset_c;
  95. unsigned int dp_gui_master_cntl_c;
  96. unsigned int sc_top_left_c;
  97. unsigned int sc_bottom_right_c;
  98. unsigned int z_offset_c;
  99. unsigned int z_pitch_c;
  100. unsigned int z_sten_cntl_c;
  101. unsigned int tex_cntl_c;
  102. unsigned int misc_3d_state_cntl_reg;
  103. unsigned int texture_clr_cmp_clr_c;
  104. unsigned int texture_clr_cmp_msk_c;
  105. unsigned int fog_color_c;
  106. /* Texture state */
  107. unsigned int tex_size_pitch_c;
  108. unsigned int constant_color_c;
  109. /* Setup state */
  110. unsigned int pm4_vc_fpu_setup;
  111. unsigned int setup_cntl;
  112. /* Mask state */
  113. unsigned int dp_write_mask;
  114. unsigned int sten_ref_mask_c;
  115. unsigned int plane_3d_mask_c;
  116. /* Window state */
  117. unsigned int window_xy_offset;
  118. /* Core state */
  119. unsigned int scale_3d_cntl;
  120. } drm_r128_context_regs_t;
  121. /* Setup registers for each texture unit */
  122. typedef struct {
  123. unsigned int tex_cntl;
  124. unsigned int tex_combine_cntl;
  125. unsigned int tex_size_pitch;
  126. unsigned int tex_offset[R128_TEX_MAXLEVELS];
  127. unsigned int tex_border_color;
  128. } drm_r128_texture_regs_t;
  129. typedef struct drm_tex_region {
  130. unsigned char next, prev;
  131. unsigned char in_use;
  132. int age;
  133. } drm_tex_region_t;
  134. typedef struct drm_r128_sarea {
  135. /* The channel for communication of state information to the kernel
  136.  * on firing a vertex buffer.
  137.  */
  138. drm_r128_context_regs_t context_state;
  139. drm_r128_texture_regs_t tex_state[R128_NR_TEX_HEAPS];
  140. unsigned int dirty;
  141. unsigned int vertsize;
  142. unsigned int vc_format;
  143. /* The current cliprects, or a subset thereof.
  144.  */
  145. drm_clip_rect_t boxes[R128_NR_SAREA_CLIPRECTS];
  146. unsigned int nbox;
  147. /* Counters for client-side throttling of rendering clients.
  148.  */
  149. unsigned int last_frame;
  150. unsigned int last_dispatch;
  151. drm_tex_region_t tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS+1];
  152. int tex_age[R128_NR_TEX_HEAPS];
  153. int ctx_owner;
  154. } drm_r128_sarea_t;
  155. /* WARNING: If you change any of these defines, make sure to change the
  156.  * defines in the Xserver file (xf86drmR128.h)
  157.  */
  158. typedef struct drm_r128_init {
  159. enum {
  160. R128_INIT_CCE    = 0x01,
  161. R128_CLEANUP_CCE = 0x02
  162. } func;
  163. int sarea_priv_offset;
  164. int is_pci;
  165. int cce_mode;
  166. int cce_secure;
  167. int ring_size;
  168. int usec_timeout;
  169. unsigned int fb_bpp;
  170. unsigned int front_offset, front_pitch;
  171. unsigned int back_offset, back_pitch;
  172. unsigned int depth_bpp;
  173. unsigned int depth_offset, depth_pitch;
  174. unsigned int span_offset;
  175. unsigned int fb_offset;
  176. unsigned int mmio_offset;
  177. unsigned int ring_offset;
  178. unsigned int ring_rptr_offset;
  179. unsigned int buffers_offset;
  180. unsigned int agp_textures_offset;
  181. } drm_r128_init_t;
  182. typedef struct drm_r128_cce_stop {
  183. int flush;
  184. int idle;
  185. } drm_r128_cce_stop_t;
  186. typedef struct drm_r128_clear {
  187. unsigned int flags;
  188. int x, y, w, h;
  189. unsigned int clear_color;
  190. unsigned int clear_depth;
  191. } drm_r128_clear_t;
  192. typedef struct drm_r128_vertex {
  193. int prim;
  194. int idx; /* Index of vertex buffer */
  195. int count; /* Number of vertices in buffer */
  196. int discard; /* Client finished with buffer? */
  197. } drm_r128_vertex_t;
  198. typedef struct drm_r128_indices {
  199. int prim;
  200. int idx;
  201. int start;
  202. int end;
  203. int discard; /* Client finished with buffer? */
  204. } drm_r128_indices_t;
  205. typedef struct drm_r128_blit {
  206. int idx;
  207. int pitch;
  208. int offset;
  209. int format;
  210. unsigned short x, y;
  211. unsigned short width, height;
  212. } drm_r128_blit_t;
  213. typedef struct drm_r128_depth {
  214. enum {
  215. R128_WRITE_SPAN = 0x01,
  216. R128_WRITE_PIXELS = 0x02,
  217. R128_READ_SPAN = 0x03,
  218. R128_READ_PIXELS = 0x04
  219. } func;
  220. int n;
  221. int *x;
  222. int *y;
  223. unsigned int *buffer;
  224. unsigned char *mask;
  225. } drm_r128_depth_t;
  226. typedef struct drm_r128_stipple {
  227. unsigned int *mask;
  228. } drm_r128_stipple_t;
  229. typedef struct drm_r128_packet {
  230. unsigned int *buffer;
  231. int count;
  232. int flags;
  233. } drm_r128_packet_t;
  234. #endif