7 poin oleh GN⁺ 2025-12-17 | Belum ada komentar. | Bagikan ke WhatsApp
  • Selama 10 tahun terakhir, graphics API tingkat rendah seperti DirectX 12, Vulkan, Metal memang meningkatkan performa GPU, tetapi kompleksitas dan biaya pemeliharaannya juga melonjak tajam
  • GPU modern mendukung hierarki cache penuh, pointer 64-bit, resource bindless, sehingga objek status dan model binding kompleks lama menjadi tidak lagi diperlukan
  • Desain yang diusulkan sangat menyederhanakan pipeline rendering dengan menggunakan akses memori berbasis pointer C/C++ dan satu root pointer 64-bit
  • Pendekatan ini menghapus ledakan PSO, resource barrier, binding API yang kompleks, dan menawarkan struktur yang menghubungkan memori GPU serta bahasa shader secara langsung
  • Pendekatan ini adalah API generasi berikutnya yang dioptimalkan untuk arsitektur GPU modern, dan menunjukkan arah yang seharusnya dituju oleh DirectX 13 atau Vulkan 2.0

Perubahan pada graphics API tingkat rendah

  • Pada 2013, arsitektur AMD GCN di Xbox One dan PS4 menjadi standar pengembangan game AAA, lalu muncullah API tingkat rendah seperti Mantle, DirectX 12, Vulkan, dan Metal
    • Artinya, API-API tersebut dirancang dengan acuan arsitektur GPU sekitar tahun 2013
  • DirectX 11/OpenGL sebelumnya memiliki keterbatasan karena rendering single-thread dan overhead driver yang tinggi
  • API-API ini mengurangi biaya draw call dengan pipeline object (PSO) yang telah dikompilasi sebelumnya, tetapi karena tidak cocok dengan struktur engine, kompleksitas justru meningkat
  • Akibatnya, di dalam engine muncul lagi semacam “lapisan driver low-level” tersendiri, sehingga peran graphics programmer menjadi semakin terfragmentasi

Latar belakang historis: mengapa jadi serumit ini

  • GPU awal dibangun dengan memori yang terpisah dan arsitektur yang berpusat pada fixed-function pipeline
  • OpenGL dan DirectX mengadopsi desain berbasis state dan objek untuk mengabstraksikan keragaman hardware
  • Bahkan hingga DirectX 11, texture dan buffer masih dikelola sebagai descriptor opak
  • Pola desain ini kemudian terbawa terus secara inersia ke API-API berikutnya

Ketidaksesuaian antara GPU modern dan API saat ini

  • GPU saat ini mendukung hierarki cache yang konsisten, PCIe ReBAR, pointer 64-bit, texture bindless
  • Kini dimungkinkan adanya struktur di mana CPU menulis langsung ke memori GPU dan GPU langsung membacanya
  • Dalam lingkungan seperti ini, struktur seperti PSO, descriptor set, binding table menjadi tidak diperlukan
  • Masalah ledakan cache PSO membuat cache ratusan GB dibutuhkan, dan ini menjadi penyebab loading lambat dan stuttering
  • API baru dapat menghapus struktur usang seperti ini dan beralih ke pendekatan sederhana berbasis pointer

Penyederhanaan manajemen memori GPU

  • Vulkan/DirectX 12 lama tidak efisien karena setelah resource dibuat, kompatibilitas heap masih perlu dicek
  • Pendekatan yang diusulkan memakai API sederhana berbentuk gpuMalloc/gpuFree untuk mengalokasikan memori GPU secara langsung
    • CPU dapat memetakan memori GPU secara langsung untuk inisialisasi
    • Data berukuran besar dikirim lewat perintah copy untuk menjalankan kompresi DCC dan pemrosesan swizzle
  • Alamat mapping CPU dan alamat GPU dibedakan, lalu dikonversi dengan gpuHostToDevicePointer

Modernisasi data dan bahasa shader

  • Menggunakan bahasa shader berbasis pointer C/C++ seperti CUDA, Metal, dan OpenCL
  • Akses memori yang efisien dimungkinkan lewat wide load pada level struct (128-bit atau lebih)
  • ByteAddressBuffer atau texel buffer milik DirectX tidak lagi menjadi pilihan optimal
  • Karena GLSL/HLSL tidak mendukung pointer, tidak ada ekosistem pustaka shader reusable, sementara CUDA berkembang dengan pustaka yang kaya

Root argument dan struktur data

  • Kernel GPU menerima satu pointer 64-bit sebagai input lalu melakukan cast ke struct
  • CPU dan GPU berbagi header C/C++ yang sama untuk menjaga konsistensi struktur data
  • Kata kunci const/restrict digunakan untuk mendorong optimisasi compiler, sekaligus menghapus pemisahan UBO/SSBO yang tidak perlu
  • Memanfaatkan preloading scalar register dan optimisasi dynamic uniform pada GPU modern

Penyederhanaan texture binding

  • Semua texture dikelola sebagai array descriptor 256-bit (heap) yang bisa ditulis langsung oleh CPU maupun GPU
  • Mendukung sampling texture non-uniform melalui akses berbasis indeks 32-bit
  • Lebih sederhana daripada descriptor heap di DirectX 12 SM 6.6, dan mirip dengan Vulkan VK_EXT_descriptor_buffer
  • Pembuatan, upload, dan sampling texture semuanya disatukan dalam model berbasis pointer memori GPU

Pipeline shader dan konstanta

  • Pembuatan pipeline cukup dengan memuat shader IR lalu memanggil gpuCreatePipeline
  • Tidak perlu root signature, descriptor set, atau definisi binding
  • Konstanta statis (berbasis struct) menggantikan shader specialization constant, sehingga mengurangi masalah ledakan kombinasi PSO
  • Struct konstanta dapat memuat pointer GPU, sehingga alamat runtime bisa di-hardcode secara langsung

Penyederhanaan barrier dan sinkronisasi

  • Daftar barrier per resource pada API lama tidak selaras dengan struktur GPU modern
  • Model yang diusulkan hanya memakai flag bitfield pada level queue/stage
  • Disederhanakan menjadi bentuk gpuBarrier(before, after, hazard), tanpa perlu pelacakan resource
  • Perintah gpuSignalAfter / gpuWaitBefore memungkinkan sinkronisasi GPU→GPU yang mirip timeline semaphore

Command buffer dan rendering

  • Hanya memakai command buffer sekali pakai (transient), menghapus model reuse kompleks ala Vulkan
  • gpuBeginRenderPass / gpuEndRenderPass digunakan untuk menetapkan render target dan melakukan clear
  • Tidak ada barrier otomatis antar render pass, sehingga rendering paralel dan optimisasi depth pre-pass dimungkinkan

Penyederhanaan pipeline raster

  • Vertex/pixel shader mengakses data berbasis pointer sehingga binding API dihapus
  • GpuDepthStencilState dan GpuBlendState dipisahkan dari PSO untuk mengurangi jumlah kombinasi
  • GPU mobile mendukung programmable blending lewat framebuffer fetch intrinsic
  • PSO hanya memuat status minimum seperti topologi, format, jumlah sampel, dan sebagainya

Indirect draw dan rendering berbasis GPU

  • Semua argumen (data, arguments) dikirim sebagai pointer GPU
  • Mendukung multi-draw melalui gpuDrawIndexedInstancedIndirectMulti
  • GPU dapat langsung membuat root data dan draw argument, sehingga rendering yang sepenuhnya GPU-driven dapat diwujudkan

Tooling dan kompatibilitas

  • Struktur berbasis pointer dapat ditelusuri lewat informasi simbol seperti pada debugger CUDA/Metal
  • Dilindungi oleh memori virtual sehingga tidak ada masalah keamanan; akses yang salah akan memicu page fault
  • Seperti kasus MoltenVK dan Proton, API DirectX/Vulkan/Metal lama tetap dapat didukung melalui lapisan translasi

Spesifikasi minimum dan kesimpulan

  • Nvidia Turing (2018), AMD RDNA1 (2019), Intel Xe1 (2022), Apple M1 (2020) semuanya mendukung kemampuan yang diusulkan
  • GPU masa kini sudah beralih ke struktur bindless, pointer 64-bit, cache yang konsisten
  • Yang masih tertahan pada abstraksi masa lalu hanyalah API-nya
  • API baru ini lebih sederhana daripada DirectX 11, lebih cepat daripada Vulkan, dan lebih fleksibel daripada Metal
  • Vulkan 2.0 / DirectX 13 generasi berikutnya perlu beralih ke desain yang sepenuhnya bindless dan mendorong perluasan ekosistem lewat bahasa shader berbasis pointer C/C++ alih-alih HLSL/GLSL

Belum ada komentar.

Belum ada komentar.