> ## 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.

# SetShapeDmaWritePointer

> SetShapeDmaWritePointer

# SetShapeDmaWritePointer

Sets the Direct Memory Access (DMA) write pointer.

## Syntax

```cpp theme={null}
HRESULT SetShapeDmaWritePointer(  
         SHAPE_DMA_CONTEXT* context,  
         UINT32 writePointer  
)  
```

### 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.

*writePointer*   \
Type: UINT32

The value for the write pointer.

### Return value

Type: HRESULT

HRESULT success or error code.

## Remarks

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 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)
- [SetShapeDmaReadWriteFull](/reference/audio/shapedmacontext/functions/setshapedmareadwritefull.md)
- [SetShapeDmaReadPointer](/reference/audio/shapedmacontext/functions/setshapedmareadpointer.md)
- [IncrementShapeDmaWritePointer](/reference/audio/shapedmacontext/functions/incrementshapedmawritepointer.md)
- [GetShapeDmaWritePointer](/reference/audio/shapedmacontext/functions/getshapedmawritepointer.md)
