diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-05-29 15:56:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-29 15:56:28 -0400 |
| commit | 8acb704ecabc10c31e664de3814c544572e3945f (patch) | |
| tree | 82380012610537fd3d475b7f3eee70d78b3fcc78 /source/slang/slang-emit-glsl.cpp | |
| parent | 9773495f1ab8a11194a21e1cf7b141c3da5cdfce (diff) | |
Bug fix problem with ray tracing from fragment shader (#1362)
* Added GLSL_460 if ray tracing is used on fragment shader.
Moved GLSL specific setup init function.
* Split out _requireRayTracing method.
Diffstat (limited to 'source/slang/slang-emit-glsl.cpp')
| -rw-r--r-- | source/slang/slang-emit-glsl.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index 18bb84e0e..a41004622 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -12,6 +12,36 @@ namespace Slang { +SlangResult GLSLSourceEmitter::init() +{ + SLANG_RETURN_ON_FAIL(Super::init()); + + // Deal with cases where a particular stage requires certain GLSL versions + // and/or extensions. + switch (m_entryPointStage) + { + case Stage::AnyHit: + case Stage::Callable: + case Stage::ClosestHit: + case Stage::Intersection: + case Stage::Miss: + case Stage::RayGeneration: + { + _requireRayTracing(); + break; + } + default: break; + } + + return SLANG_OK; +} + +void GLSLSourceEmitter::_requireRayTracing() +{ + m_glslExtensionTracker->requireExtension(UnownedStringSlice::fromLiteral("GL_NV_ray_tracing")); + m_glslExtensionTracker->requireVersion(ProfileVersion::GLSL_460); +} + void GLSLSourceEmitter::_requireGLSLExtension(const UnownedStringSlice& name) { m_glslExtensionTracker->requireExtension(name); @@ -1673,9 +1703,11 @@ void GLSLSourceEmitter::emitSimpleTypeImpl(IRType* type) switch (untypedBufferType->op) { case kIROp_RaytracingAccelerationStructureType: - _requireGLSLExtension(UnownedStringSlice::fromLiteral("GL_NV_ray_tracing")); + { + _requireRayTracing(); m_writer->emit("accelerationStructureNV"); break; + } // TODO: These "translations" are obviously wrong for GLSL. case kIROp_HLSLByteAddressBufferType: m_writer->emit("ByteAddressBuffer"); break; |
