mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-18 07:42:08 +08:00
104 lines
5.3 KiB
Python
104 lines
5.3 KiB
Python
# mypy: disable-error-code="empty-body"
|
|
from __future__ import annotations
|
|
import ctypes
|
|
from typing import Literal, TypeAlias
|
|
from tinygrad.runtime.support.c import _IO, _IOW, _IOR, _IOWR
|
|
from tinygrad.runtime.support import c
|
|
dll = c.DLL('llvm_qcom', 'llvm-qcom')
|
|
cl_llvm_instance: TypeAlias = ctypes.c_void_p
|
|
@dll.bind(cl_llvm_instance)
|
|
def cl_compiler_create_llvm_instance() -> cl_llvm_instance: ...
|
|
@dll.bind(None, cl_llvm_instance)
|
|
def cl_compiler_destroy_llvm_instance(inst:cl_llvm_instance) -> None: ...
|
|
enum_cl_handle_type: dict[int, str] = {(CL_HANDLE_COMPILED:=1): 'CL_HANDLE_COMPILED', (CL_HANDLE_LIBRARY:=2): 'CL_HANDLE_LIBRARY', (CL_HANDLE_LINKED:=3): 'CL_HANDLE_LINKED'}
|
|
@c.record
|
|
class struct_cl_compiled_data(c.Struct):
|
|
SIZE = 48
|
|
chip_id: int
|
|
mode: int
|
|
llvm_bitcode: ctypes.c_void_p
|
|
llvm_bitcode_size: int
|
|
build_log: c.POINTER[ctypes.c_char]
|
|
build_log_len: int
|
|
error_code: int
|
|
uint64_t: TypeAlias = ctypes.c_uint64
|
|
uint32_t: TypeAlias = ctypes.c_uint32
|
|
struct_cl_compiled_data.register_fields([('chip_id', uint64_t, 0), ('mode', uint32_t, 8), ('llvm_bitcode', ctypes.c_void_p, 16), ('llvm_bitcode_size', uint64_t, 24), ('build_log', c.POINTER[ctypes.c_char], 32), ('build_log_len', uint32_t, 40), ('error_code', uint32_t, 44)])
|
|
@c.record
|
|
class struct_cl_executable_data(c.Struct):
|
|
SIZE = 80
|
|
num_kernels: int
|
|
kernel_props: ctypes.c_void_p
|
|
error_code: int
|
|
build_log: c.POINTER[ctypes.c_char]
|
|
_unk0: c.Array[ctypes.c_char, Literal[32]]
|
|
chip_id: int
|
|
mode: int
|
|
int32_t: TypeAlias = ctypes.c_int32
|
|
struct_cl_executable_data.register_fields([('num_kernels', int32_t, 0), ('kernel_props', ctypes.c_void_p, 8), ('error_code', uint32_t, 16), ('build_log', c.POINTER[ctypes.c_char], 24), ('_unk0', c.Array[ctypes.c_char, Literal[32]], 32), ('chip_id', uint64_t, 64), ('mode', uint32_t, 72)])
|
|
@c.record
|
|
class cl_handle(c.Struct):
|
|
SIZE = 16
|
|
type: int
|
|
compiled: c.POINTER[struct_cl_compiled_data]
|
|
executable: c.POINTER[struct_cl_executable_data]
|
|
cl_handle.register_fields([('type', ctypes.c_uint32, 0), ('compiled', c.POINTER[struct_cl_compiled_data], 8), ('executable', c.POINTER[struct_cl_executable_data], 8)])
|
|
@dll.bind(c.POINTER[cl_handle], cl_llvm_instance, uint64_t, ctypes.c_int32, c.POINTER[ctypes.c_char], ctypes.c_int32, uint64_t, uint64_t, c.POINTER[ctypes.c_char], uint64_t, uint64_t, ctypes.c_void_p)
|
|
def cl_compiler_compile_source(inst:cl_llvm_instance, chip_id:uint64_t, mode:int, options:c.POINTER[ctypes.c_char], p5:int, p6:uint64_t, p7:uint64_t, source:c.POINTER[ctypes.c_char], source_len:uint64_t, source_type:uint64_t, p11:ctypes.c_void_p) -> c.POINTER[cl_handle]: ...
|
|
@dll.bind(c.POINTER[cl_handle], cl_llvm_instance, uint64_t, ctypes.c_int32, c.POINTER[ctypes.c_char], ctypes.c_int32, c.POINTER[c.POINTER[cl_handle]])
|
|
def cl_compiler_link_program(inst:cl_llvm_instance, chip_id:uint64_t, mode:int, options:c.POINTER[ctypes.c_char], num_handles:int, input_handles:c.POINTER[c.POINTER[cl_handle]]) -> c.POINTER[cl_handle]: ...
|
|
size_t: TypeAlias = ctypes.c_uint64
|
|
@dll.bind(None, c.POINTER[cl_handle], c.POINTER[ctypes.c_void_p], c.POINTER[size_t])
|
|
def cl_compiler_handle_create_binary(handle:c.POINTER[cl_handle], out_ptr:c.POINTER[ctypes.c_void_p], out_size:c.POINTER[size_t]) -> None: ...
|
|
@c.record
|
|
class cl_lib_section(c.Struct):
|
|
SIZE = 20
|
|
id: int
|
|
offset: int
|
|
size: int
|
|
count: int
|
|
entry_size: int
|
|
cl_lib_section.register_fields([('id', uint32_t, 0), ('offset', uint32_t, 4), ('size', uint32_t, 8), ('count', uint32_t, 12), ('entry_size', uint32_t, 16)])
|
|
@c.record
|
|
class cl_lib_header(c.Struct):
|
|
SIZE = 48
|
|
_unk0: c.Array[ctypes.c_uint32, Literal[6]]
|
|
num_sections: int
|
|
_unk1: c.Array[ctypes.c_uint32, Literal[5]]
|
|
sections: c.Array[cl_lib_section, Literal[0]]
|
|
cl_lib_header.register_fields([('_unk0', c.Array[uint32_t, Literal[6]], 0), ('num_sections', uint32_t, 24), ('_unk1', c.Array[uint32_t, Literal[5]], 28), ('sections', c.Array[cl_lib_section, Literal[0]], 48)])
|
|
@c.record
|
|
class cl_lib_prog(c.Struct):
|
|
SIZE = 28
|
|
name: c.Array[ctypes.c_char, Literal[8]]
|
|
_unk0: c.Array[ctypes.c_uint32, Literal[3]]
|
|
fregs: int
|
|
hregs: int
|
|
cl_lib_prog.register_fields([('name', c.Array[ctypes.c_char, Literal[8]], 0), ('_unk0', c.Array[uint32_t, Literal[3]], 8), ('fregs', uint32_t, 20), ('hregs', uint32_t, 24)])
|
|
@c.record
|
|
class cl_lib_img_desc(c.Struct):
|
|
SIZE = 344
|
|
_unk0: c.Array[ctypes.c_char, Literal[196]]
|
|
prg_offset: int
|
|
pvtmem: int
|
|
_unk1: c.Array[ctypes.c_char, Literal[12]]
|
|
shmem: int
|
|
samp_cnt: int
|
|
_unk2: c.Array[ctypes.c_char, Literal[40]]
|
|
brnchstck: int
|
|
_unk4: c.Array[ctypes.c_char, Literal[76]]
|
|
kernel_name: c.Array[ctypes.c_char, Literal[0]]
|
|
cl_lib_img_desc.register_fields([('_unk0', c.Array[ctypes.c_char, Literal[196]], 0), ('prg_offset', uint32_t, 196), ('pvtmem', uint32_t, 200), ('_unk1', c.Array[ctypes.c_char, Literal[12]], 204), ('shmem', uint32_t, 216), ('samp_cnt', uint32_t, 220), ('_unk2', c.Array[ctypes.c_char, Literal[40]], 224), ('brnchstck', uint32_t, 264), ('_unk4', c.Array[ctypes.c_char, Literal[76]], 268), ('kernel_name', c.Array[ctypes.c_char, Literal[0]], 344)])
|
|
@dll.bind(None, c.POINTER[cl_handle])
|
|
def cl_compiler_free_handle(handle:c.POINTER[cl_handle]) -> None: ...
|
|
@dll.bind(None, ctypes.c_void_p)
|
|
def cl_compiler_free_assembly(ptr:ctypes.c_void_p) -> None: ...
|
|
CL_MODE_32BIT = 0
|
|
CL_MODE_64BIT = 1
|
|
CL_SRC_STR = 0
|
|
CL_SRC_BLOB = 1
|
|
CL_LIB_PROGRAM = 0
|
|
CL_LIB_CONSTS = 6
|
|
CL_LIB_IMAGE = 7
|
|
CL_LIB_CODE = 10
|
|
CL_LIB_IMAGE_DESC = 11 |