D3DKMTRender 函式 (d3dkmthk.h)
D3DKMTRender 函式會將目前的命令緩衝區提交至 Microsoft DirectX 圖形核心子系統, (Dxgkrnl.sys) 。
語法
NTSTATUS D3DKMTRender(
D3DKMT_RENDER *unnamedParam1
);
參數
unnamedParam1
pData [in, out]
D3DKMT_RENDER 結構的指標,描述將目前命令緩衝區提交至圖形核心子系統的參數。
傳回值
D3DKMTRender 會傳回下列其中一個值:
傳回碼 | 描述 |
---|---|
STATUS_SUCCESS | 已成功提交命令緩衝區。 |
STATUS_DEVICE_REMOVED | 圖形配接器已停止或重設顯示內容。 |
STATUS_INVALID_PARAMETER | 已驗證參數,並判斷為不正確。 |
STATUS_NO_MEMORY | D3DKMTRender 因為記憶體不足而無法完成。 |
STATUS_INVALID_HANDLE | OpenGL ICD 偵測到命令緩衝區中的無效句柄。 |
STATUS_PRIVILEGED_INSTRUCTION | D3DKMTRender 偵測到非特殊許可權的指令 (,也就是存取記憶體超出目前 CPU 進程許可權的指示) 。 |
此函式也可能傳回其他 NTSTATUS 值。
備註
命令緩衝區通常包含許多圖形命令。
如果 D3DKMTRender 傳回 STATUS_GRAPHICS_ALLOCATION_INVALID,OpenGL ICD 應該重新開啟或重新建立主要句柄,將命令緩衝區中的所有參考取代為新的句柄,然後再次呼叫 D3DKMTRender 以重新提交緩衝區。
呼叫 D3DKMTRender 之後,OpenGL ICD 應該從 pCommandBuffer 和 CommandBufferSize 結構所指向 D3DKMT_RENDER之 pCommandBuffer 和CommandBufferSize 成員所傳回的值,判斷命令緩衝區的基位址和大小。
如需此模式的詳細資訊,請參閱使用保證的合約 DMA 緩衝區模型 () ,如需此模式的詳細資訊,請參閱 使用保證合約 DMA 緩衝區模型) ,顯示迷你埠驅動程式可以使用的 DMA 緩衝區大小來轉譯下一個提交的命令緩衝區,與命令緩衝區本身的大小相同。 針對這類裝置,OpenGL ICD 也應該決定配置清單的大小,這些配置清單將在下一次提交時,從 D3DKMT_RENDER 的 AllocationListSize 成員傳回的值轉譯命令緩衝區期間,可供顯示迷你埠驅動程式使用。
對於未使用保證 DMA 緩衝區合約的裝置,OpenGL ICD 可以使用 CommandBufferSize 和 AllocationListSize 成員中傳回的資訊,來判斷下一個 DMA 緩衝區大小和可供轉譯的配置清單。 不過,在低記憶體情況下,提供給顯示迷你埠驅動程序的實際 DMA 緩衝區和配置清單可能小於必要。
如果 OpenGL ICD 偵測到大部分的命令緩衝區排清是因為驅動程式在命令緩衝區或配置清單中用盡空間,則驅動程式可以要求調整它們的大小。 若要調整命令緩衝區的大小,驅動程式會在 D3DKMT_RENDER 的 Flags 成員中設定 ResizeCommandBuffer 位字段旗標,並將要求的大小放在 D3DKMT_RENDER 的 CommandBufferSize 成員中。 同樣地,若要調整配置清單的大小,驅動程式會在 D3DKMT_RENDER 的 Flags 成員中設定 ResizeAllocationList 位字段旗標,並將要求的元素數目放在 D3DKMT_RENDER 的 AllocationListSize 成員中。
注意
即使驅動程式可以要求調整命令緩衝區和配置清單的大小,視訊記憶體管理員可能無法符合。 因此,如果呼叫 D3DKMTRender 成功,驅動程式應該驗證 pCommandBuffer、 CommandBufferSize 和 AllocationListSize 成員中傳回的值。
不過,如果呼叫 D3DKMTRender 失敗,驅動程式會判斷命令緩衝區、配置清單或兩者未重設大小。 因此,驅動程式不應該處理 pCommandBuffer、 CommandBufferSize 和 AllocationListSize 成員中傳回的值,因為它們無效。
範例
下列程式代碼範例示範 OpenGL ICD 如何使用 D3DKMTRender 來轉譯 3D 基本類型。
HRESULT Render(D3DKMT_HANDLE hDevice, UINT CommandOffset, UINT CommandLength)
{
D3DKMT_RENDER RenderData;
memset(&RenderData, 0, sizeof(RenderData));
RenderData.hDevice = hDevice;
RenderData.CommandOffset = CommandOffset;
RenderData.CommandLength = CommandLength;
if (NT_SUCCESS((*pfnKTRender)(&RenderData))) {
return S_OK;
}
return E_FAIL;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
目標平台 | Universal |
標頭 | d3dkmthk.h (包含 D3dkmthk.h) |
程式庫 | Gdi32.lib |
Dll | Gdi32.dll |