summaryrefslogtreecommitdiff
path: root/llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp')
-rw-r--r--llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp b/llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp
new file mode 100644
index 0000000..8cc063f
--- /dev/null
+++ b/llama.cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp
@@ -0,0 +1,131 @@
+#include "backend-dispatched.h"
+#include "backend-virgl-apir.h"
+#include "ggml-backend-impl.h"
+#include "ggml-backend.h"
+#include "ggml-impl.h"
+
+#include <cstdint>
+
+uint32_t backend_buffer_get_base(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ uintptr_t base = (uintptr_t) buffer->iface.get_base(buffer);
+ apir_encode_uintptr_t(enc, &base);
+
+ return 0;
+}
+
+uint32_t backend_buffer_set_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+ GGML_UNUSED(enc);
+
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ ggml_tensor * tensor;
+ // safe to remove the const qualifier here
+ tensor = (ggml_tensor *) (uintptr_t) apir_decode_ggml_tensor(dec);
+
+ uint32_t shmem_res_id;
+ apir_decode_virtgpu_shmem_res_id(dec, &shmem_res_id);
+
+ size_t offset;
+ apir_decode_size_t(dec, &offset);
+
+ size_t size;
+ apir_decode_size_t(dec, &size);
+
+ void * shmem_data = ctx->iface->get_shmem_ptr(ctx->ctx_id, shmem_res_id);
+
+ if (!shmem_data) {
+ GGML_LOG_ERROR(GGML_VIRTGPU_BCK "%s: Couldn't get the shmem addr from virgl\n", __func__);
+ return 1;
+ }
+
+ buffer->iface.set_tensor(buffer, tensor, shmem_data, offset, size);
+
+ return 0;
+}
+
+uint32_t backend_buffer_get_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+ GGML_UNUSED(enc);
+
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ const ggml_tensor * tensor;
+ // safe to remove the const qualifier here
+ tensor = apir_decode_ggml_tensor(dec);
+
+ uint32_t shmem_res_id;
+ apir_decode_virtgpu_shmem_res_id(dec, &shmem_res_id);
+
+ size_t offset;
+ apir_decode_size_t(dec, &offset);
+
+ size_t size;
+ apir_decode_size_t(dec, &size);
+
+ void * shmem_data = ctx->iface->get_shmem_ptr(ctx->ctx_id, shmem_res_id);
+ if (!shmem_data) {
+ GGML_LOG_ERROR(GGML_VIRTGPU_BCK "%s: Couldn't get the shmem addr from virgl\n", __func__);
+ return 1;
+ }
+
+ buffer->iface.get_tensor(buffer, tensor, shmem_data, offset, size);
+
+ return 0;
+}
+
+uint32_t backend_buffer_cpy_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ const ggml_tensor * src;
+ // safe to remove the const qualifier here
+ src = apir_decode_ggml_tensor(dec);
+ ggml_tensor * dst = (ggml_tensor *) (uintptr_t) apir_decode_ggml_tensor(dec);
+
+ bool ret = buffer->iface.cpy_tensor(buffer, src, (ggml_tensor *) dst);
+
+ apir_encode_bool_t(enc, &ret);
+
+ return 0;
+}
+
+uint32_t backend_buffer_clear(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+ GGML_UNUSED(enc);
+
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ uint8_t value;
+ apir_decode_uint8_t(dec, &value);
+
+ buffer->iface.clear(buffer, value);
+
+ return 0;
+}
+
+uint32_t backend_buffer_free_buffer(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx) {
+ GGML_UNUSED(ctx);
+ GGML_UNUSED(enc);
+
+ ggml_backend_buffer_t buffer;
+ buffer = apir_decode_ggml_buffer(dec);
+
+ if (!apir_untrack_backend_buffer(buffer)) {
+ GGML_LOG_WARN(GGML_VIRTGPU_BCK "%s: unknown buffer %p\n", __func__, (void *) buffer);
+ return 1;
+ }
+
+ buffer->iface.free_buffer(buffer);
+
+ return 0;
+}