summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorHarsh Aggarwal (NVIDIA) <haaggarwal@nvidia.com>2025-08-08 03:13:25 +0530
committerGitHub <noreply@github.com>2025-08-07 21:43:25 +0000
commite595743b5aa4f6bd88800cfbcfd6eead3cc3d01b (patch)
tree4e019aaf7218b1c0113ad35d935c82aa0c6d5964 /source
parent4721b6ef2dd4e1b39c85acc492f9c6af8898a34b (diff)
Fix intrinsic LoadLocalRootTableConstant for optix (#7949)
Due to an older version of spec referred there was an inconsitency v1.29 2/20/2025 - [HitObject LoadLocalRootArgumentsConstant] Latest spec https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#hitobject-loadlocalroottableconstant Refer: OptiX backend support for Shader Execution Reordering (SER) features as outlined in issue #6647. -
Diffstat (limited to 'source')
-rw-r--r--source/core/slang-platform.cpp21
-rw-r--r--source/slang/hlsl.meta.slang22
2 files changed, 29 insertions, 14 deletions
diff --git a/source/core/slang-platform.cpp b/source/core/slang-platform.cpp
index aab1f3044..f7e82fdf0 100644
--- a/source/core/slang-platform.cpp
+++ b/source/core/slang-platform.cpp
@@ -174,12 +174,27 @@ SLANG_COMPILE_TIME_ASSERT(E_OUTOFMEMORY == SLANG_E_OUT_OF_MEMORY);
}
#else // _WIN32
-
/* static */ SlangResult PlatformUtil::getInstancePath([[maybe_unused]] StringBuilder& out)
{
- // On non Windows it's typically hard to get the instance path, so we'll say not implemented.
- // The meaning is also somewhat more ambiguous - is it the exe or the shared library path?
+#if defined(__linux__) || defined(__CYGWIN__)
+ char path[PATH_MAX];
+ ssize_t len = readlink("/proc/self/exe", path, sizeof(path) - 1);
+ if (len == -1)
+ {
+ return SLANG_FAIL;
+ }
+
+ path[len] = '\0';
+ String pathString(path);
+
+ // We don't want the instance name, just the path to it
+ out.clear();
+ out.append(Path::getParentDirectory(pathString));
+
+ return out.getLength() > 0 ? SLANG_OK : SLANG_FAIL;
+#else
return SLANG_E_NOT_IMPLEMENTED;
+#endif
}
/* static */ SlangResult PlatformUtil::appendResult(
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index c3d2efaac..2d9543716 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -20472,7 +20472,7 @@ struct HitObject
__intrinsic_asm "($0 = NvMakeNop())";
case glsl:
__glslMakeNop(__return_val);
- case cuda: __intrinsic_asm "optixMakeNopHitObject";
+ case cuda: __intrinsic_asm "slangOptixMakeNopHitObject";
case spirv:
spirv_asm
{
@@ -20561,7 +20561,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".IsMiss";
case glsl: __intrinsic_asm "hitObjectIsMissNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectIsMiss";
+ case cuda: __intrinsic_asm "slangOptixHitObjectIsMiss";
case spirv:
return spirv_asm
{
@@ -20582,7 +20582,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".IsHit";
case glsl: __intrinsic_asm "hitObjectIsHitNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectIsHit";
+ case cuda: __intrinsic_asm "slangOptixHitObjectIsHit";
case spirv:
return spirv_asm
{
@@ -20603,7 +20603,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".IsNop";
case glsl: __intrinsic_asm "hitObjectIsEmptyNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectIsNop";
+ case cuda: __intrinsic_asm "slangOptixHitObjectIsNop";
case spirv:
return spirv_asm
{
@@ -20655,7 +20655,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetShaderTableIndex";
case glsl: __intrinsic_asm "hitObjectGetShaderBindingTableRecordIndexNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetSbtRecordIndex";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetSbtRecordIndex";
case spirv:
return spirv_asm
{
@@ -20675,7 +20675,7 @@ struct HitObject
__target_switch
{
case hlsl: __intrinsic_asm ".SetShaderTableIndex";
- case cuda: __intrinsic_asm "optixHitObjectSetSbtRecordIndex";
+ case cuda: __intrinsic_asm "slangOptixHitObjectSetSbtRecordIndex";
}
}
/// Returns the instance index of a hit. Valid if the hit object represents a hit.
@@ -20689,7 +20689,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetInstanceIndex";
case glsl: __intrinsic_asm "hitObjectGetInstanceIdNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetInstanceIndex";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetInstanceIndex";
case spirv:
return spirv_asm
{
@@ -20711,7 +20711,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetInstanceID";
case glsl: __intrinsic_asm "hitObjectGetInstanceCustomIndexNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetInstanceId";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetInstanceId";
case spirv:
return spirv_asm
{
@@ -20733,7 +20733,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetGeometryIndex";
case glsl: __intrinsic_asm "hitObjectGetGeometryIndexNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetSbtGASIndex";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetSbtGASIndex";
case spirv:
return spirv_asm
{
@@ -20755,7 +20755,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetPrimitiveIndex";
case glsl: __intrinsic_asm "hitObjectGetPrimitiveIndexNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetPrimitiveIndex";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetPrimitiveIndex";
case spirv:
return spirv_asm
{
@@ -20799,7 +20799,7 @@ struct HitObject
{
case hlsl: __intrinsic_asm ".GetClusterID";
case glsl: __intrinsic_asm "hitObjectGetClusterIdNV($0)";
- case cuda: __intrinsic_asm "optixHitObjectGetClusterId";
+ case cuda: __intrinsic_asm "slangOptixHitObjectGetClusterId";
case spirv:
return spirv_asm
{