Máy ảo VertexShader

Một phần của tài liệu nghiên cứu và xây dựng thử nghiệm 3G Engine (Trang 25 - 27)

Để biết được cách thiết kế 1 Vertex Shader trước tiên ta cần phải nắm được mô hình máy ảo Vertex Shader (Vertex Shader Virtual Machine). Máy ảo Vertex

Shader là mô hình mang tính chất lý thuyết giúp ta dễ tiếp cận và hình dung cách thức mà Vertex Shader hoạt động. Giống như 1 loại máy móc công nghiệp, Vertex Shader nhận dữ liệu đầu vào (input), sau đó tiến hành xử lý dữ liệu đó bằng 1 số tác vụ, cuối cùng là xuất ra các thành phẩm là các dữ liệu đầu ra (output). Sau đây là sơ đồ lý thuyết:

Hình 2-3 Sơđồ lý thuyết máy ảo Vertex Shader

Trong sơ đồ trên dữ liệu vertex được truyền từ trái sang phải. Các thanh ghi (registers) là nơi chứa và quản lý các dữ liệu đầu vào và đầu ra của Shader. Các tác vụđược thi hành trong Shader được cấu tạo từ 1 tập các vi lệnh hợp ngữ (assembly- language instructions), các vi lệnh này được thi hành ngay trên đơn vị số học và luận lý (Arithmetic Logic Unit, ALU) nằm trên GPU (Graphic Processor Unit) của card 3D. Dữ liệu đầu vào của Vertex Shader được truyền vào thông qua thanh ghi đầu vào (input registers). Vertex Shader sau khi thi hành sẽ xuất các giá trị đầu ra thông qua các thanh ghi đầu ra (output registers). Dữ liệu đầu vào của Shader là thông tin của 1 vertex được lấy từ trong vertex buffer (do chương trình cung cấp), các dữ liệu này có thể bao gồm tọa độ, pháp tuyến, tọa độ texture, màu diffuse… Dữ liệu đầu ra của Vertex Shader được trả thẳng lại cho qui trình xử lý (Graphic Pipeline) để chuyển qua công đoạn xử lý đối tượng cơ sở (Primitive processing).

Các thanh ghi được sử dụng trong Shader đều là các thanh ghi 4 chiều (có thể lưu được 4 số thực trong 1 thanh ghi). Có 4 kiểu thanh ghi, mỗi kiểu có cách sử dụng rất khác nhau.

Thanh ghi dữ liệu vào (input registers) chứa dữ liệu đầu vào.

Thanh ghi hằng (constant registers) chứa các hằng số dùng trong ALU. Thanh ghi tạm (temporary registers) chứa các dữ liệu tạm thời.

Thanh ghi dữ liệu ra (output registers) chứa kết quả tính toán của Vertex Shader.

Với các thanh ghi đóng vai trò lưu trữ, ALU đóng vai trò thi hành các lệnh, phần quan trọng nhất của Shader chính là các vi lệnh (instrutions). Vi lệnh trong Vertex Shader chủ yếu là các vi lệnh toán học thực hiện 1 tác vụ cụ thể như tính tích vô hướng (dot product), tích hữu hướng (cross product), nhân ma trận, tìm minmax… Danh sách các loại thanh ghi cũng như các vi lệnh có thể kham thảo trong Direct3D SDK.

Một phần của tài liệu nghiên cứu và xây dựng thử nghiệm 3G Engine (Trang 25 - 27)