Baca dalam bahasa Inggris

Bagikan melalui


Mengkompilasi shader

Catatan

Topik ini mencakup pengkompilasi FXC.EXE yang digunakan untuk Model Shader 2 hingga 5.1. Untuk Shader Model 6, sebagai gantinya Anda menggunakan DXC.EXE, yang terdokumentasi dalam Menggunakan dxc.exe dan dxcompiler.dll. Visual Studio akan menggunakan DXC.EXE secara otomatis saat Shader Model 6 dipilih untuk konfigurasi Halaman Properti HLSL.

Microsoft Visual Studio dapat mengkompilasi kode shader dari file *.hlsl dan *.fx yang Anda sertakan dalam proyek C++Anda.

Sebagai bagian dari proses build, Visual Studio menggunakan pengkompilasi kode HLSL fxc.exe atau dxc.exe untuk mengkompilasi file sumber shader HLSL ke dalam file objek shader biner atau ke dalam array byte yang ditentukan dalam file header. Bagaimana pengkompilasi kode HLSL mengkompilasi setiap file sumber shader dalam proyek Anda bergantung pada cara Anda menentukan properti File Ouput untuk file tersebut. Untuk informasi selengkapnya tentang halaman properti HLSL, lihat Halaman Properti HLSL.

Metode kompilasi yang Anda gunakan biasanya tergantung pada ukuran file sumber shader HLSL Anda. Jika Anda menyertakan sejumlah besar kode byte di header, Anda meningkatkan ukuran dan waktu muat awal aplikasi Anda. Anda juga memaksa semua kode byte untuk berada dalam memori bahkan setelah shader dibuat, yang membuang-buang sumber daya. Tetapi ketika Anda menyertakan kode byte dalam header, Anda dapat mengurangi kompleksitas kode dan menyederhanakan pembuatan shader.

Sekarang mari kita lihat berbagai cara untuk mengkompilasi kode shader dan konvensi untuk ekstensi file untuk kode shader.

Menggunakan ekstensi file kode shader

Agar sesuai dengan konvensi Microsoft, gunakan ekstensi file ini untuk kode shader Anda:

  • File dengan ekstensi .hlsl menyimpan kode sumber High Level Shading Language (HLSL). Ekstensi .fx yang lebih lama juga didukung, tetapi biasanya dikaitkan dengan sistem Efek warisan .
  • File dengan ekstensi .cso menyimpan objek shader yang dikompilasi.
  • File dengan ekstensi .h adalah file header, tetapi dalam konteks kode shader, file header ini menentukan array byte yang menyimpan data shader. Ekstensi umum lainnya untuk header kode shader HLSL termasuk .hlsli dan .fxh.

Mengkompilasi pada waktu build ke file objek

Jika Anda mengkompilasi file .hlsl ke dalam file objek shader biner, aplikasi Anda perlu membaca data dari file objek tersebut (.cso adalah ekstensi default untuk file objek ini), tetapkan data ke array byte, dan buat objek shader dari array byte tersebut. Misalnya, untuk membuat shader vertex (ID3D11VertexShader**), panggil metode ID3D11Device::CreateVertexShader dengan array byte yang berisi kode byte shader vertex yang dikompilasi. Dalam contoh kode ini, properti Ouput Files untuk file SimpleVertexShader.hlsl menentukan untuk dikompilasi ke dalam file objek SimpleVertexShader.cso.

        auto vertexShaderBytecode = ReadData("SimpleVertexShader.cso");
        ComPtr<ID3D11VertexShader> vertexShader;
        DX::ThrowIfFailed(
            m_d3dDevice->CreateVertexShader(
                vertexShaderBytecode->Data,
                vertexShaderBytecode->Length,
                nullptr,
                &vertexShader
                )

Pembantu ReadData di sini akan terlihat di direktori kerja saat ini serta direktori yang sama dengan file EXE proses saat ini karena file .cso biasanya ditemukan bersama produk build VS lainnya. Lihat ReadData.h untuk contoh implementasi.

Mengompilasi pada saat build ke file header

Jika Anda mengkompilasi file .hlsl ke dalam array byte yang ditentukan dalam file header, Anda perlu menyertakan file header tersebut dalam kode Anda. Dalam contoh kode ini, properti Output Files untuk file PixelShader.hlsl menentukan untuk dikompilasi menjadi array byte g_psshader yang didefinisikan dalam file header PixelShader.h.

namespace
{
       include "PixelShader.h"
}
...
        ComPtr<ID3D11PixelShader> m_pPixelShader;
        hr = pDevice->CreatePixelShader(g_psshader, sizeof(g_psshader), nullptr, &m_pPixelShader);

Mengompilasi dengan D3DCompileFromFile

Anda juga dapat menggunakan fungsiD3DCompileFromFile pada waktu proses untuk mengompilasi kode shader untuk Direct3D 11. Untuk informasi selengkapnya tentang cara melakukannya, lihat Cara: Mengkompilasi Shader.

Catatan

Aplikasi Windows Store mendukung penggunaan D3DCompileFromFile untuk pengembangan tetapi tidak untuk penyebaran.

 

Panduan Pemrograman untuk HLSL

Panduan Pemrograman untuk HLSL