From e595743b5aa4f6bd88800cfbcfd6eead3cc3d01b Mon Sep 17 00:00:00 2001 From: "Harsh Aggarwal (NVIDIA)" Date: Fri, 8 Aug 2025 03:13:25 +0530 Subject: 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. - --- source/core/slang-platform.cpp | 21 ++++++++++++++++++--- source/slang/hlsl.meta.slang | 22 +++++++++++----------- 2 files changed, 29 insertions(+), 14 deletions(-) (limited to 'source') 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 { -- cgit v1.2.3