# TraceRay function

Sends a ray into a search for hits in an acceleration structure.

## Syntax

This intrinsic function definition is equivalent to the following function template:

```
Template<payload_t>
void TraceRay(RaytracingAccelerationStructure AccelerationStructure,
uint RayFlags,
uint InstanceInclusionMask,
uint RayContributionToHitGroupIndex,
uint MultiplierForGeometryContributionToHitGroupIndex,
uint MissShaderIndex,
RayDesc Ray,
inout payload_t Payload);
```

## Parameters

`AccelerationStructure`

The top-level acceleration structure to use. Specifying a NULL acceleration structure forces a miss.

`RayFlags`

Valid combination of ray_flag values. Only defined ray flags are propagated by the system, i.e. are visible to the RayFlags shader intrinsic.

`InstanceInclusionMask`

An unsigned integer, the bottom 8 bits of which are used to include or reject geometry instances based on the InstanceMask in each instance. For example:

```
if(!((InstanceInclusionMask & InstanceMask) & 0xff)) { //ignore intersection }
```

`RayContributionToHitGroupIndex`

An unsigned integer specifying the offset to add into addressing calculations within shader tables for hit group indexing. Only the bottom 4 bits of this value are used.

`MultiplierForGeometryContributionToHitGroupIndex`

An unsigned integer specifying the stride to multiply by *GeometryContributionToHitGroupIndex*, which is just the 0 based index the geometry was supplied by the app into its bottom-level acceleration structure. Only the bottom 16 bits of this multiplier value are used.

`MissShaderIndex`

An unsigned integer specifying the index of the miss shader within a shader table.

`Ray`

A **RayDesc** representing the ray to be traced.

`Payload`

A user defined ray payload accessed both for both input and output by shaders invoked during raytracing. After **TraceRay** completes, the caller can access the payload as well.

## Return Value

**void**

## Remarks

This function can be called from the following raytracing shader types:

## See also