d3dx12_barriers.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. //*********************************************************
  2. //
  3. // Copyright (c) Microsoft Corporation.
  4. // Licensed under the MIT License (MIT).
  5. //
  6. //*********************************************************
  7. #ifndef __D3DX12_BARRIERS_H__
  8. #define __D3DX12_BARRIERS_H__
  9. #if defined( __cplusplus )
  10. #include "d3d12.h"
  11. //------------------------------------------------------------------------------------------------
  12. struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER
  13. {
  14. CD3DX12_RESOURCE_BARRIER() = default;
  15. explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) noexcept :
  16. D3D12_RESOURCE_BARRIER(o)
  17. {}
  18. static inline CD3DX12_RESOURCE_BARRIER Transition(
  19. _In_ ID3D12Resource* pResource,
  20. D3D12_RESOURCE_STATES stateBefore,
  21. D3D12_RESOURCE_STATES stateAfter,
  22. UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES,
  23. D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) noexcept
  24. {
  25. CD3DX12_RESOURCE_BARRIER result = {};
  26. D3D12_RESOURCE_BARRIER &barrier = result;
  27. result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
  28. result.Flags = flags;
  29. barrier.Transition.pResource = pResource;
  30. barrier.Transition.StateBefore = stateBefore;
  31. barrier.Transition.StateAfter = stateAfter;
  32. barrier.Transition.Subresource = subresource;
  33. return result;
  34. }
  35. static inline CD3DX12_RESOURCE_BARRIER Aliasing(
  36. _In_opt_ ID3D12Resource* pResourceBefore,
  37. _In_opt_ ID3D12Resource* pResourceAfter) noexcept
  38. {
  39. CD3DX12_RESOURCE_BARRIER result = {};
  40. D3D12_RESOURCE_BARRIER &barrier = result;
  41. result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING;
  42. barrier.Aliasing.pResourceBefore = pResourceBefore;
  43. barrier.Aliasing.pResourceAfter = pResourceAfter;
  44. return result;
  45. }
  46. static inline CD3DX12_RESOURCE_BARRIER UAV(
  47. _In_opt_ ID3D12Resource* pResource) noexcept
  48. {
  49. CD3DX12_RESOURCE_BARRIER result = {};
  50. D3D12_RESOURCE_BARRIER &barrier = result;
  51. result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV;
  52. barrier.UAV.pResource = pResource;
  53. return result;
  54. }
  55. };
  56. #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
  57. //================================================================================================
  58. // D3DX12 Enhanced Barrier Helpers
  59. //================================================================================================
  60. class CD3DX12_BARRIER_SUBRESOURCE_RANGE : public D3D12_BARRIER_SUBRESOURCE_RANGE
  61. {
  62. public:
  63. CD3DX12_BARRIER_SUBRESOURCE_RANGE() = default;
  64. CD3DX12_BARRIER_SUBRESOURCE_RANGE(const D3D12_BARRIER_SUBRESOURCE_RANGE &o) noexcept :
  65. D3D12_BARRIER_SUBRESOURCE_RANGE(o)
  66. {}
  67. explicit CD3DX12_BARRIER_SUBRESOURCE_RANGE(UINT Subresource) noexcept :
  68. D3D12_BARRIER_SUBRESOURCE_RANGE{ Subresource, 0, 0, 0, 0, 0 }
  69. {}
  70. CD3DX12_BARRIER_SUBRESOURCE_RANGE(
  71. UINT firstMipLevel,
  72. UINT numMips,
  73. UINT firstArraySlice,
  74. UINT numArraySlices,
  75. UINT firstPlane = 0,
  76. UINT numPlanes = 1) noexcept :
  77. D3D12_BARRIER_SUBRESOURCE_RANGE
  78. {
  79. firstMipLevel,
  80. numMips,
  81. firstArraySlice,
  82. numArraySlices,
  83. firstPlane,
  84. numPlanes
  85. }
  86. {}
  87. };
  88. class CD3DX12_GLOBAL_BARRIER : public D3D12_GLOBAL_BARRIER
  89. {
  90. public:
  91. CD3DX12_GLOBAL_BARRIER() = default;
  92. CD3DX12_GLOBAL_BARRIER(const D3D12_GLOBAL_BARRIER &o) noexcept : D3D12_GLOBAL_BARRIER(o){}
  93. CD3DX12_GLOBAL_BARRIER(
  94. D3D12_BARRIER_SYNC syncBefore,
  95. D3D12_BARRIER_SYNC syncAfter,
  96. D3D12_BARRIER_ACCESS accessBefore,
  97. D3D12_BARRIER_ACCESS accessAfter) noexcept : D3D12_GLOBAL_BARRIER {
  98. syncBefore,
  99. syncAfter,
  100. accessBefore,
  101. accessAfter
  102. }
  103. {}
  104. };
  105. class CD3DX12_BUFFER_BARRIER : public D3D12_BUFFER_BARRIER
  106. {
  107. public:
  108. CD3DX12_BUFFER_BARRIER() = default;
  109. CD3DX12_BUFFER_BARRIER(const D3D12_BUFFER_BARRIER &o) noexcept : D3D12_BUFFER_BARRIER(o){}
  110. CD3DX12_BUFFER_BARRIER(
  111. D3D12_BARRIER_SYNC syncBefore,
  112. D3D12_BARRIER_SYNC syncAfter,
  113. D3D12_BARRIER_ACCESS accessBefore,
  114. D3D12_BARRIER_ACCESS accessAfter,
  115. ID3D12Resource *pRes) noexcept : D3D12_BUFFER_BARRIER {
  116. syncBefore,
  117. syncAfter,
  118. accessBefore,
  119. accessAfter,
  120. pRes,
  121. 0, ULLONG_MAX
  122. }
  123. {}
  124. };
  125. class CD3DX12_TEXTURE_BARRIER : public D3D12_TEXTURE_BARRIER
  126. {
  127. public:
  128. CD3DX12_TEXTURE_BARRIER() = default;
  129. CD3DX12_TEXTURE_BARRIER(const D3D12_TEXTURE_BARRIER &o) noexcept : D3D12_TEXTURE_BARRIER(o){}
  130. CD3DX12_TEXTURE_BARRIER(
  131. D3D12_BARRIER_SYNC syncBefore,
  132. D3D12_BARRIER_SYNC syncAfter,
  133. D3D12_BARRIER_ACCESS accessBefore,
  134. D3D12_BARRIER_ACCESS accessAfter,
  135. D3D12_BARRIER_LAYOUT layoutBefore,
  136. D3D12_BARRIER_LAYOUT layoutAfter,
  137. ID3D12Resource *pRes,
  138. const D3D12_BARRIER_SUBRESOURCE_RANGE &subresources,
  139. D3D12_TEXTURE_BARRIER_FLAGS flag = D3D12_TEXTURE_BARRIER_FLAG_NONE) noexcept : D3D12_TEXTURE_BARRIER {
  140. syncBefore,
  141. syncAfter,
  142. accessBefore,
  143. accessAfter,
  144. layoutBefore,
  145. layoutAfter,
  146. pRes,
  147. subresources,
  148. flag
  149. }
  150. {}
  151. };
  152. class CD3DX12_BARRIER_GROUP : public D3D12_BARRIER_GROUP
  153. {
  154. public:
  155. CD3DX12_BARRIER_GROUP() = default;
  156. CD3DX12_BARRIER_GROUP(const D3D12_BARRIER_GROUP &o) noexcept : D3D12_BARRIER_GROUP(o){}
  157. CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_BUFFER_BARRIER *pBarriers) noexcept
  158. {
  159. Type = D3D12_BARRIER_TYPE_BUFFER;
  160. NumBarriers = numBarriers;
  161. pBufferBarriers = pBarriers;
  162. }
  163. CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_TEXTURE_BARRIER *pBarriers) noexcept
  164. {
  165. Type = D3D12_BARRIER_TYPE_TEXTURE;
  166. NumBarriers = numBarriers;
  167. pTextureBarriers = pBarriers;
  168. }
  169. CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_GLOBAL_BARRIER *pBarriers) noexcept
  170. {
  171. Type = D3D12_BARRIER_TYPE_GLOBAL;
  172. NumBarriers = numBarriers;
  173. pGlobalBarriers = pBarriers;
  174. }
  175. };
  176. #endif // D3D12_SDK_VERSION >= 608
  177. #endif // defined( __cplusplus )
  178. #endif // __D3DX12_BARRIERS_H__