> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IncrementShapeDmaWritePointer

> IncrementShapeDmaWritePointer

# IncrementShapeDmaWritePointer

Increments the write pointer.

## Syntax

```cpp theme={null}
void IncrementShapeDmaWritePointer(  
         SHAPE_DMA_CONTEXT* context  
)  
```

### Parameters

*context*   \_Inout\_\
Type: [SHAPE\_DMA\_CONTEXT\*](/reference/audio/shapedmacontext/structs/shape_dma_context)

Pointer to a [SHAPE\_DMA\_CONTEXT](/reference/audio/shapedmacontext/structs/shape_dma_context) structure.

### Return value

Type: void

## Remarks

When the end of a frame is reached, this function updates the frame and sets the pointer to zero.

To calculate the size of a DMA buffer, use the following formula:

```cpp theme={null}
fullBufferSizeInBytes = 128 * 4 * numChannels * numFrames  
```

The read and write pointers are incremented as follows:

```cpp theme={null}
readPointer = (readPointer + 1) % numFrames 

writePointer = (writePointer + 1) % numFrames  
```

Addresses within the audio buffer are calculated as follows:

```cpp theme={null}
readAddress = audioBuffer + (128 * 4 * ((readPointer * numChannels) + channel))   

writeAddress = audioBuffer + (128 * 4 * ((writePointer * numChannels) + channel))  
```

You can prevent blocked Direct Memory Access (DMA) commands by ensuring that your audio buffer is sufficiently large and that data is streamed at regular intervals (related to the buffer size). For example, if you are streaming four hardware frames at a time, ensure that some multiple of those frames (at least double-buffered at eight frames) are in the buffer so the hardware can write ahead of the title's read pointer. Alternatively, you could enforce emptying of the buffer before submitting the next flowgraph (consume, update DMA read pointer, and then submit the flowgraph). For more details, see [Blocked commands](/build/console-features/audio/overviews/shape-overview#ID4EBGAC) in [Overview of SHAPE](/build/console-features/audio/overviews/shape-overview).

You can submit flowgraphs to be processed as persistent or non-persistent. Persistent flowgraphs process and then remain resident to repeat their processing in the next frame after read and write pointers have advanced and after other context information is updated.

## Requirements

**Header:** shapedmacontext.h

**Supported platforms:** XBOX One family consoles and XBOX Series consoles

## See also

[ShapeDmaContext](/reference/audio/shapedmacontext/shapedmacontext_members)


## Related topics

- [ShapeDmaContext](/reference/audio/shapedmacontext/shapedmacontext_members.md)
- [IncrementShapeDmaReadPointer](/reference/audio/shapedmacontext/functions/incrementshapedmareadpointer.md)
- [SetShapeDmaWritePointer](/reference/audio/shapedmacontext/functions/setshapedmawritepointer.md)
- [GetShapeDmaWritePointer](/reference/audio/shapedmacontext/functions/getshapedmawritepointer.md)
- [ACP_COMMAND_INCREMENT_DMA_POINTER](/reference/audio/acphal/structs/acp_command_increment_dma_pointer.md)
