INV / custom_vram.py
Fred808's picture
Upload 256 files
7a0c684 verified
# import numpy as np
# class CustomVRAM:
# def __init__(self, global_mem):
# self.global_mem = global_mem
# self.texture_registry = {}
# self.texture_counter = 0
# def load_texture(self, data: np.ndarray, name: str = None) -> str:
# if name is None:
# name = f"texture_{self.texture_counter}"
# self.texture_counter += 1
# # Serialize numpy array to bytes
# data_bytes = data.tobytes()
# data_shape = data.shape
# data_dtype = str(data.dtype)
# # Store metadata and data in global memory
# # For simplicity, we'll store everything contiguously for now.
# # In a real system, this would involve more sophisticated memory management.
# # Find a suitable address in global memory (very simplified, no actual allocation logic)
# # For this simulation, we'll just use a simple counter for addresses.
# # In a real scenario, you'd need a proper memory allocator.
# address = self.global_mem.allocate_space(len(data_bytes) + 100) # +100 for metadata
# # Store shape, dtype, and then data
# # This is a very basic serialization. For production, consider more robust methods.
# metadata = f"{data_shape};{data_dtype};{len(data_bytes)}".encode("utf-8")
# self.global_mem.write(address, list(metadata))
# self.global_mem.write(address + len(metadata), list(data_bytes))
# self.texture_registry[name] = {
# "address": address,
# "size": len(data_bytes),
# "shape": data_shape,
# "dtype": data_dtype,
# "metadata_size": len(metadata)
# }
# return name
# def get_texture(self, name: str) -> np.ndarray:
# if name not in self.texture_registry:
# return None
# texture_info = self.texture_registry[name]
# address = texture_info["address"]
# size = texture_info["size"]
# shape = texture_info["shape"]
# dtype = texture_info["dtype"]
# metadata_size = texture_info["metadata_size"]
# # Read data from global memory
# data_bytes = bytes(self.global_mem.read(address + metadata_size, size))
# # Deserialize bytes to numpy array
# return np.frombuffer(data_bytes, dtype=dtype).reshape(shape)
# def has_texture(self, name: str) -> bool:
# return name in self.texture_registry
# def delete_texture(self, name: str):
# if name in self.texture_registry:
# # In a real system, you'd deallocate the memory.
# # For this simulation, we just remove the entry.
# del self.texture_registry[name]