|
|
import sys |
|
|
import os |
|
|
|
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../src'))) |
|
|
|
|
|
from driver_api import VirtualGPUDriver |
|
|
|
|
|
def run_simple_graphics_example(): |
|
|
driver = VirtualGPUDriver() |
|
|
|
|
|
try: |
|
|
|
|
|
driver.initialize(num_chips=1, vram_size_gb=0.001, num_sms_per_chip=1, num_cores_per_sm=1, num_tensor_cores_per_sm=1) |
|
|
|
|
|
|
|
|
framebuffer_width = 16 |
|
|
framebuffer_height = 16 |
|
|
fb = driver.create_framebuffer(framebuffer_width, framebuffer_height) |
|
|
driver.bind_framebuffer(fb) |
|
|
|
|
|
|
|
|
driver.clear_color(0.0, 0.0, 1.0, 1.0) |
|
|
driver.clear_depth(1.0) |
|
|
|
|
|
|
|
|
vertex_shader_source = "attribute vec4 position; void main() { gl_Position = position; }" |
|
|
fragment_shader_source = "void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }" |
|
|
|
|
|
vertex_shader = driver.compile_shader(vertex_shader_source, "vertex") |
|
|
fragment_shader = driver.compile_shader(fragment_shader_source, "fragment") |
|
|
|
|
|
shader_program = driver.graphics_api.link_program(vertex_shader, fragment_shader) |
|
|
driver.use_program(shader_program) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
triangle_vertices = [ |
|
|
0, 0, 0, |
|
|
15, 0, 0, |
|
|
7, 15, 0 |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
vertex_buffer_data = triangle_vertices |
|
|
|
|
|
vertex_buffer_id = driver.create_buffer(len(vertex_buffer_data), "vertex") |
|
|
driver.buffer_data(vertex_buffer_id, vertex_buffer_data) |
|
|
|
|
|
|
|
|
|
|
|
driver.draw_arrays("triangles", 0, 3) |
|
|
|
|
|
|
|
|
|
|
|
color_buffer_content = driver.read_memory(fb["color"], framebuffer_width * framebuffer_height * 4) |
|
|
print("\n--- Simulated Framebuffer Content (first 64 bytes) ---") |
|
|
print(color_buffer_content[:64]) |
|
|
print("-----------------------------------------------------") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"An error occurred during graphics example: {e}") |
|
|
finally: |
|
|
driver.shutdown() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
run_simple_graphics_example() |
|
|
|
|
|
|
|
|
|