From 7b1c535a676e1852c6503dd22681c8609727362e Mon Sep 17 00:00:00 2001 From: Helena Kotas Date: Tue, 19 Sep 2023 10:27:10 -0700 Subject: [PATCH] Execution tests: allow sharing of compile arguments (#5742) Allow sharing of shader compile arguments by referencing Arguments attribute from other shaders like this: ``` ... pCode; HRESULT hr = S_OK; LPCSTR pText = m_pShaderOp->GetShaderText(&S); + LPCSTR pArguments = m_pShaderOp->GetShaderArguments(&S); if (S.Callback) { if (!m_ShaderCallbackFn) { ShaderOpLogFmt( @@ -858,7 +859,7 @@ void ShaderOpTest::CreateShaders() { CA2W nameW(S.Name, CP_UTF8); CA2W entryPointW(S.EntryPoint, CP_UTF8); CA2W targetW(S.Target, CP_UTF8); - CA2W argumentsW(S.Arguments, CP_UTF8); + CA2W argumentsW(pArguments, CP_UTF8); std::vector argumentsWList; splitWStringIntoVectors(argumentsW, L' ', argumentsWList); diff --git a/tools/clang/unittests/HLSLExec/ShaderOpTest.h b/tools/clang/unittests/HLSLExec/ShaderOpTest.h index 636ba4042..029e57eca 100644 --- a/tools/clang/unittests/HLSLExec/ShaderOpTest.h +++ b/tools/clang/unittests/HLSLExec/ShaderOpTest.h @@ -221,6 +221,18 @@ public: } return result; } + LPCSTR GetShaderArguments(ShaderOpShader *pShader) { + if (!pShader || !pShader->Arguments) return nullptr; + LPCSTR result = pShader->Arguments; + if (result[0] == '@') { + for (auto && S : Shaders) { + if (S.Name && 0 == strcmp(S.Name, result + 1)) + return S.Arguments; + } + result = nullptr; + } + return result; + } ShaderOpDescriptorHeap *GetDescriptorHeapByName(LPCSTR pName) { for (auto &&R : DescriptorHeaps) { if (R.Name && 0 == strcmp(R.Name, pName))