Execution tests: allow sharing of compile arguments (#5742)

Allow sharing of shader compile arguments by referencing Arguments
attribute from other shaders like this:

```
      ...
      <Shader Name="PS" Target="ps_6_0" EntryPoint="PSMain" Text="@CS" Arguments="@CS"/>
      <Shader Name="CS" Target="cs_6_0" EntryPoint="CSMain" Arguments="/Od">
        <![CDATA[
      ...
```
This commit is contained in:
Helena Kotas 2023-09-19 10:27:10 -07:00 коммит произвёл GitHub
Родитель b157edec90
Коммит 7b1c535a67
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 14 добавлений и 1 удалений

Просмотреть файл

@ -830,6 +830,7 @@ void ShaderOpTest::CreateShaders() {
CComPtr<ID3DBlob> 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<LPWSTR> argumentsWList;
splitWStringIntoVectors(argumentsW, L' ', argumentsWList);

Просмотреть файл

@ -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))