sdlxBeginGpuComputePass function gpu

Begins a compute pass on a command buffer.

A compute pass is defined by a set of texture subresources and buffers that may be written to by compute pipelines. These textures and buffers must have been created with the COMPUTE_STORAGE_WRITE bit or the COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE bit. If you do not create a texture with COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE, you must not read from the texture in the compute pass. All operations related to compute pipelines must take place inside of a compute pass. You must not begin another compute pass, or a render pass or copy pass before ending the compute pass.

A VERY IMPORTANT NOTE - Reads and writes in compute passes are NOT implicitly synchronized. This means you may cause data races by both reading and writing a resource region in a compute pass, or by writing multiple times to a resource region. If your compute work depends on reading the completed output from a previous dispatch, you MUST end the current compute pass and begin a new one before you can safely access the data. Otherwise you will receive unexpected results. Reading and writing a texture in the same compute pass is only supported by specific texture formats. Make sure you check the format support!

\param command_buffer a command buffer. \param storage_texture_bindings an array of writeable storage texture binding structs. \param num_storage_texture_bindings the number of storage textures to bind from the array. \param storage_buffer_bindings an array of writeable storage buffer binding structs. \param num_storage_buffer_bindings the number of storage buffers to bind from the array. \returns a compute pass handle.

\since This function is available since SDL 3.2.0.

\sa SDL_EndGPUComputePass

extern SDL_DECLSPEC SDL_GPUComputePass * SDLCALL SDL_BeginGPUComputePass( SDL_GPUCommandBuffer *command_buffer, const SDL_GPUStorageTextureReadWriteBinding *storage_texture_bindings, Uint32 num_storage_texture_bindings, const SDL_GPUStorageBufferReadWriteBinding *storage_buffer_bindings, Uint32 num_storage_buffer_bindings)

Implementation

Pointer<SdlGpuComputePass> sdlxBeginGpuComputePass(
  Pointer<SdlGpuCommandBuffer> commandBuffer, {
  List<SdlxGpuStorageTextureReadWriteBinding>? textures,
  List<SdlxGpuStorageBufferReadWriteBinding>? buffers,
}) {
  Pointer<SdlGpuComputePass> result = nullptr;
  if (textures != null || buffers != null) {
    Pointer<SdlGpuStorageTextureReadWriteBinding> texturesPointer = nullptr;
    var texturesLength = 0;
    Pointer<SdlGpuStorageBufferReadWriteBinding> buffersPointer = nullptr;
    var buffersLength = 0;
    if (textures != null) {
      texturesLength = textures.length;
      texturesPointer = textures.calloc();
    }
    if (buffers != null) {
      buffersLength = buffers.length;
      buffersPointer = buffers.calloc();
    }
    result = sdlBeginGpuComputePass(
      commandBuffer,
      texturesPointer,
      texturesLength,
      buffersPointer,
      buffersLength,
    );
    if (texturesPointer != nullptr) {
      texturesPointer.callocFree();
    }
    if (buffersPointer != nullptr) {
      buffersPointer.callocFree();
    }
  }
  return result;
}