그래픽 드라이버 "헬로 월드" 예시?
디스플레이에서 픽셀을 렌더링하는 GPU 드라이버를 만드는 데 필요한 단계는 무엇입니까?기본적으로 화면을 빨간색으로 만들거나 픽셀 하나만 보여주는 것과 같은 GPU 드라이버를 만드는 가장 간단한 "헬로 월드" 예입니다.어디서부터 시작합니까?
저는 C나 OpenGL 추상화나 그 어떤 것도 하지 않고 직접 GPU를 직접 해킹하고 싶습니다.Mac OSX를 사용하고 있는데 Intel HD i7 그래픽 카드가 있는 것 같아서 이 문서들이 잘 맞는 것 같습니다.
- 1권 1부: 그래픽스 코어
- 1권 2부 그래픽스 코어 – MMIO, 미디어 레지스터 및 프로그래밍 환경
- Volume 1 Part 3: 그래픽스 코어 – 메모리 인터페이스 및 명령어 렌더 엔진
- 1권 4부 그래픽스 코어 – 비디오 코덱 엔진
- 1권 5부 그래픽스 코어 – 블리터 엔진
- 2권 1부: 3D/미디어 – 3D 파이프라인
- 2권 2부: 3D/미디어 – 미디어
- 제3권 제1부 : 디스플레이 레지스터 – VGA 레지스터
- 제3권 제2부: 디스플레이 레지스터 – CPU 레지스터
- 제3권 제3부: PCH 디스플레이 레지스터
- 4권 1부: 서브시스템과 코어 – 공유 기능
- Volume 4 Part 2: 서브시스템과 코어 – Message Gateway, URB, Video Motion, IS
메사3D 프로젝트는 수많은 오픈소스 그래픽 드라이버가 있다고 말하고 위키피디아는 인텔이 이러한 문서를 제작하여 원하는 경우 오픈소스 드라이버를 작성할 수 있지만 방법에 대해서는 설명하지 않는다고 말합니다.
마이클 에이브래쉬의 그래픽스 프로그래밍 블랙북을 접했는데, 이 책은 많은 설명을 해줍니다.
하지만 그것은 한꺼번에 물어뜯기에는 좀 무리가 있습니다.그리고 "헬로 월드" 프로젝트인 GPU 드라이버에 대한 해킹을 시작하는 방법에 대한 정보는 없는 것 같습니다.
예를 들어,
- 조립을 배우려면, 당신은 단지
brew install nasm
, 일부 어셈블리를 작성하고 컴파일한 후 실행하여 "hello world"를 인쇄합니다. - 아두이노를 배우기 위해서는 USB 케이블을 통해 아두이노 보드를 컴퓨터에 꽂고 소프트웨어를 설치한 후 C 코드를 보드에 직접 업로드하여 실행하면 LED가 깜박입니다.
그래픽 카드에 대해 어떻게 같은 종류의 일을 합니까?
hello world의 예는 반드시 효과가 있을 필요는 없지만(효과가 있다면 멋지겠지요!), 높은 수준의/실무적인 의미에서 필요한 것을 간단히 설명하는 것도 도움이 될 것입니다.맥이나 리눅스에서 가능하지 않다면 알아두는 것이 좋을 것입니다.하지만 그럼에도 그래픽 드라이버를 작성할 때 어디서부터 시작해야 합니까?
- 1단계: 대상이 되는 특정 GPU(아키텍처, 레지스터 및 스트림 세부 정보)를 이해합니다.많은 GPU의 경우 이러한 세부 사항은 독점 사항일 수 있으며 이해하지 못할 수도 있습니다. (하지만 언급하신 대로 사양이 제공됩니다.)
- 2단계: 드라이버에서 레지스터/세부 정보를 쿼리할 수 있는 일부 호출을 드라이버에 추가합니다.
- 3단계: 드라이버에 일부 호출을 추가하여 레지스터를 수정합니다. (모드 변경 등)
- 4단계: 일정한 색상으로 GPU에 삼각형/쿼드를 그리는 방법을 확인할 수 있습니다.화면의 큰 4각형 또는 2개의 삼각형 또는 1개의 차원의 2배의 삼각형을 그리거나 일부 명확한 명령을 전송하여 화면 클리어(glClear와 유사한 기능)를 구현해 보십시오.(GPU에서 지원하는 방식 중 어느 방식을 사용하든) 삼각형이나 쿼드를 그리는 경우 NDC(normalized device coordinate) 시스템을 사용하고 Raw windowing system 또는 NWS(Null windowing system)에서 작업하는 것을 선호합니다.윈도우 설정 시스템은 합성 또는 일부 후처리 후 출력 프레임 버퍼를 표시하는 역할을 합니다.Raw 또는 NWS는 프레임 버퍼를 화면에 직접 표시하는 것을 의미합니다.
- 5단계(대부분의 항목이 선택 사항임):복잡한 도면을 구현합니다.이것은 픽셀, 선, 삼각 스트립, 삼각 팬 등과 같은 다른 드로잉 모드의 지원과 텍스처, 조명, 변환, 다른 윈도잉 시스템과의 상호 작용의 지원을 포함할 수 있습니다.이 단계에서는 조립에 대해 학습해야 합니다.하지만 이것은 x86이나 암(CPU) 어셈블리가 아니라 SIMD를 다루는 데 특화된 GPU 어셈블리입니다.
- 6단계: 스텐실 기능을 구현합니다.프로그램에 hello world의 스텐실을 준비합니다.컬러 1로 화면을 지웁니다.스텐실을 바른 후 색상 2로 다시 화면을 클리어합니다.이제 색상 1을 배경으로 색상 2로 쓰여진 헬로 월드가 있습니다.
이 모든 것을 할 동기는 다음과 같습니다.그리고 이것은 멋질 것입니다.
이를 위한 동기부여는 다음과 같습니다. GPU 사양의 가용성, GPU 어셈블리에 대한 학습 곡선, 그래픽의 복잡성.
나의 추천:GPU 사양(어셈블리와 함께)을 사용할 수 있다면, 예를 들어 사용 가능한 모든 API 세트(open vg 및 open GLES 1.1)의 서브셋을 구현할 것을 제안합니다.이 API 세트에 대한 자세한 내용은 khronos 웹사이트를 방문해 보세요.
언급URL : https://stackoverflow.com/questions/27812098/graphics-driver-hello-world-example
'bestsource' 카테고리의 다른 글
Woocommerce 3 전용 주문 제작 후크 (0) | 2023.10.31 |
---|---|
웹 브라우저 제어 기능이 있는 Excel 사용자 지정 작업 창 - 키보드/초점 문제 (0) | 2023.10.31 |
MySQL 테이블에 열의 복사본을 빠르게 추가합니다. (0) | 2023.10.31 |
터미널에서 데이터베이스의 sql 파일 실행 (0) | 2023.10.31 |
줌라 - 500 - 오류가 발생했습니다.SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서를 확인하십시오. (0) | 2023.10.31 |