Extract command line #defines to fxc, roll them in when editing shaders

This commit is contained in:
baldurk
2015-03-29 18:29:20 +01:00
parent 37c1cbffd9
commit c0be5552e8
2 changed files with 48 additions and 0 deletions
@@ -1554,6 +1554,51 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset)
}
}
}
else if(!strcmp(key, "hlslDefines"))
{
string cmdlineDefines = "// Command line defines:\n\n";
char *c = value;
while(*c)
{
// skip whitespace
while(*c && (*c == ' ' || *c == '\t' || *c == '\n'))
c++;
if(*c == 0) break;
// start of a definition
if(c[0] == '/' && c[1] == 'D')
{
c += 2;
// skip whitespace
while(*c && (*c == ' ' || *c == '\t' || *c == '\n')) c++;
if(*c == 0) break;
char *defstart = c;
char *defend = strchr(c, '=');
if(defend == 0) break;
c = defend+1;
char *valstart = c;
// skip to end or next whitespace
while(*c && *c != ' ' && *c != '\t' && *c != '\n') c++;
char *valend = c;
cmdlineDefines += "#define ";
cmdlineDefines += string(defstart, defend) + " " + string(valstart, valend);
cmdlineDefines += "\n";
}
}
Files.push_back(make_pair("@cmdline", cmdlineDefines));
}
key = value + strlen(value) + 1;
}
@@ -1962,6 +1962,9 @@ namespace renderdocui.Windows.PipelineState
offs = compileSource.IndexOf("#include");
}
if (updatedfiles.ContainsKey("@cmdline"))
compileSource = updatedfiles["@cmdline"] + "\n\n" + compileSource;
// invoke off to the ReplayRenderer to replace the log's shader
// with our edited one
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>