summaryrefslogtreecommitdiff
path: root/source/slang/compiler.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-07-06 09:52:53 -0700
committerGitHub <noreply@github.com>2017-07-06 09:52:53 -0700
commit21a14cb4e0d578bc4f8a460016269a1199cac0da (patch)
tree88a04619ceaaa37b87199dd82334cc9d102c156d /source/slang/compiler.cpp
parentf313df379dd9e0d4395f072ffb87016a6f20d5a1 (diff)
parentf145e09a6dcbcf326f782b3e6a76dbf291c792cf (diff)
Merge pull request #53 from tfoleyNV/cross-compilation
Initial work on cross-compilation
Diffstat (limited to 'source/slang/compiler.cpp')
-rw-r--r--source/slang/compiler.cpp73
1 files changed, 18 insertions, 55 deletions
diff --git a/source/slang/compiler.cpp b/source/slang/compiler.cpp
index 9132624f9..19623a7aa 100644
--- a/source/slang/compiler.cpp
+++ b/source/slang/compiler.cpp
@@ -55,10 +55,11 @@ namespace Slang
//
- String emitHLSLForTranslationUnit(
- TranslationUnitRequest* translationUnit)
+ String emitHLSLForEntryPoint(
+ EntryPointRequest* entryPoint)
{
- auto compileRequest = translationUnit->compileRequest;
+ auto compileRequest = entryPoint->compileRequest;
+ auto translationUnit = entryPoint->getTranslationUnit();
if (compileRequest->passThrough != PassThroughMode::None)
{
// Generate a string that includes the content of
@@ -92,8 +93,8 @@ namespace Slang
}
else
{
- return emitProgram(
- translationUnit->SyntaxNode.Ptr(),
+ return emitEntryPoint(
+ entryPoint,
compileRequest->layout.Ptr(),
CodeGenTarget::HLSL);
}
@@ -137,8 +138,8 @@ namespace Slang
{
// TODO(tfoley): need to pass along the entry point
// so that we properly emit it as the `main` function.
- return emitProgram(
- translationUnit->SyntaxNode.Ptr(),
+ return emitEntryPoint(
+ entryPoint,
compileRequest->layout.Ptr(),
CodeGenTarget::GLSL);
}
@@ -180,15 +181,7 @@ namespace Slang
assert(D3DCompile_);
}
- // The HLSL compiler will try to "canonicalize" our input file path,
- // and we don't want it to do that, because they it won't report
- // the same locations on error messages that we would.
- //
- // To work around that, we prepend a custom `#line` directive.
-
- auto translationUnit = entryPoint->getTranslationUnit();
-
- auto hlslCode = emitHLSLForTranslationUnit(translationUnit);
+ auto hlslCode = emitHLSLForEntryPoint(entryPoint);
ID3DBlob* codeBlob;
ID3DBlob* diagnosticsBlob;
@@ -223,6 +216,7 @@ namespace Slang
if (FAILED(hr))
{
// TODO(tfoley): What to do on failure?
+ exit(1);
}
return data;
}
@@ -400,6 +394,13 @@ namespace Slang
switch (compileRequest->Target)
{
+ case CodeGenTarget::HLSL:
+ {
+ String code = emitHLSLForEntryPoint(entryPoint);
+ result.outputSource = code;
+ }
+ break;
+
case CodeGenTarget::GLSL:
{
String code = emitGLSLForEntryPoint(entryPoint);
@@ -505,45 +506,7 @@ namespace Slang
TranslationUnitResult emitTranslationUnit(
TranslationUnitRequest* translationUnit)
{
- auto compileRequest = translationUnit->compileRequest;
-
- // Most of our code generation targets will require us
- // to proceed through one entry point at a time, but
- // in some cases we can emit an entire translation unit
- // in one go.
-
- switch (compileRequest->Target)
- {
- default:
- // The default behavior is going to loop over all the entry
- // points, and then collect an aggregate result.
- return emitTranslationUnitEntryPoints(translationUnit);
-
- case CodeGenTarget::HLSL:
- // When targetting HLSL, we can emit the entire translation unit
- // as a single HLSL program, and include all the entry points.
- {
-
- String hlsl = emitHLSLForTranslationUnit(translationUnit);
-
- TranslationUnitResult result;
- result.outputSource = hlsl;
-
- // Because the user might ask for per-entry-point source,
- // we will just attach the same string as the result for
- // each entry point.
- for( auto& entryPoint : translationUnit->entryPoints )
- {
- EntryPointResult entryPointResult;
- entryPointResult.outputSource = hlsl;
-
- entryPoint->result = entryPointResult;
- }
-
- return result;
- }
- break;
- }
+ return emitTranslationUnitEntryPoints(translationUnit);
}
#if 0