summaryrefslogtreecommitdiffstats
path: root/source/slang/emit.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-07-17 13:43:58 -0700
committerGitHub <noreply@github.com>2017-07-17 13:43:58 -0700
commit0059ccb3997c2af87bc3f76524d8cd4787c20b7e (patch)
tree3c07ad5576737423cd407772a7d23748eb67f090 /source/slang/emit.cpp
parentb4977c1626f9791bc0c84c75e7012ddd7cb40913 (diff)
parent453a9ca07417bbc17294267c5e44843d16e93c50 (diff)
Merge pull request #111 from tfoleyNV/falcor-shadows-fixes
Falcor shadows fixes
Diffstat (limited to 'source/slang/emit.cpp')
-rw-r--r--source/slang/emit.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp
index 0eb371b88..c6efa88dc 100644
--- a/source/slang/emit.cpp
+++ b/source/slang/emit.cpp
@@ -1041,7 +1041,7 @@ struct EmitVisitor
default:
switch (samplerStateType->flavor)
{
- case SamplerStateType::Flavor::SamplerState: Emit("SamplerState"); break;
+ case SamplerStateType::Flavor::SamplerState: Emit("SamplerState"); break;
case SamplerStateType::Flavor::SamplerComparisonState: Emit("SamplerComparisonState"); break;
default:
assert(!"unreachable");
@@ -1050,7 +1050,15 @@ struct EmitVisitor
break;
case CodeGenTarget::GLSL:
- Emit("sampler");
+ switch (samplerStateType->flavor)
+ {
+ case SamplerStateType::Flavor::SamplerState: Emit("sampler"); break;
+ case SamplerStateType::Flavor::SamplerComparisonState: Emit("samplerShadow"); break;
+ default:
+ assert(!"unreachable");
+ break;
+ }
+ break;
break;
}
@@ -1847,6 +1855,15 @@ struct EmitVisitor
if (auto baseTextureType = base->Type->As<TextureType>())
{
emitGLSLTextureOrTextureSamplerType(baseTextureType, "sampler");
+
+ if (auto samplerType = callExpr->Arguments[0]->Type.type->As<SamplerStateType>())
+ {
+ if (samplerType->flavor == SamplerStateType::Flavor::SamplerComparisonState)
+ {
+ Emit("Shadow");
+ }
+ }
+
Emit("(");
EmitExpr(memberExpr->BaseExpression);
Emit(",");
@@ -2683,6 +2700,9 @@ struct EmitVisitor
#define CASE2(TYPE, HLSL_NAME, GLSL_NAME) \
else if(auto mod_##TYPE = mod.As<TYPE>()) Emit((context->shared->target == CodeGenTarget::GLSL) ? (#GLSL_NAME " ") : (#HLSL_NAME " "))
+ #define CASE2_RAW(TYPE, HLSL_NAME, GLSL_NAME) \
+ else if(auto mod_##TYPE = mod.As<TYPE>()) Emit((context->shared->target == CodeGenTarget::GLSL) ? (GLSL_NAME) : (HLSL_NAME))
+
CASE(RowMajorLayoutModifier, row_major);
CASE(ColumnMajorLayoutModifier, column_major);
@@ -2703,7 +2723,7 @@ struct EmitVisitor
CASE(HLSLLineAdjModifier, lineadj);
CASE(HLSLTriangleAdjModifier, triangleadj);
- CASE(HLSLLinearModifier, linear);
+ CASE2_RAW(HLSLLinearModifier, "linear ", "");
CASE(HLSLSampleModifier, sample);
CASE(HLSLCentroidModifier, centroid);