要求和使用 Surface 記憶體
當使用者模式顯示驅動程式需要建立表面清單時,會在 Microsoft Direct3D 執行時間需要呼叫其 CreateResource 函式。 Direct3D 執行時間會指定使用者模式顯示驅動程式用來回呼執行時間之介面清單的資源控制碼。 使用者模式顯示驅動程式會建立資源物件來代表表面清單、產生此物件的唯一控制碼,並將控制碼傳回至 Direct3D 執行時間。 執行時間會在後續的驅動程式呼叫中使用這個唯一控制碼來識別表面清單。 執行時間會藉由指定包含在D3DDDIARG_CREATERESOURCE結構的pSurfList成員陣列中的介面索引來識別特定表面。
由於使用者模式顯示驅動程式會在參考資源的呼叫中接收驅動程式定義資源控制碼,因此驅動程式不需要執行昂貴的控制碼查閱,才能找出驅動程式定義的資源物件。 同樣地,為了讓執行時間不需要執行控制碼查閱,使用者模式顯示驅動程式會在使用者模式顯示驅動程式回呼回執行時間時,使用 Direct3D 執行時間定義的資源控制碼。
使用者模式顯示驅動程式會呼叫 pfnAllocateCb 函式來配置表面的記憶體。 在pfnAllocateCb呼叫中,使用者模式顯示驅動程式可以分別針對表面清單和pPrivateDriverData D3DDDICB_ALLOCATE 成員中的 pPrivateDriverData成員和D3DDDI_ALLOCATIONINFO結構傳遞私人資料。 不過,使用者模式顯示驅動程式無法從 pPrivateDriverData 成員接收私人資料。 使用者模式顯示驅動程式可以配置此私人資料的記憶體,而且可以在 pfnAllocateCb 呼叫傳回之後釋放記憶體,或使用堆疊記憶體來傳遞此私人資料。 pfnAllocateCb函式會傳回使用者模式顯示驅動程式每個配置的每個配置控制碼。
注意 使用者模式顯示驅動程式必須針對每個裝置的每個共用表面呼叫 pfnAllocateCb 函式一次。 例如,如果裝置 1 建立裝置 2、3 和 4 也會使用的共用表面,則裝置 2、3 和 4 也必須針對共用表面呼叫 pfnAllocateCb 一次,才能擷取配置控制碼。
使用者模式顯示驅動程式必須藉由維護表面對配置控制碼資料表,來追蹤每個配置控點的每個介面。 使用者模式顯示驅動程式應該將每個配置控制碼儲存在驅動程式定義的資源物件內。
例如,當 Direct3D 執行時間在先前配置的介面上執行作業 (例如,在呼叫使用者模式顯示驅動程式的 Blt 函式) 時,使用者模式顯示驅動程式會收到資源的控制碼,可能具有表面索引。 使用者模式顯示驅動程式會使用此資源控制碼來擷取驅動程式定義的資源物件。 驅動程式會取得儲存在資源物件中的配置控制碼,並將其組合在命令緩衝區中。 使用者模式顯示驅動程式會在呼叫 pfnRenderCb 函式時,使用對應至表面的配置控制碼,將命令緩衝區提交至顯示迷你埠驅動程式。 顯示迷你埠驅動程式可以呼叫 DxgkCbGetHandleData 函式,以判斷使用者模式顯示驅動程式所參考的介面配置。