1#pragma once
  2
  3/* device */
  4uint32_t backend_device_get_device_count(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
  5uint32_t backend_device_get_count(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
  6uint32_t backend_device_get_name(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
  7uint32_t backend_device_get_description(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
  8uint32_t backend_device_get_type(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
  9uint32_t backend_device_get_memory(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 10uint32_t backend_device_supports_op(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 11uint32_t backend_device_get_buffer_type(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 12uint32_t backend_device_get_props(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 13uint32_t backend_device_buffer_from_ptr(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 14
 15/* buffer-type */
 16uint32_t backend_buffer_type_get_name(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 17uint32_t backend_buffer_type_get_alignment(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 18uint32_t backend_buffer_type_get_max_size(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 19/* APIR_COMMAND_TYPE_BUFFER_TYPE_IS_HOST is deprecated. Keeping the handler for backward compatibility. */
 20uint32_t backend_buffer_type_is_host(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 21uint32_t backend_buffer_type_alloc_buffer(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 22uint32_t backend_buffer_type_get_alloc_size(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 23
 24/* buffer */
 25uint32_t backend_buffer_get_base(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 26uint32_t backend_buffer_set_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 27uint32_t backend_buffer_get_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 28uint32_t backend_buffer_cpy_tensor(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 29uint32_t backend_buffer_clear(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 30uint32_t backend_buffer_free_buffer(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 31
 32/* backend */
 33uint32_t backend_backend_graph_compute(apir_encoder * enc, apir_decoder * dec, virgl_apir_context * ctx);
 34
 35static inline const char * backend_dispatch_command_name(ApirBackendCommandType type) {
 36    switch (type) {
 37        /* device */
 38        case APIR_COMMAND_TYPE_DEVICE_GET_DEVICE_COUNT:
 39            return "backend_device_get_device_count";
 40        case APIR_COMMAND_TYPE_DEVICE_GET_COUNT:
 41            return "backend_device_get_count";
 42        case APIR_COMMAND_TYPE_DEVICE_GET_NAME:
 43            return "backend_device_get_name";
 44        case APIR_COMMAND_TYPE_DEVICE_GET_DESCRIPTION:
 45            return "backend_device_get_description";
 46        case APIR_COMMAND_TYPE_DEVICE_GET_TYPE:
 47            return "backend_device_get_type";
 48        case APIR_COMMAND_TYPE_DEVICE_GET_MEMORY:
 49            return "backend_device_get_memory";
 50        case APIR_COMMAND_TYPE_DEVICE_SUPPORTS_OP:
 51            return "backend_device_supports_op";
 52        case APIR_COMMAND_TYPE_DEVICE_GET_BUFFER_TYPE:
 53            return "backend_device_get_buffer_type";
 54        case APIR_COMMAND_TYPE_DEVICE_GET_PROPS:
 55            return "backend_device_get_props";
 56        case APIR_COMMAND_TYPE_DEVICE_BUFFER_FROM_PTR:
 57            return "backend_device_buffer_from_ptr";
 58        /* buffer-type */
 59        case APIR_COMMAND_TYPE_BUFFER_TYPE_GET_NAME:
 60            return "backend_buffer_type_get_name";
 61        case APIR_COMMAND_TYPE_BUFFER_TYPE_GET_ALIGNMENT:
 62            return "backend_buffer_type_get_alignment";
 63        case APIR_COMMAND_TYPE_BUFFER_TYPE_GET_MAX_SIZE:
 64            return "backend_buffer_type_get_max_size";
 65        case APIR_COMMAND_TYPE_BUFFER_TYPE_IS_HOST:
 66            return "backend_buffer_type_is_host (DEPRECATED)";
 67        case APIR_COMMAND_TYPE_BUFFER_TYPE_ALLOC_BUFFER:
 68            return "backend_buffer_type_alloc_buffer";
 69        case APIR_COMMAND_TYPE_BUFFER_TYPE_GET_ALLOC_SIZE:
 70            return "backend_buffer_type_get_alloc_size";
 71        /* buffer */
 72        case APIR_COMMAND_TYPE_BUFFER_GET_BASE:
 73            return "backend_buffer_get_base";
 74        case APIR_COMMAND_TYPE_BUFFER_SET_TENSOR:
 75            return "backend_buffer_set_tensor";
 76        case APIR_COMMAND_TYPE_BUFFER_GET_TENSOR:
 77            return "backend_buffer_get_tensor";
 78        case APIR_COMMAND_TYPE_BUFFER_CPY_TENSOR:
 79            return "backend_buffer_cpy_tensor";
 80        case APIR_COMMAND_TYPE_BUFFER_CLEAR:
 81            return "backend_buffer_clear";
 82        case APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER:
 83            return "backend_buffer_free_buffer";
 84        /* backend */
 85        case APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE:
 86            return "backend_backend_graph_compute";
 87
 88        default:
 89            return "unknown";
 90    }
 91}
 92
 93extern "C" {
 94static const backend_dispatch_t apir_backend_dispatch_table[APIR_BACKEND_DISPATCH_TABLE_COUNT] = {
 95
 96    /* device */
 97
 98    /* APIR_COMMAND_TYPE_DEVICE_GET_DEVICE_COUNT  = */ backend_device_get_device_count,
 99    /* APIR_COMMAND_TYPE_DEVICE_GET_COUNT  = */ backend_device_get_count,
100    /* APIR_COMMAND_TYPE_DEVICE_GET_NAME  = */ backend_device_get_name,
101    /* APIR_COMMAND_TYPE_DEVICE_GET_DESCRIPTION  = */ backend_device_get_description,
102    /* APIR_COMMAND_TYPE_DEVICE_GET_TYPE  = */ backend_device_get_type,
103    /* APIR_COMMAND_TYPE_DEVICE_GET_MEMORY  = */ backend_device_get_memory,
104    /* APIR_COMMAND_TYPE_DEVICE_SUPPORTS_OP  = */ backend_device_supports_op,
105    /* APIR_COMMAND_TYPE_DEVICE_GET_BUFFER_TYPE  = */ backend_device_get_buffer_type,
106    /* APIR_COMMAND_TYPE_DEVICE_GET_PROPS  = */ backend_device_get_props,
107    /* APIR_COMMAND_TYPE_DEVICE_BUFFER_FROM_PTR  = */ backend_device_buffer_from_ptr,
108
109    /* buffer-type */
110
111    /* APIR_COMMAND_TYPE_BUFFER_TYPE_GET_NAME  = */ backend_buffer_type_get_name,
112    /* APIR_COMMAND_TYPE_BUFFER_TYPE_GET_ALIGNMENT  = */ backend_buffer_type_get_alignment,
113    /* APIR_COMMAND_TYPE_BUFFER_TYPE_GET_MAX_SIZE  = */ backend_buffer_type_get_max_size,
114    /* APIR_COMMAND_TYPE_BUFFER_TYPE_IS_HOST  = */ backend_buffer_type_is_host /* DEPRECATED */,
115    /* APIR_COMMAND_TYPE_BUFFER_TYPE_ALLOC_BUFFER  = */ backend_buffer_type_alloc_buffer,
116    /* APIR_COMMAND_TYPE_BUFFER_TYPE_GET_ALLOC_SIZE  = */ backend_buffer_type_get_alloc_size,
117
118    /* buffer */
119
120    /* APIR_COMMAND_TYPE_BUFFER_GET_BASE  = */ backend_buffer_get_base,
121    /* APIR_COMMAND_TYPE_BUFFER_SET_TENSOR  = */ backend_buffer_set_tensor,
122    /* APIR_COMMAND_TYPE_BUFFER_GET_TENSOR  = */ backend_buffer_get_tensor,
123    /* APIR_COMMAND_TYPE_BUFFER_CPY_TENSOR  = */ backend_buffer_cpy_tensor,
124    /* APIR_COMMAND_TYPE_BUFFER_CLEAR  = */ backend_buffer_clear,
125    /* APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER  = */ backend_buffer_free_buffer,
126
127    /* backend */
128
129    /* APIR_COMMAND_TYPE_BACKEND_GRAPH_COMPUTE  = */ backend_backend_graph_compute,
130};
131}