METODE ID3D10Device::UpdateSubresource (d3d10.h)

CPU menyalin data dari memori ke subsumber daya yang dibuat dalam memori yang tidak dapat dipetakan. Lihat komentar.

Sintaks

void UpdateSubresource(
  [in] ID3D10Resource  *pDstResource,
  [in] UINT            DstSubresource,
  [in] const D3D10_BOX *pDstBox,
  [in] const void      *pSrcData,
  [in] UINT            SrcRowPitch,
  [in] UINT            SrcDepthPitch
);

Parameter

[in] pDstResource

Jenis: ID3D10Resource*

Pointer ke sumber daya tujuan (lihat ID3D10Resource Interface).

[in] DstSubresource

Jenis: UINT

Indeks berbasis nol, yang mengidentifikasi subsumber daya tujuan. Lihat D3D10CalcSubresource untuk detail selengkapnya.

[in] pDstBox

Jenis: const D3D10_BOX*

Kotak yang menentukan bagian subsumber daya tujuan untuk menyalin data sumber daya ke dalamnya. Koordinat berada dalam byte untuk buffer dan dalam texel untuk tekstur. Jika NULL, data ditulis ke subsumber daya tujuan tanpa offset. Dimensi sumber harus sesuai dengan tujuan (lihat D3D10_BOX).

Kotak kosong menghasilkan no-op. Kotak kosong jika nilai atas lebih besar dari atau sama dengan nilai bawah, atau nilai kiri lebih besar dari atau sama dengan nilai kanan, atau nilai depan lebih besar dari atau sama dengan nilai belakang. Saat kotak kosong, UpdateSubresource tidak melakukan operasi pembaruan.

[in] pSrcData

Jenis: const void*

Penunjuk ke data sumber dalam memori.

[in] SrcRowPitch

Jenis: UINT

Ukuran satu baris data sumber.

[in] SrcDepthPitch

Jenis: UINT

Ukuran satu iringan kedalaman data sumber.

Mengembalikan nilai

Tidak ada

Keterangan

Untuk buffer shader-constant; atur pDstBox ke NULL. Tidak dimungkinkan untuk menggunakan metode ini untuk memperbarui sebagian buffer shader-constant.

Sumber daya tidak dapat digunakan sebagai tujuan jika:

Ketika UpdateSubresource kembali, aplikasi bebas untuk mengubah atau bahkan membebaskan data yang diacu oleh pSrcData karena metode telah menyalin/memposisikan konten asli.

Performa UpdateSubresource tergantung pada apakah ada ketidakcocokan untuk sumber daya tujuan atau tidak. Misalnya, ketidakcocokan untuk sumber daya buffer vertex terjadi ketika aplikasi menjalankan panggilan Draw dan kemudian memanggil UpdateSubresource pada buffer vertex yang sama sebelum panggilan Draw benar-benar dijalankan oleh GPU.

  • Ketika ada ketidakcocokan untuk sumber daya, UpdateSubresource akan melakukan 2 salinan data sumber. Pertama, data disalin oleh CPU ke ruang penyimpanan sementara yang dapat diakses oleh buffer perintah. Salinan ini terjadi sebelum metode kembali. Salinan kedua kemudian dilakukan oleh GPU untuk menyalin data sumber ke dalam memori yang tidak dapat dipetakan. Salinan kedua ini terjadi secara asinkron karena dijalankan oleh GPU ketika buffer perintah dibersihkan.
  • Ketika tidak ada ketidakcocokan sumber daya, perilaku UpdateSubresource bergantung pada yang lebih cepat (dari perspektif CPU): menyalin data ke buffer perintah dan kemudian menjalankan salinan kedua ketika buffer perintah dibersihkan, atau meminta CPU menyalin data ke lokasi sumber daya akhir. Ini tergantung pada arsitektur sistem yang mendasar.
Untuk lebih memahami pitch baris sumber dan parameter pitch kedalaman sumber, pertimbangkan ilustrasi tekstur volume 3D berikut. Ilustrasi tekstur volume 3D

Setiap blok dalam visual ini mewakili elemen data, dan ukuran setiap elemen bergantung pada format sumber daya. Misalnya, jika format sumber daya DXGI_FORMAT_R32G32B32A32_FLOAT, maka ukuran setiap elemen akan menjadi 128 bit, atau 16 byte. Tekstur volume 3D ini memiliki lebar dua, tinggi tiga, dan kedalaman empat.

Untuk menghitung pitch baris sumber dan pitch kedalaman sumber untuk sumber daya tertentu, gunakan rumus berikut:

  • Source Row Pitch = [ukuran satu elemen dalam byte] * [jumlah elemen dalam satu baris]
  • Pitch Kedalaman Sumber = [Pitch Baris Sumber] * [jumlah baris (tinggi)]
Dalam kasus contoh tekstur volume 3D ini di mana ukuran setiap elemen adalah 16 byte, rumusnya adalah sebagai berikut:
  • Pitch Baris Sumber = 16 * 2 = 32
  • Pitch Kedalaman Sumber = 16 * 2 * 3 = 96
Ilustrasi berikut menunjukkan sumber daya seperti yang ditata dalam memori. Ilustrasi tekstur volume 3D dalam memori

Misalnya, cuplikan kode berikut menunjukkan cara menentukan wilayah tujuan dalam tekstur 2D. Asumsikan tekstur tujuan adalah 512x512 dan operasi akan menyalin data yang ditujukan oleh pData ke [(120.100).. (200.220)] dalam tekstur tujuan. Asumsikan juga bahwa rowPitch telah diinisialisasi dengan nilai yang tepat (seperti yang dijelaskan di atas). Depan dan belakang masing-masing diatur ke 0 dan 1, karena dengan memiliki depan sama dengan belakang, kotak secara teknis kosong.


D3D10_BOX destRegion;
destRegion.left = 120;
destRegion.right = 200;
destRegion.top = 100;
destRegion.bottom = 220;
destRegion.front = 0;
destRegion.back = 1;

pd3dDevice->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );

Kasus 1D serupa. Cuplikan berikut menunjukkan cara menentukan wilayah tujuan dalam tekstur 1D. Gunakan asumsi yang sama seperti di atas, kecuali bahwa teksturnya panjangnya 512.


D3D10_BOX destRegion;
destRegion.left = 120;
destRegion.right = 200;
destRegion.top = 0;
destRegion.bottom = 1;
destRegion.front = 0;
destRegion.back = 1;

pd3dDevice->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );

Perbedaan antara Direct3D 10 dan Direct3D 10.1:

Direct3D 10.1 memungkinkan sumber daya stensil kedalaman digunakan sebagai sumber atau tujuan.

Persyaratan

   
Target Platform Windows
Header d3d10.h
Pustaka D3D10.lib

Lihat juga

ID3D10Device

Id3D10 Antarmuka Sumber Daya