Team Fortress 2 Source Code as on 22/4/2020
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.

251 lines
6.6 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $Header: $
  6. // $NoKeywords: $
  7. //=============================================================================//
  8. #include "BaseVSShader.h"
  9. #define USE_NEW_SHADER //Updating assembly shaders to fxc, this is for A/B testing.
  10. #ifdef USE_NEW_SHADER
  11. #include "fillrate_vs11.inc"
  12. #include "fillrate_ps11.inc"
  13. #include "fillrate_vs20.inc"
  14. #include "fillrate_ps20.inc"
  15. #include "fillrate_ps20b.inc"
  16. #else
  17. #include "fillrate.inc"
  18. #endif
  19. // memdbgon must be the last include file in a .cpp file!!!
  20. #include "tier0/memdbgon.h"
  21. BEGIN_VS_SHADER_FLAGS( Fillrate, "Help for Fillrate", SHADER_NOT_EDITABLE )
  22. BEGIN_SHADER_PARAMS
  23. SHADER_PARAM( PASSCOUNT, SHADER_PARAM_TYPE_INTEGER, "1", "Number of passes for this material" )
  24. END_SHADER_PARAMS
  25. SHADER_INIT_PARAMS()
  26. {
  27. SET_FLAGS2( MATERIAL_VAR2_SUPPORTS_HW_SKINNING );
  28. }
  29. SHADER_INIT
  30. {
  31. }
  32. SHADER_FALLBACK
  33. {
  34. return 0;
  35. }
  36. SHADER_DRAW
  37. {
  38. SHADOW_STATE
  39. {
  40. pShaderShadow->EnableDepthTest( false );
  41. pShaderShadow->EnableDepthWrites( false );
  42. pShaderShadow->EnableBlending( true );
  43. pShaderShadow->BlendFunc( SHADER_BLEND_ONE, SHADER_BLEND_ONE );
  44. pShaderShadow->VertexShaderVertexFormat( VERTEX_POSITION, 1, 0, 0 );
  45. #ifdef USE_NEW_SHADER
  46. if( g_pHardwareConfig->GetDXSupportLevel() >= 90 )
  47. {
  48. DECLARE_STATIC_VERTEX_SHADER( fillrate_vs20 );
  49. SET_STATIC_VERTEX_SHADER( fillrate_vs20 );
  50. if( g_pHardwareConfig->SupportsPixelShaders_2_b() )
  51. {
  52. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps20b );
  53. SET_STATIC_PIXEL_SHADER( fillrate_ps20b );
  54. }
  55. else
  56. {
  57. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps20 );
  58. SET_STATIC_PIXEL_SHADER( fillrate_ps20 );
  59. }
  60. }
  61. else
  62. {
  63. DECLARE_STATIC_VERTEX_SHADER( fillrate_vs11 );
  64. SET_STATIC_VERTEX_SHADER( fillrate_vs11 );
  65. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps11 );
  66. SET_STATIC_PIXEL_SHADER( fillrate_ps11 );
  67. }
  68. #else
  69. fillrate_Static_Index vshIndex;
  70. pShaderShadow->SetVertexShader( "fillrate", vshIndex.GetIndex() );
  71. pShaderShadow->SetPixelShader( "fillrate" );
  72. #endif
  73. }
  74. DYNAMIC_STATE
  75. {
  76. int numPasses = params[PASSCOUNT]->GetIntValue();
  77. float color[4];
  78. if (g_pConfig->bMeasureFillRate)
  79. {
  80. // have to multiply by 2/255 since pixel shader constant are 1.7.
  81. // Will divide the 2 out in the pixel shader.
  82. color[0] = numPasses * ( 2.0f / 255.0f );
  83. }
  84. else
  85. {
  86. color[0] = ( 16 * numPasses ) * ( 2.0f / 255.0f );
  87. }
  88. color[1] = 0.0f;
  89. color[2] = 0.0f;
  90. color[3] = 0.0f;
  91. pShaderAPI->SetPixelShaderConstant( 0, color, 1 );
  92. #ifdef USE_NEW_SHADER
  93. if( g_pHardwareConfig->GetDXSupportLevel() >= 90 )
  94. {
  95. DECLARE_DYNAMIC_VERTEX_SHADER( fillrate_vs20 );
  96. SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  97. SET_DYNAMIC_VERTEX_SHADER_COMBO( SKINNING, pShaderAPI->GetCurrentNumBones() > 0 );
  98. SET_DYNAMIC_VERTEX_SHADER( fillrate_vs20 );
  99. if( g_pHardwareConfig->SupportsPixelShaders_2_b() )
  100. {
  101. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps20b );
  102. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps20b );
  103. }
  104. else
  105. {
  106. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps20 );
  107. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps20 );
  108. }
  109. }
  110. else
  111. {
  112. DECLARE_DYNAMIC_VERTEX_SHADER( fillrate_vs11 );
  113. SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  114. SET_DYNAMIC_VERTEX_SHADER_COMBO( SKINNING, pShaderAPI->GetCurrentNumBones() > 0 );
  115. SET_DYNAMIC_VERTEX_SHADER( fillrate_vs11 );
  116. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps11 );
  117. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps11 );
  118. }
  119. #else
  120. fillrate_Dynamic_Index vshIndex;
  121. vshIndex.SetDOWATERFOG( pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  122. vshIndex.SetSKINNING( pShaderAPI->GetCurrentNumBones() > 0 );
  123. pShaderAPI->SetVertexShaderIndex( vshIndex.GetIndex() );
  124. #endif
  125. }
  126. Draw();
  127. SHADOW_STATE
  128. {
  129. pShaderShadow->EnableDepthTest( false );
  130. pShaderShadow->EnableDepthWrites( false );
  131. pShaderShadow->EnableBlending( true );
  132. pShaderShadow->BlendFunc( SHADER_BLEND_ONE, SHADER_BLEND_ONE );
  133. pShaderShadow->VertexShaderVertexFormat( VERTEX_POSITION, 1, 0, 0 );
  134. pShaderShadow->PolyMode( SHADER_POLYMODEFACE_FRONT_AND_BACK, SHADER_POLYMODE_LINE );
  135. #ifdef USE_NEW_SHADER
  136. if( g_pHardwareConfig->GetDXSupportLevel() >= 90 )
  137. {
  138. DECLARE_STATIC_VERTEX_SHADER( fillrate_vs20 );
  139. SET_STATIC_VERTEX_SHADER( fillrate_vs20 );
  140. if( g_pHardwareConfig->SupportsPixelShaders_2_b() )
  141. {
  142. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps20b );
  143. SET_STATIC_PIXEL_SHADER( fillrate_ps20b );
  144. }
  145. else
  146. {
  147. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps20 );
  148. SET_STATIC_PIXEL_SHADER( fillrate_ps20 );
  149. }
  150. }
  151. else
  152. {
  153. DECLARE_STATIC_VERTEX_SHADER( fillrate_vs11 );
  154. SET_STATIC_VERTEX_SHADER( fillrate_vs11 );
  155. DECLARE_STATIC_PIXEL_SHADER( fillrate_ps11 );
  156. SET_STATIC_PIXEL_SHADER( fillrate_ps11 );
  157. }
  158. #else
  159. fillrate_Static_Index vshIndex;
  160. pShaderShadow->SetVertexShader( "fillrate", vshIndex.GetIndex() );
  161. pShaderShadow->SetPixelShader( "fillrate" );
  162. #endif
  163. }
  164. DYNAMIC_STATE
  165. {
  166. float color[4] = { 0.0f, 0.05f, 0.05f, 0.0f };
  167. pShaderAPI->SetPixelShaderConstant( 0, color, 1 );
  168. #ifdef USE_NEW_SHADER
  169. if( g_pHardwareConfig->GetDXSupportLevel() >= 90 )
  170. {
  171. DECLARE_DYNAMIC_VERTEX_SHADER( fillrate_vs20 );
  172. SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  173. SET_DYNAMIC_VERTEX_SHADER_COMBO( SKINNING, pShaderAPI->GetCurrentNumBones() > 0 );
  174. SET_DYNAMIC_VERTEX_SHADER( fillrate_vs20 );
  175. if( g_pHardwareConfig->SupportsPixelShaders_2_b() )
  176. {
  177. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps20b );
  178. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps20b );
  179. }
  180. else
  181. {
  182. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps20 );
  183. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps20 );
  184. }
  185. }
  186. else
  187. {
  188. DECLARE_DYNAMIC_VERTEX_SHADER( fillrate_vs11 );
  189. SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  190. SET_DYNAMIC_VERTEX_SHADER_COMBO( SKINNING, pShaderAPI->GetCurrentNumBones() > 0 );
  191. SET_DYNAMIC_VERTEX_SHADER( fillrate_vs11 );
  192. DECLARE_DYNAMIC_PIXEL_SHADER( fillrate_ps11 );
  193. SET_DYNAMIC_PIXEL_SHADER( fillrate_ps11 );
  194. }
  195. #else
  196. fillrate_Dynamic_Index vshIndex;
  197. vshIndex.SetDOWATERFOG( pShaderAPI->GetSceneFogMode() == MATERIAL_FOG_LINEAR_BELOW_FOG_Z );
  198. vshIndex.SetSKINNING( pShaderAPI->GetCurrentNumBones() > 0 );
  199. pShaderAPI->SetVertexShaderIndex( vshIndex.GetIndex() );
  200. #endif
  201. }
  202. Draw();
  203. }
  204. END_SHADER