diff options
| author | Yong He <yonghe@outlook.com> | 2023-05-09 09:44:33 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-09 09:44:33 -0700 |
| commit | 38ed03a7203baacf36fca62539ac74fd45ed42d2 (patch) | |
| tree | 9648daee25c0a2aaac2fa8cd7d91908fd2aeef2f /source/slang/hlsl.meta.slang | |
| parent | 89a1234964a1927c4936a2758f72b7d6c9d0bc73 (diff) | |
Fix function side-effectness prop logic. (#2875)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 1580a7a23..37af3ef5a 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -300,25 +300,34 @@ struct $(item.name) out uint dim); __target_intrinsic(glsl, "$0._data[$1/4]") + [__NoSideEffect] uint Load(int location); + [__NoSideEffect] uint Load(int location, out uint status); __target_intrinsic(glsl, "uvec2($0._data[$1/4], $0._data[$1/4+1])") + [__NoSideEffect] uint2 Load2(int location); + [__NoSideEffect] uint2 Load2(int location, out uint status); __target_intrinsic(glsl, "uvec3($0._data[$1/4], $0._data[$1/4+1], $0._data[$1/4+2])") + [__NoSideEffect] uint3 Load3(int location); + [__NoSideEffect] uint3 Load3(int location, out uint status); __target_intrinsic(glsl, "uvec4($0._data[$1/4], $0._data[$1/4+1], $0._data[$1/4+2], $0._data[$1/4+3])") + [__NoSideEffect] uint4 Load4(int location); + [__NoSideEffect] uint4 Load4(int location, out uint status); + [__NoSideEffect] T Load<T>(int location) { return __byteAddressBufferLoad<T>(this, location); @@ -713,13 +722,16 @@ struct $(item.name) __target_intrinsic(glsl, "$0._data[$1]") __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") + [__NoSideEffect] T Load(int location); + [__NoSideEffect] T Load(int location, out uint status); __subscript(uint index) -> T { __target_intrinsic(glsl, "$0._data[$1]") __target_intrinsic(spirv_direct, "*StorageBuffer OpAccessChain resultType resultId _0 const(int, 0) _1") + [__NoSideEffect] ref; } }; @@ -5685,13 +5697,9 @@ __target_intrinsic(hlsl, RayQuery) __target_intrinsic(glsl, rayQueryEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) +[__NonCopyableType] struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> { - // Initialize the query object in a "fresh" state. - // - __intrinsic_op($(kIROp_DefaultConstruct)) - __init(); - // Initialize a ray-tracing query. // // This method may be called on a "fresh" ray query, or @@ -5705,6 +5713,8 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> // must obey any API-imposed restrictions. // __target_intrinsic(hlsl) + [__NoSideEffect] + [mutating] void TraceRayInline( RaytracingAccelerationStructure accelerationStructure, RAY_FLAG rayFlags, @@ -5725,6 +5735,7 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> [__unsafeForceInlineEarly] __specialized_for_target(glsl) + [__NoSideEffect] void TraceRayInline( RaytracingAccelerationStructure accelerationStructure, RAY_FLAG rayFlags, @@ -5758,6 +5769,8 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, rayQueryProceedEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__NoSideEffect] + [mutating] bool Proceed(); // Causes the ray query to terminate. @@ -5769,6 +5782,8 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, rayQueryTerminateEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__NoSideEffect] + [mutating] void Abort(); // Get the type of candidate hit being considered. @@ -5783,6 +5798,7 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionTypeEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] CANDIDATE_TYPE CandidateType(); // Access properties of a candidate hit. @@ -5790,46 +5806,55 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "transpose(rayQueryGetIntersectionObjectToWorldEXT($0, false))") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3x4 CandidateObjectToWorld3x4(); __target_intrinsic(glsl, "rayQueryGetIntersectionObjectToWorldEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float4x3 CandidateObjectToWorld4x3(); __target_intrinsic(glsl, "transpose(rayQueryGetIntersectionWorldToObjectEXT($0, false))") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3x4 CandidateWorldToObject3x4(); __target_intrinsic(glsl, "rayQueryGetIntersectionWorldToObjectEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float4x3 CandidateWorldToObject4x3(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CandidateInstanceIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CandidateInstanceID(); __target_intrinsic(glsl, "rayQueryGetIntersectionGeometryIndexEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CandidateGeometryIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionPrimitiveIndexEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CandidatePrimitiveIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CandidateInstanceContributionToHitGroupIndex(); // Access properties of the ray being traced @@ -5838,11 +5863,13 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionObjectRayOriginEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 CandidateObjectRayOrigin(); __target_intrinsic(glsl, "rayQueryGetIntersectionObjectRayDirectionEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 CandidateObjectRayDirection(); // Access properties of a candidate procedural primitive hit. @@ -5850,6 +5877,7 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionCandidateAABBOpaqueEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] bool CandidateProceduralPrimitiveNonOpaque(); // Access properties of a candidate non-opaque triangle hit. @@ -5857,34 +5885,42 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionFrontFaceEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] bool CandidateTriangleFrontFace(); __target_intrinsic(glsl, "rayQueryGetIntersectionBarycentricsEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float2 CandidateTriangleBarycentrics(); __target_intrinsic(glsl, "rayQueryGetIntersectionTEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float CandidateTriangleRayT(); // Commit the current non-opaque triangle hit. __target_intrinsic(glsl, rayQueryConfirmIntersectionEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__NoSideEffect] + [mutating] void CommitNonOpaqueTriangleHit(); // Commit the current procedural primitive hit, with hit time `t`. __target_intrinsic(glsl, rayQueryGenerateIntersectionEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__NoSideEffect] + [mutating] void CommitProceduralPrimitiveHit(float t); // Get the status of the committed (closest) hit, if any. __target_intrinsic(glsl, "rayQueryGetIntersectionTypeEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] COMMITTED_STATUS CommittedStatus(); // Access properties of the committed hit. @@ -5892,51 +5928,61 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "transpose(rayQueryGetIntersectionObjectToWorldEXT($0, true))") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3x4 CommittedObjectToWorld3x4(); __target_intrinsic(glsl, "rayQueryGetIntersectionObjectToWorldEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float4x3 CommittedObjectToWorld4x3(); __target_intrinsic(glsl, "transpose(rayQueryGetIntersectionWorldToObjectEXT($0, true))") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3x4 CommittedWorldToObject3x4(); __target_intrinsic(glsl, "rayQueryGetIntersectionWorldToObjectEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float4x3 CommittedWorldToObject4x3(); __target_intrinsic(glsl, "rayQueryGetIntersectionTEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float CommittedRayT(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CommittedInstanceIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CommittedInstanceID(); __target_intrinsic(glsl, "rayQueryGetIntersectionGeometryIndexEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CommittedGeometryIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionPrimitiveIndexEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CommittedPrimitiveIndex(); __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint CommittedInstanceContributionToHitGroupIndex(); // Access properties of the ray being traced @@ -5945,11 +5991,13 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionObjectRayOriginEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 CommittedObjectRayOrigin(); __target_intrinsic(glsl, "rayQueryGetIntersectionObjectRayDirectionEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 CommittedObjectRayDirection(); // Access properties of a committed triangle hit. @@ -5957,11 +6005,13 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, "rayQueryGetIntersectionFrontFaceEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] bool CommittedTriangleFrontFace(); __target_intrinsic(glsl, "rayQueryGetIntersectionBarycentricsEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float2 CommittedTriangleBarycentrics(); // Access properties of the ray being traced. @@ -5969,21 +6019,25 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE> __target_intrinsic(glsl, rayQueryGetRayFlagsEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] uint RayFlags(); __target_intrinsic(glsl, rayQueryGetWorldRayOriginEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 WorldRayOrigin(); __target_intrinsic(glsl, rayQueryGetWorldRayDirectionEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float3 WorldRayDirection(); __target_intrinsic(glsl, rayQueryGetRayTMinEXT) __glsl_extension(GL_EXT_ray_query) __glsl_version(460) + [__readNone] float RayTMin(); } |
