FunctionTest.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // FunctionTest.cpp //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // The testing is done primarily through the compiler interface to avoid //
  9. // linking the full Clang libraries. //
  10. // //
  11. ///////////////////////////////////////////////////////////////////////////////
  12. #include <memory>
  13. #include <vector>
  14. #include <string>
  15. #include "dxc/Test/CompilationResult.h"
  16. #include "dxc/Test/HLSLTestData.h"
  17. #undef _read
  18. #include "dxc/Test/HlslTestUtils.h"
  19. #include "dxc/Test/DxcTestUtils.h"
  20. #include "dxc/Support/Global.h"
  21. #include "dxc/DxilContainer/DxilContainer.h"
  22. #ifdef _WIN32
  23. class FunctionTest {
  24. #else
  25. class FunctionTest : public ::testing::Test {
  26. #endif
  27. public:
  28. BEGIN_TEST_CLASS(FunctionTest)
  29. TEST_CLASS_PROPERTY(L"Parallel", L"true")
  30. TEST_METHOD_PROPERTY(L"Priority", L"0")
  31. END_TEST_CLASS()
  32. TEST_METHOD(AllowedStorageClass)
  33. TEST_METHOD(AllowedInParamUsesClass)
  34. TEST_METHOD(ParseRootSignature)
  35. dxc::DxcDllSupport m_support;
  36. std::vector<char> rootSigText;
  37. std::string BuildSampleFunction(const char* StorageClassKeyword) {
  38. char result[128];
  39. sprintf_s(result, _countof(result),
  40. "%s float ps(float o) { return o; }", StorageClassKeyword);
  41. return std::string(result);
  42. }
  43. void CheckCompiles(const std::string& text, bool expected) {
  44. CheckCompiles(text.c_str(), text.size(), expected);
  45. }
  46. void CheckCompiles(const char* text, size_t textLen, bool expected) {
  47. CompilationResult result(
  48. CompilationResult::CreateForProgram(text, textLen));
  49. EXPECT_EQ(expected, result.ParseSucceeded()); // << "for program " << text;
  50. }
  51. void TestHLSLRootSignatureVerCase(const char *pStr, const std::wstring &forceVer, HRESULT expected) {
  52. WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
  53. CComPtr<IDxcLibrary> pLibrary;
  54. CComPtr<IDxcCompiler> pCompiler;
  55. CComPtr<IDxcOperationResult> pResult;
  56. CComPtr<IDxcBlobEncoding> pSource;
  57. HRESULT resultStatus;
  58. CComPtr<IDxcIncludeHandler> pIncludeHandler;
  59. VERIFY_SUCCEEDED(m_support.CreateInstance(CLSID_DxcLibrary, &pLibrary));
  60. const char pFormat[] =
  61. "[RootSignature(\"%s\")]\r\n"
  62. "float4 main() : SV_Target { return 0; }";
  63. size_t len = strlen(pStr) + strlen(pFormat) + 1; // Actually bigger than needed because of '%s'
  64. rootSigText.reserve(len);
  65. sprintf_s(rootSigText.data(), rootSigText.capacity(), pFormat, pStr);
  66. Utf8ToBlob(m_support, rootSigText.data(), &pSource);
  67. VERIFY_SUCCEEDED(pLibrary->CreateIncludeHandler(&pIncludeHandler));
  68. VERIFY_SUCCEEDED(m_support.CreateInstance(CLSID_DxcCompiler, &pCompiler));
  69. std::vector<LPCWSTR> flags;
  70. if (!forceVer.empty()) {
  71. flags.push_back(L"/force_rootsig_ver");
  72. flags.push_back(forceVer.c_str());
  73. }
  74. VERIFY_SUCCEEDED(pCompiler->Compile(pSource, L"hlsl.hlsl", L"main", L"ps_6_0",
  75. flags.data(), flags.size(), nullptr, 0, pIncludeHandler, &pResult));
  76. VERIFY_SUCCEEDED(pResult->GetStatus(&resultStatus));
  77. if (expected != resultStatus && FAILED(resultStatus)) {
  78. // Unexpected failure, log results.
  79. CComPtr<IDxcBlobEncoding> pErrors;
  80. pResult->GetErrorBuffer(&pErrors);
  81. std::string text = BlobToUtf8(pErrors);
  82. CA2W textW(text.c_str(), CP_UTF8);
  83. WEX::Logging::Log::Comment(textW.m_psz);
  84. }
  85. VERIFY_ARE_EQUAL(expected, resultStatus);
  86. if (SUCCEEDED(resultStatus)) {
  87. CComPtr<IDxcContainerReflection> pReflection;
  88. CComPtr<IDxcBlob> pContainer;
  89. VERIFY_SUCCEEDED(pResult->GetResult(&pContainer));
  90. #ifdef _WIN32 // No reflection support
  91. VERIFY_SUCCEEDED(m_support.CreateInstance(CLSID_DxcContainerReflection, &pReflection));
  92. VERIFY_SUCCEEDED(pReflection->Load(pContainer));
  93. UINT count;
  94. bool found = false;
  95. VERIFY_SUCCEEDED(pReflection->GetPartCount(&count));
  96. for (UINT i = 0; i < count; ++i) {
  97. UINT kind;
  98. VERIFY_SUCCEEDED(pReflection->GetPartKind(i, &kind));
  99. if (kind == hlsl::DFCC_RootSignature) {
  100. found = true;
  101. break;
  102. }
  103. }
  104. VERIFY_IS_TRUE(found);
  105. #endif // _WIN32 - No reflection support
  106. }
  107. }
  108. void TestHLSLRootSignature10Case(const char *pStr, HRESULT hr) {
  109. TestHLSLRootSignatureVerCase(pStr, L"rootsig_1_0", hr);
  110. }
  111. void TestHLSLRootSignature11Case(const char *pStr, HRESULT hr) {
  112. TestHLSLRootSignatureVerCase(pStr, L"rootsig_1_1", hr);
  113. }
  114. void TestHLSLRootSignatureCase(const char *pStr, HRESULT hr) {
  115. TestHLSLRootSignatureVerCase(pStr, L"", hr);
  116. TestHLSLRootSignature10Case(pStr, hr);
  117. TestHLSLRootSignature11Case(pStr, hr);
  118. }
  119. };
  120. TEST_F(FunctionTest, AllowedStorageClass) {
  121. for (const auto &sc : StorageClassData) {
  122. CheckCompiles(BuildSampleFunction(sc.Keyword), sc.IsValid);
  123. }
  124. }
  125. TEST_F(FunctionTest, AllowedInParamUsesClass) {
  126. const char* fragments[] = { "f", "1.0f" };
  127. for (const auto &iop : InOutParameterModifierData) {
  128. for (unsigned i = 0; i < _countof(fragments); i++) {
  129. char program[256];
  130. sprintf_s(program, _countof(program),
  131. "float ps(%s float o) { return o; }\n"
  132. "void caller() { float f; ps(%s); }",
  133. iop.Keyword, fragments[i]);
  134. bool callerIsRef = i == 0;
  135. bool expectedSucceeds = (callerIsRef == iop.ActsAsReference) || !iop.ActsAsReference;
  136. CheckCompiles(program, strlen(program), expectedSucceeds);
  137. }
  138. }
  139. }
  140. TEST_F(FunctionTest, ParseRootSignature) {
  141. #ifdef _WIN32 // - dxil.dll can only be found on Windows
  142. struct AutoModule {
  143. HMODULE m_module;
  144. AutoModule(const wchar_t *pName) {
  145. m_module = LoadLibraryW(pName);
  146. }
  147. ~AutoModule() {
  148. if (m_module != NULL)
  149. FreeLibrary(m_module);
  150. }
  151. };
  152. AutoModule dxilAM(L"dxil.dll"); // Pin this if available to avoid reloading on each compile.
  153. #endif // _WIN32 - dxil.dll can only be found on Windows
  154. VERIFY_SUCCEEDED(m_support.Initialize());
  155. // Empty
  156. TestHLSLRootSignatureCase("", S_OK);
  157. TestHLSLRootSignatureCase(" ", S_OK);
  158. TestHLSLRootSignatureCase(" 324 ;jk ", E_FAIL);
  159. // Flags
  160. TestHLSLRootSignatureCase("RootFlags( 0 )", S_OK);
  161. TestHLSLRootSignatureCase("RootFlags( 20 )", E_FAIL);
  162. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)", S_OK);
  163. TestHLSLRootSignatureCase("RootFlags(ALLOW_STREAM_OUTPUT)", S_OK);
  164. TestHLSLRootSignatureCase("RootFlags(LOCAL_ROOT_SIGNATURE)", E_FAIL);
  165. TestHLSLRootSignatureCase("RootFlags( LLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)", E_FAIL);
  166. TestHLSLRootSignatureCase(" RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT ) ", S_OK);
  167. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | DENY_VERTEX_SHADER_ROOT_ACCESS | DENY_HULL_SHADER_ROOT_ACCESS | DENY_DOMAIN_SHADER_ROOT_ACCESS | DENY_GEOMETRY_SHADER_ROOT_ACCESS | DENY_PIXEL_SHADER_ROOT_ACCESS)", S_OK);
  168. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT & DENY_VERTEX_SHADER_ROOT_ACCESS)", E_FAIL);
  169. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | 7)", E_FAIL);
  170. // RootConstants: RootConstants(num32BitConstants=3, b2 [, space = 5] )
  171. TestHLSLRootSignatureCase("RootConstants( num32BitConstants=3, b2)", S_OK);
  172. TestHLSLRootSignatureCase("RootConstants( num32BitConstants=3, b2, space = 5)", S_OK);
  173. TestHLSLRootSignatureCase("RootConstants( b2, num32BitConstants=3, space = 5)", S_OK);
  174. TestHLSLRootSignatureCase("RootConstants( num32BitConstants=3, b2, visibility=SHADER_VISIBILITY_PIXEL)", S_OK);
  175. TestHLSLRootSignatureCase("RootConstants( num32BitConstants=3, b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  176. TestHLSLRootSignatureCase("RootConstants( visibility = SHADER_VISIBILITY_PIXEL, space = 5, num32BitConstants=3, b2)", S_OK);
  177. TestHLSLRootSignatureCase("RootConstants( visibility = SHADER_VISIBILITY_PIXEL, space = 5, num32BitConstants=3, b2, visibility = SHADER_VISIBILITY_ALL)", E_FAIL);
  178. TestHLSLRootSignatureCase("RootConstants( visibility = SHADER_VISIBILITY_PIXEL, space = 5, space = 5, num32BitConstants=3, b2)", E_FAIL);
  179. TestHLSLRootSignatureCase("RootConstants( num32BitConstants=7, visibility = SHADER_VISIBILITY_PIXEL, space = 5, num32BitConstants=3, b2)", E_FAIL);
  180. TestHLSLRootSignatureCase("RootConstants( b10, visibility = SHADER_VISIBILITY_PIXEL, space = 5, num32BitConstants=3, b2)", E_FAIL);
  181. // RS CBV: CBV(b0 [, space=3, flags=0, visibility = SHADER_VISIBILITY_ALL ] )
  182. TestHLSLRootSignatureCase("CBV(b2)", S_OK);
  183. TestHLSLRootSignatureCase("CBV(t2)", E_FAIL);
  184. TestHLSLRootSignatureCase("CBV(u2)", E_FAIL);
  185. TestHLSLRootSignatureCase("CBV(s2)", E_FAIL);
  186. TestHLSLRootSignatureCase("CBV(b4294967295)", S_OK);
  187. TestHLSLRootSignatureCase("CBV(b2, space = 5)", S_OK);
  188. TestHLSLRootSignatureCase("CBV(b2, space = 4294967279)", S_OK);
  189. TestHLSLRootSignatureCase("CBV(b2, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  190. TestHLSLRootSignatureCase("CBV(b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  191. TestHLSLRootSignatureCase("CBV(space = 5, visibility = SHADER_VISIBILITY_PIXEL, b2)", S_OK);
  192. TestHLSLRootSignatureCase("CBV(b2, space = 5, b2, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  193. TestHLSLRootSignatureCase("CBV(space = 4, b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  194. TestHLSLRootSignatureCase("CBV(b2, visibility = SHADER_VISIBILITY_PIXEL, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  195. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), CBV(b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  196. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  197. "CBV(b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL), "
  198. "CBV(b4, space = 7, visibility = SHADER_VISIBILITY_VERTEX)", S_OK);
  199. // RS SRV: SRV(t0 [, space=3, flags=0, visibility = SHADER_VISIBILITY_ALL ] )
  200. TestHLSLRootSignatureCase("SRV(t2)", S_OK);
  201. TestHLSLRootSignatureCase("SRV(b2)", E_FAIL);
  202. TestHLSLRootSignatureCase("SRV(u2)", E_FAIL);
  203. TestHLSLRootSignatureCase("SRV(s2)", E_FAIL);
  204. TestHLSLRootSignatureCase("SRV(t2, space = 5)", S_OK);
  205. TestHLSLRootSignatureCase("SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  206. TestHLSLRootSignatureCase("SRV(t2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  207. TestHLSLRootSignatureCase("SRV(space = 5, visibility = SHADER_VISIBILITY_PIXEL, t2)", S_OK);
  208. TestHLSLRootSignatureCase("SRV(t2, space = 5, t2, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  209. TestHLSLRootSignatureCase("SRV(space = 4, t2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  210. TestHLSLRootSignatureCase("SRV(t2, visibility = SHADER_VISIBILITY_PIXEL, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  211. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), SRV(t2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  212. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  213. "SRV(t2, space = 5, visibility = SHADER_VISIBILITY_PIXEL), "
  214. "SRV(t4, space = 7, visibility = SHADER_VISIBILITY_VERTEX)", S_OK);
  215. // RS UAV: UAV(u0 [, space=3, flags=0, visibility = SHADER_VISIBILITY_ALL ] )
  216. TestHLSLRootSignatureCase("UAV(u2)", S_OK);
  217. TestHLSLRootSignatureCase("UAV(b2)", E_FAIL);
  218. TestHLSLRootSignatureCase("UAV(t2)", E_FAIL);
  219. TestHLSLRootSignatureCase("UAV(s2)", E_FAIL);
  220. TestHLSLRootSignatureCase("UAV(u2, space = 5)", S_OK);
  221. TestHLSLRootSignatureCase("UAV(u2, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  222. TestHLSLRootSignatureCase("UAV(u2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  223. TestHLSLRootSignatureCase("UAV(space = 5, visibility = SHADER_VISIBILITY_PIXEL, u2)", S_OK);
  224. TestHLSLRootSignatureCase("UAV(u2, space = 5, u2, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  225. TestHLSLRootSignatureCase("UAV(space = 4, u2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  226. TestHLSLRootSignatureCase("UAV(u2, visibility = SHADER_VISIBILITY_PIXEL, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", E_FAIL);
  227. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  228. "UAV(u2, space = 5, visibility = SHADER_VISIBILITY_PIXEL)", S_OK);
  229. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  230. "UAV(u2, space = 5, visibility = SHADER_VISIBILITY_PIXEL), "
  231. "UAV(u4, space = 7, visibility = SHADER_VISIBILITY_VERTEX)", S_OK);
  232. // RS1.1 root descriptor flags.
  233. TestHLSLRootSignature11Case("CBV(b2, flags=0)", S_OK);
  234. TestHLSLRootSignature11Case("CBV(b2, flags=DATA_VOLATILE)", S_OK);
  235. TestHLSLRootSignature11Case("SRV(t2, flags=DATA_STATIC)", S_OK);
  236. TestHLSLRootSignature11Case("UAV(u2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE)", S_OK);
  237. TestHLSLRootSignature11Case("UAV(u2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE, space = 5)", S_OK);
  238. TestHLSLRootSignature10Case("CBV(b2, flags=0)", E_FAIL);
  239. TestHLSLRootSignature10Case("CBV(b2, flags=DATA_VOLATILE)", E_FAIL);
  240. TestHLSLRootSignature10Case("SRV(t2, flags=DATA_STATIC)", E_FAIL);
  241. TestHLSLRootSignature10Case("UAV(u2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE)", E_FAIL);
  242. TestHLSLRootSignature11Case("CBV(b2, flags=DATA_VOLATILE | DATA_STATIC)", E_FAIL);
  243. TestHLSLRootSignature11Case("CBV(b2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE| DATA_STATIC)", E_FAIL);
  244. TestHLSLRootSignature11Case("CBV(b2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE|DATA_VOLATILE)", E_FAIL);
  245. TestHLSLRootSignature11Case("UAV(u2, flags=DATA_STATIC_WHILE_SET_AT_EXECUTE, )", E_FAIL);
  246. // DT: DescriptorTable( SRV(t2, numDescriptors=6), UAV(u0, numDescriptors=4, offset = 17), visibility = SHADER_VISIBILITY_ALL )
  247. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2))", S_OK);
  248. TestHLSLRootSignatureCase("DescriptorTable(CBV(t2))", E_FAIL);
  249. TestHLSLRootSignatureCase("DescriptorTable(CBV(u2))", E_FAIL);
  250. TestHLSLRootSignatureCase("DescriptorTable(CBV(s2))", E_FAIL);
  251. TestHLSLRootSignatureCase("DescriptorTable(SRV(t2))", S_OK);
  252. TestHLSLRootSignatureCase("DescriptorTable(UAV(u2))", S_OK);
  253. TestHLSLRootSignatureCase("DescriptorTable(Sampler(s2))", S_OK);
  254. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, numDescriptors = 4))", S_OK);
  255. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, space=3))", S_OK);
  256. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, offset=17))", S_OK);
  257. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, numDescriptors = 4))", S_OK);
  258. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, numDescriptors = 4, space=3))", S_OK);
  259. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2, numDescriptors = 4, offset = 17))", S_OK);
  260. TestHLSLRootSignatureCase("DescriptorTable(Sampler(s2, numDescriptors = 4, space=3, offset =17))", S_OK);
  261. TestHLSLRootSignatureCase("DescriptorTable(Sampler(offset =17, numDescriptors = 4, s2, space=3))", S_OK);
  262. TestHLSLRootSignatureCase("DescriptorTable(Sampler(offset =17, numDescriptors = unbounded, s2, space=3))", S_OK);
  263. TestHLSLRootSignatureCase("DescriptorTable(Sampler(offset =17, numDescriptors = 4, offset = 1, s2, space=3))", E_FAIL);
  264. TestHLSLRootSignatureCase("DescriptorTable(Sampler(s1, offset =17, numDescriptors = 4, s2, space=3))", E_FAIL);
  265. TestHLSLRootSignatureCase("DescriptorTable(Sampler(offset =17, numDescriptors = 4, s2, space=3, numDescriptors =1))", E_FAIL);
  266. TestHLSLRootSignatureCase("DescriptorTable(Sampler(offset =17, numDescriptors = 4, s2, space=3, space=4))", E_FAIL);
  267. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2), UAV(u3))", S_OK);
  268. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2), UAV(u3), visibility = SHADER_VISIBILITY_HULL)", S_OK);
  269. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2), visibility = shader_visibility_hull, UAV(u3))", S_OK);
  270. TestHLSLRootSignatureCase("DescriptorTable(CBV(b2), visibility = SHADER_VISIBILITY_HULL, UAV(u3), visibility = SHADER_VISIBILITY_HULL)", E_FAIL);
  271. // RS1.1 descriptor range flags.
  272. TestHLSLRootSignature11Case("DescriptorTable(CBV(b2, flags = 0))", S_OK);
  273. TestHLSLRootSignature11Case("DescriptorTable(SRV(t2, flags = DESCRIPTORS_VOLATILE))", S_OK);
  274. TestHLSLRootSignature11Case("DescriptorTable(SRV(t2, flags = DESCRIPTORS_VOLATILE | DATA_VOLATILE))", S_OK);
  275. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DATA_VOLATILE))", S_OK);
  276. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DATA_STATIC_WHILE_SET_AT_EXECUTE))", S_OK);
  277. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DATA_STATIC))", S_OK);
  278. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_VOLATILE | DATA_VOLATILE))", S_OK);
  279. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_VOLATILE | DATA_STATIC_WHILE_SET_AT_EXECUTE))", S_OK);
  280. TestHLSLRootSignature11Case("DescriptorTable(Sampler(s2, flags = DESCRIPTORS_VOLATILE))", S_OK);
  281. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_VOLATILE | DATA_STATIC_WHILE_SET_AT_EXECUTE, offset =17))", S_OK);
  282. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS))", S_OK);
  283. TestHLSLRootSignature10Case("DescriptorTable(CBV(b2, flags = 0))", E_FAIL);
  284. TestHLSLRootSignature10Case("DescriptorTable(SRV(t2, flags = DESCRIPTORS_VOLATILE))", E_FAIL);
  285. TestHLSLRootSignature10Case("DescriptorTable(UAV(u2, flags = DATA_VOLATILE))", E_FAIL);
  286. TestHLSLRootSignature10Case("DescriptorTable(UAV(u2, flags = DATA_STATIC_WHILE_SET_AT_EXECUTE))", E_FAIL);
  287. TestHLSLRootSignature10Case("DescriptorTable(UAV(u2, flags = DATA_STATIC))", E_FAIL);
  288. TestHLSLRootSignature10Case("DescriptorTable(Sampler(s2, flags = DESCRIPTORS_VOLATILE))", E_FAIL);
  289. TestHLSLRootSignature11Case("DescriptorTable(Sampler(s2, flags = DATA_VOLATILE))", E_FAIL);
  290. TestHLSLRootSignature11Case("DescriptorTable(Sampler(s2, flags = DESCRIPTORS_VOLATILE | DATA_VOLATILE))", E_FAIL);
  291. TestHLSLRootSignature11Case("DescriptorTable(Sampler(s2, flags = DATA_STATIC_WHILE_SET_AT_EXECUTE))", E_FAIL);
  292. TestHLSLRootSignature11Case("DescriptorTable(Sampler(s2, flags = DATA_STATIC))", E_FAIL);
  293. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_VOLATILE | DATA_VOLATILE | DATA_STATIC_WHILE_SET_AT_EXECUTE))", E_FAIL);
  294. TestHLSLRootSignature11Case("DescriptorTable(CBV(b2, flags = DATA_VOLATILE | DATA_STATIC_WHILE_SET_AT_EXECUTE))", E_FAIL);
  295. TestHLSLRootSignature11Case("DescriptorTable(CBV(b2, flags = DATA_VOLATILE | DATA_STATIC))", E_FAIL);
  296. TestHLSLRootSignature11Case("DescriptorTable(CBV(b2, flags = DATA_STATIC_WHILE_SET_AT_EXECUTE | DATA_STATIC))", E_FAIL);
  297. TestHLSLRootSignature11Case("DescriptorTable(CBV(b2, flags = DESCRIPTORS_VOLATILE | DATA_STATIC))", E_FAIL);
  298. TestHLSLRootSignature11Case("DescriptorTable(UAV(u2, flags = DESCRIPTORS_VOLATILE | DATA_STATIC_WHILE_SET_AT_EXECUTE, ))", E_FAIL);
  299. // StaticSampler( s0,
  300. // [ Filter = FILTER_ANISOTROPIC,
  301. // AddressU = TEXTURE_ADDRESS_WRAP,
  302. // AddressV = TEXTURE_ADDRESS_WRAP,
  303. // AddressW = TEXTURE_ADDRESS_WRAP,
  304. // MaxAnisotropy = 16,
  305. // ComparisonFunc = COMPARISON_LESS_EQUAL,
  306. // BorderColor = STATIC_BORDER_COLOR_OPAQUE_WHITE,
  307. // space = 0,
  308. // visibility = SHADER_VISIBILITY_ALL ] )
  309. // SReg
  310. TestHLSLRootSignatureCase("StaticSampler(s2)", S_OK);
  311. TestHLSLRootSignatureCase("StaticSampler(t2)", E_FAIL);
  312. TestHLSLRootSignatureCase("StaticSampler(b2)", E_FAIL);
  313. TestHLSLRootSignatureCase("StaticSampler(u2)", E_FAIL);
  314. TestHLSLRootSignatureCase("StaticSampler(s0, s2)", E_FAIL);
  315. // Filter
  316. TestHLSLRootSignatureCase("StaticSampler(filter = FILTER_MIN_MAG_MIP_POINT, s2)", S_OK);
  317. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_MAG_POINT_MIP_LINEAR)", S_OK);
  318. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT)", S_OK);
  319. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_POINT_MAG_MIP_LINEAR)", S_OK);
  320. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_LINEAR_MAG_MIP_POINT)", S_OK);
  321. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR)", S_OK);
  322. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)", S_OK);
  323. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MIN_MAG_MIP_LINEAR)", S_OK);
  324. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_ANISOTROPIC)", S_OK);
  325. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_MAG_MIP_POINT)", S_OK);
  326. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR)", S_OK);
  327. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT)", S_OK);
  328. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR)", S_OK);
  329. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT)", S_OK);
  330. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR)", S_OK);
  331. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT)", S_OK);
  332. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_MIN_MAG_MIP_LINEAR)", S_OK);
  333. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_COMPARISON_ANISOTROPIC)", S_OK);
  334. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_MAG_MIP_POINT)", S_OK);
  335. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR)", S_OK);
  336. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT)", S_OK);
  337. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR)", S_OK);
  338. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT)", S_OK);
  339. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR)", S_OK);
  340. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT)", S_OK);
  341. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_MIN_MAG_MIP_LINEAR)", S_OK);
  342. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MINIMUM_ANISOTROPIC)", S_OK);
  343. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_MAG_MIP_POINT)", S_OK);
  344. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR)", S_OK);
  345. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT)", S_OK);
  346. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR)", S_OK);
  347. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT)", S_OK);
  348. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR)", S_OK);
  349. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT)", S_OK);
  350. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR)", S_OK);
  351. TestHLSLRootSignatureCase("StaticSampler(s2, filter = FILTER_MAXIMUM_ANISOTROPIC)", S_OK);
  352. TestHLSLRootSignatureCase("StaticSampler(filter = FILTER_MAXIMUM_ANISOTROPIC, s2, filter = FILTER_MAXIMUM_ANISOTROPIC)", E_FAIL);
  353. // AddressU
  354. TestHLSLRootSignatureCase("StaticSampler(addressU = TEXTURE_ADDRESS_WRAP, s2)", S_OK);
  355. TestHLSLRootSignatureCase("StaticSampler(s2, addressU = TEXTURE_ADDRESS_MIRROR)", S_OK);
  356. TestHLSLRootSignatureCase("StaticSampler(s2, addressU = TEXTURE_ADDRESS_CLAMP)", S_OK);
  357. TestHLSLRootSignatureCase("StaticSampler(s2, addressU = TEXTURE_ADDRESS_BORDER)", S_OK);
  358. TestHLSLRootSignatureCase("StaticSampler(s2, addressU = TEXTURE_ADDRESS_MIRROR_ONCE)", S_OK);
  359. TestHLSLRootSignatureCase("StaticSampler(addressU = TEXTURE_ADDRESS_MIRROR, s2, addressU = TEXTURE_ADDRESS_BORDER)", E_FAIL);
  360. // AddressV
  361. TestHLSLRootSignatureCase("StaticSampler(addressV = TEXTURE_ADDRESS_WRAP, s2)", S_OK);
  362. TestHLSLRootSignatureCase("StaticSampler(s2, addressV = TEXTURE_ADDRESS_MIRROR)", S_OK);
  363. TestHLSLRootSignatureCase("StaticSampler(s2, addressV = TEXTURE_ADDRESS_CLAMP)", S_OK);
  364. TestHLSLRootSignatureCase("StaticSampler(s2, addressV = TEXTURE_ADDRESS_BORDER)", S_OK);
  365. TestHLSLRootSignatureCase("StaticSampler(s2, addressV = TEXTURE_ADDRESS_MIRROR_ONCE)", S_OK);
  366. TestHLSLRootSignatureCase("StaticSampler(addressV = TEXTURE_ADDRESS_MIRROR, s2, addressV = TEXTURE_ADDRESS_BORDER)", E_FAIL);
  367. // AddressW
  368. TestHLSLRootSignatureCase("StaticSampler(addressW = TEXTURE_ADDRESS_WRAP, s2)", S_OK);
  369. TestHLSLRootSignatureCase("StaticSampler(s2, addressW = TEXTURE_ADDRESS_MIRROR)", S_OK);
  370. TestHLSLRootSignatureCase("StaticSampler(s2, addressW = TEXTURE_ADDRESS_CLAMP)", S_OK);
  371. TestHLSLRootSignatureCase("StaticSampler(s2, addressW = TEXTURE_ADDRESS_BORDER)", S_OK);
  372. TestHLSLRootSignatureCase("StaticSampler(s2, addressW = TEXTURE_ADDRESS_MIRROR_ONCE)", S_OK);
  373. TestHLSLRootSignatureCase("StaticSampler(addressW = TEXTURE_ADDRESS_MIRROR, s2, addressW = TEXTURE_ADDRESS_BORDER)", E_FAIL);
  374. // Mixed address
  375. TestHLSLRootSignatureCase("StaticSampler(addressW = TEXTURE_ADDRESS_MIRROR, s2, addressU = TEXTURE_ADDRESS_CLAMP, addressV = TEXTURE_ADDRESS_MIRROR_ONCE)", S_OK);
  376. TestHLSLRootSignatureCase("StaticSampler(addressW = TEXTURE_ADDRESS_MIRROR, s2, addressU = TEXTURE_ADDRESS_CLAMP, addressU = TEXTURE_ADDRESS_CLAMP, addressV = TEXTURE_ADDRESS_MIRROR_ONCE)", E_FAIL);
  377. // MipLODBias
  378. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0)", S_OK);
  379. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-0)", S_OK);
  380. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=+0)", S_OK);
  381. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0.)", S_OK);
  382. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0.f)", S_OK);
  383. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0.0)", S_OK);
  384. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0.0f)", S_OK);
  385. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=0.1)", S_OK);
  386. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=+0.1)", S_OK);
  387. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-0.1)", S_OK);
  388. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=.1)", S_OK);
  389. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=2)", S_OK);
  390. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-2)", S_OK);
  391. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=2.3)", S_OK);
  392. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=+2.3)", S_OK);
  393. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-2.3)", S_OK);
  394. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=2.3f)", S_OK);
  395. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=)", E_FAIL);
  396. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=sdfgsdf)", E_FAIL);
  397. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=--2)", E_FAIL);
  398. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-+2)", E_FAIL);
  399. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=.)", E_FAIL);
  400. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-.)", E_FAIL);
  401. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=+.)", E_FAIL);
  402. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=.e2)", E_FAIL);
  403. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=.1e)", E_FAIL);
  404. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=.1e.4)", E_FAIL);
  405. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=2e100)", E_FAIL);
  406. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-2e100)", E_FAIL);
  407. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=2e100000)", E_FAIL);
  408. TestHLSLRootSignatureCase("StaticSampler(s2, mipLODBias=-2e100000)", E_FAIL);
  409. // MaxAnisotropy
  410. TestHLSLRootSignatureCase("StaticSampler(s2, maxAnisotropy=2)", S_OK);
  411. // Comparison function
  412. TestHLSLRootSignatureCase("StaticSampler(ComparisonFunc = COMPARISON_NEVER, s2)", S_OK);
  413. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_LESS)", S_OK);
  414. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_EQUAL)", S_OK);
  415. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_LESS_EQUAL)", S_OK);
  416. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_GREATER)", S_OK);
  417. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_NOT_EQUAL)", S_OK);
  418. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_GREATER_EQUAL)", S_OK);
  419. TestHLSLRootSignatureCase("StaticSampler(s2, ComparisonFunc = COMPARISON_ALWAYS)", S_OK);
  420. TestHLSLRootSignatureCase("StaticSampler(ComparisonFunc = COMPARISON_NOT_EQUAL, s2, ComparisonFunc = COMPARISON_ALWAYS)", E_FAIL);
  421. // Border color
  422. TestHLSLRootSignatureCase("StaticSampler(BorderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK, s2)", S_OK);
  423. TestHLSLRootSignatureCase("StaticSampler(s2, BorderColor = STATIC_BORDER_COLOR_OPAQUE_BLACK)", S_OK);
  424. TestHLSLRootSignatureCase("StaticSampler(s2, BorderColor = STATIC_BORDER_COLOR_OPAQUE_WHITE)", S_OK);
  425. TestHLSLRootSignatureCase("StaticSampler(BorderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK, s2, BorderColor = STATIC_BORDER_COLOR_OPAQUE_WHITE)", E_FAIL);
  426. // MinLOD
  427. TestHLSLRootSignatureCase("StaticSampler(s2, minLOD=-4.5)", S_OK);
  428. // MinLOD
  429. TestHLSLRootSignatureCase("StaticSampler(s2, maxLOD=5.77)", S_OK);
  430. // Space
  431. TestHLSLRootSignatureCase("StaticSampler(s2, space=7)", S_OK);
  432. TestHLSLRootSignatureCase("StaticSampler(s2, space=7, space=9)", E_FAIL);
  433. // Visibility
  434. TestHLSLRootSignatureCase("StaticSampler(s2, visibility=SHADER_visibility_ALL)", S_OK);
  435. TestHLSLRootSignatureCase("StaticSampler(visibility=SHADER_VISIBILITY_VERTEX, s2)", S_OK);
  436. TestHLSLRootSignatureCase("StaticSampler(s2, visibility=SHADER_VISIBILITY_HULL)", S_OK);
  437. TestHLSLRootSignatureCase("StaticSampler(s2, visibility=SHADER_VISIBILITY_DOMAIN)", S_OK);
  438. TestHLSLRootSignatureCase("StaticSampler(s2, visibility=SHADER_VISIBILITY_GEOMETRY)", S_OK);
  439. TestHLSLRootSignatureCase("StaticSampler(s2, visibility=SHADER_VISIBILITY_PIXEL)", S_OK);
  440. // StaticSampler complex
  441. TestHLSLRootSignatureCase("StaticSampler(s2, "
  442. " Filter = FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR, "
  443. " AddressU = TEXTURE_ADDRESS_WRAP, "
  444. " AddressV = TEXTURE_ADDRESS_CLAMP, "
  445. " AddressW = TEXTURE_ADDRESS_MIRROR_ONCE, "
  446. " MaxAnisotropy = 8, "
  447. " ComparisonFunc = COMPARISON_NOT_EQUAL, "
  448. " BorderColor = STATIC_BORDER_COLOR_OPAQUE_BLACK, "
  449. " space = 3, "
  450. " visibility = SHADER_VISIBILITY_PIXEL), "
  451. "StaticSampler(s7, "
  452. " Filter = FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR, "
  453. " AddressU = TEXTURE_ADDRESS_MIRROR_ONCE, "
  454. " AddressV = TEXTURE_ADDRESS_WRAP, "
  455. " AddressW = TEXTURE_ADDRESS_CLAMP, "
  456. " MaxAnisotropy = 1, "
  457. " ComparisonFunc = COMPARISON_ALWAYS, "
  458. " BorderColor = STATIC_BORDER_COLOR_OPAQUE_BLACK, "
  459. " space = 3, "
  460. " visibility = SHADER_VISIBILITY_HULL), ", S_OK);
  461. // Mixed
  462. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  463. "DescriptorTable(CBV(b2), "
  464. "CBV(b3, numDescriptors = 4, space=3), "
  465. "SRV(t4, numDescriptors=3), "
  466. "visibility = SHADER_VISIBILITY_HULL), "
  467. "UAV(u1, visibility = SHADER_VISIBILITY_PIXEL), "
  468. "RootConstants( num32BitConstants=3, b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL), "
  469. "DescriptorTable(CBV(b20, space=4)), "
  470. "DescriptorTable(CBV(b20, space=9)), "
  471. "RootConstants( num32BitConstants=8, b2, visibility = SHADER_VISIBILITY_PIXEL), "
  472. "SRV(t9, space = 0)", S_OK);
  473. TestHLSLRootSignatureCase("RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), "
  474. "DescriptorTable(CBV(b2), "
  475. "CBV(b3, numDescriptors = 4, space=3), "
  476. "SRV(t4, numDescriptors=3), "
  477. "visibility = SHADER_VISIBILITY_HULL), "
  478. "UAV(u1, visibility = SHADER_VISIBILITY_PIXEL), "
  479. "RootConstants( num32BitConstants=3, b2, space = 5, visibility = SHADER_VISIBILITY_PIXEL), "
  480. "DescriptorTable(CBV(b20, space=4, numDescriptors = unbounded)), "
  481. "DescriptorTable(CBV(b20, space=9)), "
  482. "RootConstants( num32BitConstants=8, b2, visibility = SHADER_VISIBILITY_PIXEL), "
  483. "SRV(t9, space = 0), "
  484. "StaticSampler(s7, "
  485. " Filter = FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR, "
  486. " AddressU = TEXTURE_ADDRESS_MIRROR_ONCE, "
  487. " AddressV = TEXTURE_ADDRESS_WRAP, "
  488. " AddressW = TEXTURE_ADDRESS_CLAMP, "
  489. " MaxAnisotropy = 12, "
  490. " ComparisonFunc = COMPARISON_ALWAYS, "
  491. " BorderColor = STATIC_BORDER_COLOR_OPAQUE_BLACK, "
  492. " space = 3, "
  493. " visibility = SHADER_VISIBILITY_HULL), ", S_OK);
  494. }