hkpSpuConfig.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:8k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_SPU_CONFIG_H
  9. #define HK_SPU_CONFIG_H
  10. #include <Physics/Collide/Query/Multithreaded/Spu/hkpSpuConfig.h>
  11. //
  12. // Note: This file references symbols in other files.
  13. //  You might have to include another file to use them properly
  14. //
  15. //  Important:  after modifying those values, check that you have at least 16k left for the normal stack
  16. // Also use the simulator to verify this size
  17. // ***********************************************************************
  18. // ******* General defines and limits of the engine                 ******
  19. // ******* These values are Havok tunable + require a full rebuild  ******
  20. // ***********************************************************************
  21. // The maximum number of contact points which are created between 2 objects
  22. #define HK_MAX_NUM_CONTACT_POINTS_IN_CONSTRAINT_ON_SPU      HK_MAX_CONTACT_POINT
  23. // The size of the cache lines on spu. Only collision agents using shapes
  24. // with a size smaller than this value are processed on the spu; all others are left on ppu
  25. #define HK_SPU_AGENT_SECTOR_JOB_MAX_SHAPE_SIZE HK_SPU_MAXIMUM_SHAPE_SIZE
  26. #define HK_SPU_AGENT_SECTOR_JOB_MAX_UNTYPED_CACHE_LINE_SIZE HK_SPU_UNTYPED_CACHE_LINE_SIZE
  27. #define HK_SPU_AGENT_SECTOR_JOB_MOPP_CACHE_LINE_SIZE 512
  28. // the maximum number of jacobians for a normal constraint (excluding contact point constraint)
  29. // This maximum is currently reached by a powered ragdoll constraint with friction and limits 
  30. // (3 motors, 3 friction, 3 limits, 3 ball socket = 12)
  31. #define HK_SPU_CONSTRAINT_RUNTIME_BUFFER_SIZE (sizeof(hkpSolverResults) * 16) 
  32. // this is the maximum number of hits in a mopp query, this includes the HK_INVALID_SHAPE_KEY end flag
  33. #define HK_MAX_AGENTS_IN_1N_MACHINE HK_MAX_NUM_HITS_PER_AABB_QUERY
  34. // *******************************************
  35. // *******  General buffers, tunable    ******
  36. // *******  client rebuild required     ******
  37. // *******************************************
  38. #define HK_MONITOR_STREAM_BUFFER_SIZE  4096
  39. #define HK_MONITOR_STRINGS_BUFFER_SIZE 2048
  40. // *******************************************************
  41. // *******  General flags to tune the performance   ******
  42. // *******  client rebuild required                 ******
  43. // *******************************************************
  44. // 
  45. // Collide buffers 
  46. // 
  47. // This is the size of the top level shape cache cache. A cache miss is not really expensive, as the dma is prefetched.
  48. // Must be power of 2, minimum 1k
  49. #define HK_SPU_AGENT_SECTOR_JOB_ROOT_SHAPE_CACHE_SIZE 2048
  50. // This is the cache used by the user of shapes with child shapes. A cache miss is stalling and expensive
  51. // Must be power of 2, minimum 1k
  52. #define HK_SPU_AGENT_SECTOR_JOB_UNTYPED_CACHE_SIZE 4096
  53. // This is the cache used by the mopp.
  54. // Must be power of 2, minimum 2k
  55. #define HK_SPU_AGENT_SECTOR_JOB_MOPP_CACHE_SIZE 8192
  56. // *******************************************************
  57. // ******* Internal data, don't touch               ******
  58. // *******************************************************
  59. //
  60. // Collide
  61. //
  62. // the number of rows, each of them has 4 lines
  63. enum { HK_SPU_AGENT_SECTOR_JOB_ROOT_SHAPE_NUM_CACHE_ROWS    = HK_SPU_AGENT_SECTOR_JOB_ROOT_SHAPE_CACHE_SIZE / (4*HK_SPU_AGENT_SECTOR_JOB_MAX_SHAPE_SIZE) };
  64. enum { HK_SPU_AGENT_SECTOR_JOB_UNTYPED_NUM_CACHE_ROWS = HK_SPU_AGENT_SECTOR_JOB_UNTYPED_CACHE_SIZE    / (4*HK_SPU_AGENT_SECTOR_JOB_MAX_UNTYPED_CACHE_LINE_SIZE) };
  65. enum { HK_SPU_AGENT_SECTOR_JOB_MOPP_NUM_CACHE_ROWS = HK_SPU_AGENT_SECTOR_JOB_MOPP_CACHE_SIZE       / (4*HK_SPU_AGENT_SECTOR_JOB_MOPP_CACHE_LINE_SIZE) };
  66. enum { HK_SPU_TOTAL_PHYSICS_BUFFER_SIZE = 57000 + HK_SPU_AGENT_SECTOR_JOB_ROOT_SHAPE_CACHE_SIZE + HK_SPU_AGENT_SECTOR_JOB_UNTYPED_CACHE_SIZE + HK_SPU_AGENT_SECTOR_JOB_MOPP_CACHE_SIZE };
  67. //
  68. // Solver
  69. //
  70. // - for schemas writer, when this buffer is full a dma write is triggered
  71. #define HK_SPU_SCHEMA_WRITER_BASE_BUFFER_SIZE (1024 + 128) 
  72. // this is the overflow buffer size. 
  73. // it has to accommodate the entire max contact constraint == some 6000bytes ??
  74. #define HK_SPU_SCHEMA_WRITER_OVERFLOW_BUFFER_SIZE (128 + (HK_MAX_CONTACT_POINT/2) * HK_SIZE_OF_JACOBIAN_PAIR_CONTACT_SCHEMA + (HK_MAX_CONTACT_POINT%2) * HK_SIZE_OF_JACOBIAN_SINGLE_CONTACT_SCHEMA + HK_SIZE_OF_JACOBIAN_3D_FRICTION_SCHEMA + HK_SIZE_OF_JACOBIAN_HEADER_SCHEMA) 
  75. #define HK_SPU_SOLVE_SCHEMA_READER_BASE_BUFFER_SIZE     512
  76. #define HK_SPU_SOLVE_SCHEMA_READER_OVERFLOW_BUFFER_SIZE 768
  77. // solverTempElems for ragdoll:
  78. // 3 * (frictionAngular+motorAngular+limitAngular+linear) == 3 * (2+3+1+1)  = 21 
  79. // solverTempElems for contact point (we have accessor checks every 8th contact point)
  80. // ((8+1) * cp + 3d friction) == (8+1) * 1 + 4 = 13 
  81. #define HK_SPU_SOLVE_ELEM_TEMP_READER_BASE_BUFFER_SIZE 256 
  82. #define HK_SPU_SOLVE_ELEM_TEMP_READER_OVERFLOW_BUFFER_SIZE 128  
  83. // Solver export : solver results writer buffer sizes
  84. #define HK_SPU_SOLVE_RESULTS_WRITER_BASE_BUFFER_SIZE 512 
  85. #define HK_SPU_SOLVE_RESULTS_WRITER_OVERFLOW_BUFFER_SIZE 128
  86. // - for accumulator fetching (sizeof(hkpVelocityAccumulator) == 128, cacheRow = 4*cacheLine, cacheLine = hkpVelocityAccumulator + 2*int)
  87. #define HK_SPU_ACCUMULATOR_CACHE_NUM_CACHE_ROWS 16 
  88. // - for constraintAtoms
  89. #define HK_CONSTRAINTATOM_SIZE_PER_CONTACT_POINT (sizeof(hkContactPoint) + sizeof(hkpContactPointProperties))
  90. #define HK_SPU_CONSTRAINT_ATOM_BUFFER_SIZE ( HK_NEXT_MULTIPLE_OF(16, HK_MAX_NUM_CONTACT_POINTS_IN_CONSTRAINT_ON_SPU * HK_CONSTRAINTATOM_SIZE_PER_CONTACT_POINT) + sizeof(hkpSimpleContactConstraintAtom)) 
  91. // **********************************
  92. // ******* Internal dma groups ******
  93. // **********************************
  94. // These groups are for reference only.
  95. // If you use sub functions to the relevant jobs,
  96. // you should avoid conflicts with dma groups
  97. /// Dma groups used by the jacobians builder.
  98. namespace hkSpuBuildJacobiansJobDmaGroups
  99. {
  100. enum
  101. {
  102. GET_QUERYIN_DMA_GROUP = 0,
  103. GET_DATA_BASE_DMA_GROUP = 1, // we are using double buffering, so we need to reserve 2 dma groups for this!
  104. WRITE_BACK_CONTACT_CONSTRAINT_ATOM_DMA_GROUP = 3,
  105. WRITE_BACK_RUNTIME_DMA_GROUP = 4,
  106. // next free dma group to use: 5
  107. };
  108. }
  109. namespace hkSpuAgentSectorJobDmaGroups
  110. {
  111. enum
  112. {
  113. GET_ELEMENT_PTRS_DMA_GROUP = 1,
  114. GET_ENTRY_DATA_DMA_GROUP = 2, // we use 5 pipeline stages, so we need to reserve 5 dma groups
  115. GET_BIG_ATOMS_DMA_GROUP = 7,
  116. GET_UNTYPED_CACHE_DATA = 8,
  117. // next free dma group to use: 9
  118. };
  119. }
  120. namespace hk1nMachineDmaGroups // these groups should not collide with hkSpuAgentSectorJobDmaGroups
  121. {
  122. enum
  123. {
  124. GET_SECTOR_POINTERS_DMA_GROUP = 10,
  125. GET_SECTOR_DMA_GROUP          = 12,
  126. WRITE_SECTOR_DMA_GROUP        = 14,
  127. };
  128. }
  129. #endif // HK_SPU_CONFIG_H
  130. /*
  131. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  132. * Confidential Information of Havok.  (C) Copyright 1999-2009
  133. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  134. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  135. * rights, and intellectual property rights in the Havok software remain in
  136. * Havok and/or its suppliers.
  137. * Use of this software for evaluation purposes is subject to and indicates
  138. * acceptance of the End User licence Agreement for this product. A copy of
  139. * the license is included with this software and is also available at www.havok.com/tryhavok.
  140. */