Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
11 KiB

  1. /******************************Module*Header**********************************\
  2. *
  3. * *******************
  4. * * D3D SAMPLE CODE *
  5. * *******************
  6. *
  7. * Module Name: d3ddelta.h
  8. *
  9. * Content: 3DLabs Delta unit related defines. Used only by D3D.
  10. *
  11. * Copyright (c) 1994-1998 3Dlabs Inc. Ltd. All rights reserved.
  12. * Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.
  13. \*****************************************************************************/
  14. #ifdef __D3DDELTA
  15. #pragma message ("FILE : "__FILE__" : Multiple inclusion")
  16. #endif
  17. #define __D3DDELTA
  18. //-----------------------------------------------------------------------------
  19. // Conversion macros from ARGB values into Delta Gambit registers format
  20. //-----------------------------------------------------------------------------
  21. #define RGB_GET_GAMBIT_ALPHA(ci) (((ci) & 0xff000000) >> 2)
  22. #define RGB_GET_GAMBIT_RED(ci) (((ci) & 0xff0000) << 6)
  23. #define RGB_GET_GAMBIT_GREEN(ci) (((ci) & 0xff00) << 14)
  24. #define RGB_GET_GAMBIT_BLUE(ci) (((ci) & 0xff) << 22)
  25. #define RGB_GET_GAMBIT_FOG(ci) (((ci) & 0xff000000) >> 10)
  26. #define AS_ULONG(val) *((volatile DWORD *) &(val))
  27. //-----------------------------------------------------------------------------
  28. // Macros defining the different Vertex types.tags for the Delta unit
  29. //-----------------------------------------------------------------------------
  30. #define VTX_FOG (0x1 << 25)
  31. #define VTX_RGB (0x7 << 21)
  32. #define VTX_R (0x1 << 21)
  33. #define VTX_RGBA (0xF << 21)
  34. #define VTX_COLOR (0x1 << 30)
  35. #define VTX_STQ (0x7 << 16)
  36. #define VTX_KSKD (0x3 << 19)
  37. #define VTX_KS (0x1 << 19)
  38. #define VTX_XYZ (0x7 << 26)
  39. #define VTX_XY (0x3 << 26)
  40. #define VTX_GRP (0x2 << 14)
  41. #define GAMBIT_RGB_VTX (VTX_GRP | VTX_RGB | VTX_XYZ)
  42. #define GAMBIT_RGB_F_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | VTX_FOG)
  43. #define GAMBIT_RGB_TEX_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | VTX_STQ)
  44. #define GAMBIT_RGB_F_TEX_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | \
  45. VTX_STQ | VTX_FOG)
  46. #define GAMBIT_RGBA_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ)
  47. #define GAMBIT_RGBA_F_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | VTX_FOG)
  48. #define GAMBIT_RGBA_TEX_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | VTX_STQ)
  49. #define GAMBIT_RGBA_F_TEX_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | \
  50. VTX_STQ | VTX_FOG)
  51. #define GAMBIT_FLAT_VTX (VTX_GRP | VTX_XYZ)
  52. #define GAMBIT_XYZ_VTX (VTX_GRP | VTX_XYZ)
  53. #define GAMBIT_XYZ_COLOR_VTX (VTX_GRP | VTX_XYZ | VTX_COLOR)
  54. #define GAMBIT_XYZ_STQ_VTX (VTX_GRP | VTX_XYZ | VTX_STQ)
  55. #define GAMBIT_XYZ_STQ_FOG_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_FOG)
  56. #define GAMBIT_XYZ_STQ_KSKD_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_KSKD)
  57. #define GAMBIT_XYZ_STQ_KS_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_KS)
  58. #define GAMBIT_XYZ_STQ_KS_COL_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | \
  59. VTX_KS | VTX_COLOR)
  60. #define GAMBIT_XYZ_STQ_KS_COL_FOG_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | \
  61. VTX_KS | VTX_COLOR | VTX_FOG)
  62. #define GAMBIT_XY_VTX (VTX_GRP | VTX_XY)
  63. #define GAMBIT_XY_STQ_VTX (VTX_GRP | VTX_XY | VTX_STQ)
  64. #define GAMBIT_XY_STQ_FOG_VTX (VTX_GRP | VTX_XY | VTX_STQ | VTX_FOG)
  65. #define GAMBIT_XY_STQ_KSKD_VTX (VTX_GRP | VTX_XY | VTX_STQ | VTX_KSKD)
  66. #define GAMBIT_COLS_VTX (VTX_GRP | VTX_RGB)
  67. #define GAMBIT_PACKED_COLS_VTX (VTX_GRP | VTX_COLOR)
  68. #define GAMBIT_COLS_ALPHA_VTX (VTX_GRP | VTX_RGBA)
  69. #define GAMBIT_COLS_KSKD_VTX (VTX_GRP | VTX_RGB | VTX_KSKD)
  70. #define GAMBIT_FLAT_F_VTX (VTX_GRP | VTX_XYZ | VTX_FOG)
  71. #define GAMBIT_FLAT_TEX_VTX (VTX_GRP | VTX_XYZ | VTX_STQ)
  72. #define GAMBIT_FLAT_F_TEX_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_FOG)
  73. #define GAMBIT_CI_VTX (VTX_GRP | VTX_R | VTX_XYZ)
  74. #define GAMBIT_CI_F_VTX (VTX_GRP | VTX_R | VTX_XYZ | VTX_FOG)
  75. //-----------------------------------------------------------------------------
  76. // Vertex Data downloading macros
  77. //-----------------------------------------------------------------------------
  78. // 4 Entries
  79. #define SEND_VERTEX_XYZ(Num, x_value, y_value, z_value) \
  80. { \
  81. LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_VTX | Num)); \
  82. LD_INPUT_FIFO_DATA( AS_ULONG(x_value) ); \
  83. LD_INPUT_FIFO_DATA( AS_ULONG(y_value) ); \
  84. LD_INPUT_FIFO_DATA( AS_ULONG(z_value) ); \
  85. }
  86. // 7 Entries
  87. #define SEND_VERTEX_STQ_XYZ(Num, s_value, t_value, q_value, \
  88. x_value, y_value, z_value) \
  89. { \
  90. LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_STQ_VTX | Num)); \
  91. LD_INPUT_FIFO_DATA(AS_ULONG(s_value)); \
  92. LD_INPUT_FIFO_DATA(AS_ULONG(t_value)); \
  93. LD_INPUT_FIFO_DATA(AS_ULONG(q_value)); \
  94. LD_INPUT_FIFO_DATA(AS_ULONG(x_value)); \
  95. LD_INPUT_FIFO_DATA(AS_ULONG(y_value)); \
  96. LD_INPUT_FIFO_DATA(AS_ULONG(z_value)); \
  97. }
  98. // 8 Entries
  99. #define SEND_VERTEX_STQ_KS_XYZ(Num, s_value, t_value, q_value, \
  100. Ks_value, x_value, y_value, z_value) \
  101. { \
  102. LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_STQ_KS_VTX | Num)); \
  103. LD_INPUT_FIFO_DATA( AS_ULONG(s_value)); \
  104. LD_INPUT_FIFO_DATA( AS_ULONG(t_value)); \
  105. LD_INPUT_FIFO_DATA( AS_ULONG(q_value)); \
  106. LD_INPUT_FIFO_DATA( AS_ULONG(Ks_value)); \
  107. LD_INPUT_FIFO_DATA( AS_ULONG(x_value)); \
  108. LD_INPUT_FIFO_DATA( AS_ULONG(y_value)); \
  109. LD_INPUT_FIFO_DATA( AS_ULONG(z_value)); \
  110. }
  111. // 2 Entries
  112. #define SEND_VERTEX_FOG(vNo, fog_value) \
  113. { \
  114. LD_INPUT_FIFO_DATA( vNo); \
  115. LD_INPUT_FIFO_DATA(fog_value); \
  116. }
  117. // 4 Entries
  118. #define SEND_VERTEX_RGB_MONO(vNo, Color) \
  119. { \
  120. LD_INPUT_FIFO_DATA( (GAMBIT_COLS_VTX | vNo)); \
  121. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
  122. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
  123. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
  124. }
  125. // 4 Entries
  126. #define SEND_VERTEX_RGB(vNo, Color) \
  127. { \
  128. LD_INPUT_FIFO_DATA( (GAMBIT_COLS_VTX | vNo)); \
  129. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_RED(Color)); \
  130. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_GREEN(Color)); \
  131. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
  132. }
  133. // 2 Entries
  134. #define SEND_VERTEX_RGBA_P2(vNo, Color) \
  135. { \
  136. LD_INPUT_FIFO_DATA( (GAMBIT_PACKED_COLS_VTX | vNo)); \
  137. LD_INPUT_FIFO_DATA(Color); \
  138. }
  139. // 2 Entries
  140. #define SEND_VERTEX_RGB_MONO_P2(vNo, Color) \
  141. { \
  142. DWORD dwBlueVal = RGB_GET_GAMBIT_BLUE(Color); \
  143. LD_INPUT_FIFO_DATA( (GAMBIT_PACKED_COLS_VTX | vNo)); \
  144. LD_INPUT_FIFO_DATA( dwBlueVal | (dwBlueVal << 8) | (dwBlueVal << 16)); \
  145. }
  146. // 5 Entries
  147. #define SEND_VERTEX_RGBA(vNo, Color) \
  148. { \
  149. LD_INPUT_FIFO_DATA( (GAMBIT_COLS_ALPHA_VTX | vNo)); \
  150. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_RED(Color)); \
  151. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_GREEN(Color)); \
  152. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
  153. LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_ALPHA(Color)); \
  154. }
  155. //-----------------------------------------------------------------------------
  156. // HW Alpha stippling macros
  157. //-----------------------------------------------------------------------------
  158. extern DWORD FlatStipplePatterns[128];
  159. #define SET_STIPPLED_ALPHA(AlphaValue) \
  160. { \
  161. DWORD* pStipple; \
  162. DWORD NewAlpha = AlphaValue; \
  163. if (NewAlpha != pContext->LastAlpha) \
  164. { \
  165. pContext->LastAlpha = NewAlpha; \
  166. pStipple = FlatStipplePatterns + (NewAlpha << 3); \
  167. LD_INPUT_FIFO_DATA((0x00ff8000 | __Permedia2TagAreaStipplePattern0)); \
  168. LD_INPUT_FIFO_DATA( pStipple[0]); \
  169. LD_INPUT_FIFO_DATA( pStipple[1]); \
  170. LD_INPUT_FIFO_DATA( pStipple[2]); \
  171. LD_INPUT_FIFO_DATA( pStipple[3]); \
  172. LD_INPUT_FIFO_DATA( pStipple[4]); \
  173. LD_INPUT_FIFO_DATA( pStipple[5]); \
  174. LD_INPUT_FIFO_DATA( pStipple[6]); \
  175. LD_INPUT_FIFO_DATA( pStipple[7]); \
  176. \
  177. } \
  178. RENDER_AREA_STIPPLE_ENABLE(ulRenderCmd); \
  179. }
  180. //-----------------------------------------------------------------------------
  181. // Rendering command setup macros
  182. //-----------------------------------------------------------------------------
  183. #define RENDER_AREA_STIPPLE_ENABLE(a) a |= __RENDER_AREA_STIPPLE_ENABLE;
  184. #define RENDER_AREA_STIPPLE_DISABLE(a) a &= ~__RENDER_AREA_STIPPLE_ENABLE;
  185. #define RENDER_TEXTURE_ENABLE(a) a |= __RENDER_TEXTURE_ENABLE;
  186. #define RENDER_TEXTURE_DISABLE(a) a &= ~__RENDER_TEXTURE_ENABLE;
  187. #define RENDER_FOG_ENABLE(a) a |= (1 << 14);
  188. #define RENDER_FOG_DISABLE(a) a &= ~(1 << 14);
  189. #define RENDER_SUB_PIXEL_CORRECTION_ENABLE(a) a |= (1 << 16);
  190. #define RENDER_SUB_PIXEL_CORRECTION_DISABLE(a) a &= ~(1 << 16);
  191. #define RENDER_LINE(a) a &= ~(0xC0);
  192. #define RENDER_TRAPEZOID(a) {a &= ~(0xC0); a |= (0x40);}
  193. #define RENDER_POINT(a) {a &= ~(0xC0);a |= (0x80);}
  194. #define RENDER_NEGATIVE_CULL(a) a |= (1 << 20);
  195. #define RENDER_POSITIVE_CULL(a) a &= ~(1 << 20);