# litert::TensorBuffer


`#include <litert_tensor_buffer.h>`

A C++ wrapper for `LiteRtTensorBuffer`, representing a tensor and its associated backing buffer.

## Summary

### Inheritance

Inherits from: internal::BaseHandle\< LiteRtTensorBuffer \>

| ### Constructors and Destructors ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1ac206e949ea2b72112dd5b6a8e2861a39()` ||

| ### Public types ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a707ee0cbfdf213ea607a28b299ca1014` | enum |

| ### Public functions ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a4ce32ad662240e9ddfb75ee8f1918ac1() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< TensorBufferType >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a814e0bc1d390206d18bd37b308eb9b9b()` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` Clears the tensor buffer possibly asynchronously. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1ab403bb92c1855cd96b48d2871cc7e01c()` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a7f1d407ffe82fd77edfdbb4fc71efa17() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` Creates a duplicate of the current `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` object. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a5f3f29f7cd2847c2659a2b48a6202c0e() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< AHardwareBuffer * >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a6b760ce2aa51865bea077271774c6b9c() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-dma-buf#structlitert_1_1_tensor_buffer_1_1_dma_buf >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a13ebaa2a88bb8361db7f6ab36de92842() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-event#classlitert_1_1_event >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a803713d104773e1bddd38b6e3522d277() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-gl-buffer#structlitert_1_1_tensor_buffer_1_1_gl_buffer >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a67f97c4e4434cd0063bed0c035456284() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-gl-texture#structlitert_1_1_tensor_buffer_1_1_gl_texture >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1afd23a25313c4026f9286c46b6325bf66() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void * >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a2efb2d858e1b09d9c0c29a5ec6375b0a() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< LiteRtClMem >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a4753a3294cbdc5c50ecd8f1c7ce64085() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< HwMemoryHandle >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a93eee690a05167e4839ee28a9aba6305() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< HwMemoryHandle >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1aa304cdd07e4cf42f2c92a9d4bd83b5f3() const ` | `bool` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a3144ddc7cf336a0c1818211139b57bc9(const RankedTensorType & type) const ` | `bool` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1af26cf612d1ba5e953ac98cc682de7bfc(const LiteRtRankedTensorType & type) const ` | `bool` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a56e8ba63cd00b5463531f1e9d37f3cb3() const ` | `bool` Returns `true` if the tensor buffer is a Metal memory object. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a01bb18f38c836c4926f9cfb04b4cea2d() const ` | `bool` Returns `true` if the tensor buffer is an OpenCL memory object. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1aba30ab12d97355c6caa30fbcf7427204() const ` | `bool` Returns `true` if the tensor buffer is a Vulkan memory object. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a102b8bf6184e71714bc77b8fca9f1c05() const ` | `bool` Returns `true` if the tensor buffer is a WebGPU memory object. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1afa6c65484c59475b81df68d53eba2762(LockMode mode)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void * >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a5ed0f1fa643c4213c798c70637f4de85() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< size_t >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1af3347816a1c6da2d86b4e81cfc7a8adb() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< size_t >` Returns the size of the tensor buffer in packed bytes. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a8f21c8949e79f3eb4cb7aa9e55eceee8(absl::Span< T > data)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` Reads data from the tensor buffer into a user-provided `absl::Span`. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a0eece111daf368c8b4386222e2d54bbb(https://developers.google.com/edge/api/litert/c/classlitert/1-1-event#classlitert_1_1_event && event)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` Sets the C++ `https://developers.google.com/edge/api/litert/c/classlitert/1-1-event#classlitert_1_1_event` object for the tensor buffer. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1ac9fdf5aa2c6fea35d3434cce7021c0b8() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< size_t >` Returns the size of the underlying hardware tensor buffer. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1af4f4172254269bc99918c64622e9c086() const ` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< RankedTensorType >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1aafbfbc3a204cfa08e84c65016b01d51c()` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a7aaf1d8d755110d8cb9279485f901d20(absl::Span< const T > data)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< void >` Writes data from a user-provided `absl::Span` to the tensor buffer. |

| ### Public static functions ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a68ab9fcd391657618debf4e2388151d7(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, const RankedTensorType & tensor_type, AHardwareBuffer *ahwb, size_t ahwb_offset)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` Creates a `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` that wraps an Android Hardware Buffer. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a87ad0f02bb68ed3f9c3ed5c53ca6e807(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, const RankedTensorType & tensor_type, TensorBufferType buffer_type, LiteRtClMem cl_memory, size_t size_bytes)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a30ecd82ab72245ad95323ac7843c4441(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, const RankedTensorType & tensor_type, LiteRtGLenum target, LiteRtGLuint id, size_t size_bytes, size_t offset)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a00ad8b9e1c219d07c2cc3ef5f72d1784(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, const RankedTensorType & tensor_type, LiteRtGLenum target, LiteRtGLuint id, LiteRtGLenum format, size_t size_bytes, LiteRtGLint layer)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1aef9fb5c3f7e5ec912e2e2084f5b97a2d(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, const RankedTensorType & tensor_type, void *host_mem_addr, size_t buffer_size)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` Creates a `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` that wraps the provided host memory. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1ae739b72a3216125b0edbda7b959f784d(const RankedTensorType & tensor_type, void *host_mem_addr, size_t buffer_size)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` **[Deprecated.](https://developers.google.com/edge/api/litert/c/deprecated/deprecated)** Use API with explicit [Environment](https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment) instead. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1ad1539b524705592121934cbcb774f5b7(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment & env, TensorBufferType buffer_type, const RankedTensorType & tensor_type, size_t buffer_size)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` Creates a managed `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` of a given buffer type and size. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a3ba156e83836f36d12d1c84d94cb89d3(const RankedTensorType & tensor_type, size_t buffer_size)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected< https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer >` **[Deprecated.](https://developers.google.com/edge/api/litert/c/deprecated/deprecated)** Use API with explicit [Environment](https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment) instead. Creates a managed host memory `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` using the default environment (if applicable). |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a469dc57a81835e9baf23ba924197b17e(LockMode mode)` | `LiteRtTensorBufferLockMode` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a5688190430486a3bc39d628e98cf5685(LiteRtTensorBuffer tensor_buffer, OwnHandle owned)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a67ab3a45c3fceba358c939a5b7a0e387(const https://developers.google.com/edge/api/litert/c/structlitert/1-1internal-1-1-environment-holder#structlitert_1_1internal_1_1_environment_holder & env, LiteRtTensorBuffer tensor_buffer, OwnHandle owned)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` |

| ### Structs ||
|---|---|
| [litert::TensorBuffer::DmaBuf](https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-dma-buf) |   |
| [litert::TensorBuffer::GlBuffer](https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-gl-buffer) |   |
| [litert::TensorBuffer::GlTexture](https://developers.google.com/edge/api/litert/c/structlitert/1-1-tensor-buffer-1-1-gl-texture) |   |

## Public types

### LockMode

```
 LockMode
```

## Public functions

### BufferType

```
Expected< TensorBufferType > BufferType() const 
```

### Clear

```
Expected< void > Clear()
```
Clears the tensor buffer possibly asynchronously.

It may return immediately after scheduling a clear operation though it guarantees that [Read()](https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1a8f21c8949e79f3eb4cb7aa9e55eceee8) will return data cleared, i.e. all zeros.

### ClearEvent

```
Expected< void > ClearEvent()
```

### Duplicate

```
Expected< TensorBuffer > Duplicate() const 
```
Creates a duplicate of the current `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` object.

The returned object is reference-counted, so the underlying `LiteRtTensorBuffer` handle is not released until the last reference is removed.

### GetAhwb

```
litert::Expected< AHardwareBuffer * > GetAhwb() const 
```

### GetDmaBuf

```
litert::Expected< DmaBuf > GetDmaBuf() const 
```

### GetEvent

```
Expected< Event > GetEvent() const 
```

### GetGlBuffer

```
Expected< GlBuffer > GetGlBuffer() const 
```

### GetGlTexture

```
Expected< GlTexture > GetGlTexture() const 
```

### GetMetalBuffer

```
Expected< void * > GetMetalBuffer() const 
```

### GetOpenClMemory

```
Expected< LiteRtClMem > GetOpenClMemory() const 
```

### GetVulkanMemory

```
Expected< HwMemoryHandle > GetVulkanMemory() const 
```

### GetWebGpuBuffer

```
Expected< HwMemoryHandle > GetWebGpuBuffer() const 
```

### HasEvent

```
bool HasEvent() const 
```

### HasType

```
bool HasType(
  const RankedTensorType & type
) const 
```

### HasType

```
bool HasType(
  const LiteRtRankedTensorType & type
) const 
```

### IsMetalMemory

```
bool IsMetalMemory() const 
```
Returns `true` if the tensor buffer is a Metal memory object.


> [!NOTE]
> **Note:** This function does not return an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` to prevent potential misuse.

<br />

### IsOpenClMemory

```
bool IsOpenClMemory() const 
```
Returns `true` if the tensor buffer is an OpenCL memory object.


> [!NOTE]
> **Note:** This function does not return an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` to prevent potential misuse.

<br />

### IsVulkanMemory

```
bool IsVulkanMemory() const 
```
Returns `true` if the tensor buffer is a Vulkan memory object.


> [!NOTE]
> **Note:** This function does not return an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` to prevent potential misuse.

<br />

### IsWebGpuMemory

```
bool IsWebGpuMemory() const 
```
Returns `true` if the tensor buffer is a WebGPU memory object.


> [!NOTE]
> **Note:** This function does not return an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` to prevent potential misuse.

<br />

### Lock

```
Expected< void * > Lock(
  LockMode mode
)
```

### Offset

```
Expected< size_t > Offset() const 
```

### PackedSize

```
Expected< size_t > PackedSize() const 
```
Returns the size of the tensor buffer in packed bytes.

This size is used for reading/writing data on a locked tensor buffer.

### Read

```
Expected< void > Read(
  absl::Span< T > data
)
```
Reads data from the tensor buffer into a user-provided `absl::Span`.

If the provided buffer is smaller than the tensor buffer, data will be read up to the size of the provided buffer. Returns an error if the provided buffer is larger than the tensor buffer.

### SetEvent

```
Expected< void > SetEvent(
  Event && event
)
```
Sets the C++ `https://developers.google.com/edge/api/litert/c/classlitert/1-1-event#classlitert_1_1_event` object for the tensor buffer.

This function takes ownership of the provided `https://developers.google.com/edge/api/litert/c/classlitert/1-1-event#classlitert_1_1_event` object.

### Size

```
Expected< size_t > Size() const 
```
Returns the size of the underlying hardware tensor buffer.

This size can differ from `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer_1af3347816a1c6da2d86b4e81cfc7a8adb` if striding and padding exist.

### TensorBuffer

```
 TensorBuffer()
```

### TensorType

```
Expected< RankedTensorType > TensorType() const 
```

### Unlock

```
Expected< void > Unlock()
```

### Write

```
Expected< void > Write(
  absl::Span< const T > data
)
```
Writes data from a user-provided `absl::Span` to the tensor buffer.

Returns an error if the provided buffer is larger than the tensor buffer's size.

## Public static functions

### CreateFromAhwb

```
Expected< TensorBuffer > CreateFromAhwb(
  const Environment & env,
  const RankedTensorType & tensor_type,
  AHardwareBuffer *ahwb,
  size_t ahwb_offset
)
```
Creates a `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` that wraps an Android Hardware Buffer.

The provided `AHardwareBuffer` is not owned by the `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` and must outlive it.
Details Parameters `ahwb_offset` The offset in bytes from the start of the `AHardwareBuffer` where the tensor data begins.

### CreateFromClBuffer

```
Expected< TensorBuffer > CreateFromClBuffer(
  const Environment & env,
  const RankedTensorType & tensor_type,
  TensorBufferType buffer_type,
  LiteRtClMem cl_memory,
  size_t size_bytes
)
```

### CreateFromGlBuffer

```
Expected< TensorBuffer > CreateFromGlBuffer(
  const Environment & env,
  const RankedTensorType & tensor_type,
  LiteRtGLenum target,
  LiteRtGLuint id,
  size_t size_bytes,
  size_t offset
)
```

### CreateFromGlTexture

```
Expected< TensorBuffer > CreateFromGlTexture(
  const Environment & env,
  const RankedTensorType & tensor_type,
  LiteRtGLenum target,
  LiteRtGLuint id,
  LiteRtGLenum format,
  size_t size_bytes,
  LiteRtGLint layer
)
```

### CreateFromHostMemory

```
Expected< TensorBuffer > CreateFromHostMemory(
  const Environment & env,
  const RankedTensorType & tensor_type,
  void *host_mem_addr,
  size_t buffer_size
)
```
Creates a `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` that wraps the provided host memory.

The provided host memory is not owned by the `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` object and must outlive it. Callers are responsible for ensuring that the pointer is aligned to at least `LITERT_HOST_MEMORY_BUFFER_ALIGNMENT` bytes and that any required padding for delegates like XNNPACK is included and initialized.

### CreateFromHostMemory

```
Expected< TensorBuffer > CreateFromHostMemory(
  const RankedTensorType & tensor_type,
  void *host_mem_addr,
  size_t buffer_size
)
```
**[Deprecated.](https://developers.google.com/edge/api/litert/c/deprecated/deprecated)** Use API with explicit [Environment](https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment) instead.

### CreateManaged

```
Expected< TensorBuffer > CreateManaged(
  const Environment & env,
  TensorBufferType buffer_type,
  const RankedTensorType & tensor_type,
  size_t buffer_size
)
```
Creates a managed `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` of a given buffer type and size.

The returned object is owned by the caller. For host memory, this allocator guarantees `LITERT_HOST_MEMORY_BUFFER_ALIGNMENT` alignment and reserves any delegate-specific padding (e.g., XNNPACK extra bytes), so callers do not need to over-allocate manually.

### CreateManagedHostMemory

```
Expected< TensorBuffer > CreateManagedHostMemory(
  const RankedTensorType & tensor_type,
  size_t buffer_size
)
```
Creates a managed host memory `https://developers.google.com/edge/api/litert/c/classlitert/1-1-tensor-buffer#classlitert_1_1_tensor_buffer` using the default environment (if applicable).

The returned object is owned by the caller. **[Deprecated.](https://developers.google.com/edge/api/litert/c/deprecated/deprecated)** Use API with explicit [Environment](https://developers.google.com/edge/api/litert/c/classlitert/1-1-environment#classlitert_1_1_environment) instead.

### ToLiteRtLockMode

```
LiteRtTensorBufferLockMode ToLiteRtLockMode(
  LockMode mode
)
```

### WrapCObject

```
TensorBuffer WrapCObject(
  LiteRtTensorBuffer tensor_buffer,
  OwnHandle owned
)
```

### WrapCObject

```
TensorBuffer WrapCObject(
  const internal::EnvironmentHolder & env,
  LiteRtTensorBuffer tensor_buffer,
  OwnHandle owned
)
```