Поделиться через


функция обратного вызова PFND3DDDI_QUERYRESIDENCYCB (d3dumddi.h)

Функция pfnQueryResidencyCb запрашивает состояние расположения ресурса или список выделений.

Синтаксис

PFND3DDDI_QUERYRESIDENCYCB Pfnd3dddiQueryresidencycb;

HRESULT Pfnd3dddiQueryresidencycb(
  HANDLE hDevice,
  const D3DDDICB_QUERYRESIDENCY *unnamedParam2
)
{...}

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in, out]

Указатель на структуру D3DDDICB_QUERYRESIDENCY , описывающую состояние расположения ресурса или списка выделений.

Возвращаемое значение

pfnQueryResidencyCb возвращает одно из следующих значений:

Код возврата Описание
S_OK Состояние места жительства успешно возвращено.
E_INVALIDARG Параметры были проверены и определены как неверные.

Эта функция также может возвращать другие значения HRESULT.

Комментарии

Драйвер отображения пользовательского режима может вызывать функцию pfnQueryResidencyCb для запроса состояния расположения выделений с помощью ресурса или списка выделений. Если драйвер запрашивает состояние расположения выделений через ресурс, запрашиваются все выделения, принадлежащие ресурсу. Как правило, драйвер отображения пользовательского режима запрашивает место расположения ресурса или список выделений после того, как среда выполнения Microsoft Direct3D вызывает функцию QueryResourceResidency или QueryResourceResidencyDXGI драйвера отображения пользовательского режима, чтобы определить место расположения ресурса. Однако драйвер отображения пользовательского режима может запрашивать место расположения ресурса или список выделений в любое время.

Примеры

В следующем примере кода показано, как запросить состояние расположения.

HRESULT
CD3DContext::QueryResourceResidency(CONST D3DDDIARG_QUERYRESOURCERESIDENCY* pQRR)
{
    D3DDDICB_QUERYRESIDENCY queryRes;
    D3DDDI_RESIDENCYSTATUS  resStatus = (D3DDDI_RESIDENCYSTATUS)0;
    HRESULT hr;
    BOOL    bPartInSharedMem = FALSE;

    for (UINT i = 0; i < pQRR->NumResources; i++) {
        memset(&queryRes, 0, sizeof(queryRes));
        queryRes.hResource = m_RTbl[(DWORD)(DWORD_PTR)pQRR->pHandleList[i]].m_hResRuntime;
        if (! queryRes.hResource) {
            return (DDERR_INVALIDPARAMS);
        }
        queryRes.pResidencyStatus = &resStatus;
        hr = m_d3dCallbacks.pfnQueryResidencyCb(m_hD3D, &queryRes);
        if (FAILED(hr)) {
            return (hr);
        }
        switch (resStatus) {
        case D3DDDI_RESIDENCYSTATUS_NOTRESIDENT:
            return S_NOT_RESIDENT;
        case D3DDDI_RESIDENCYSTATUS_RESIDENTINSHAREDMEMORY:
            bPartInSharedMem = TRUE;
            break;
        case D3DDDI_RESIDENCYSTATUS_RESIDENTINGPUMEMORY:
            break;
        default:
            return DDERR_GENERIC;
        }
    }
    if (bPartInSharedMem) {
        return S_RESIDENT_IN_SHARED_MEMORY;
    }
    else {
        return  S_OK;
    }
}

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

См. также раздел

D3DDDICB_QUERYRESIDENCY

D3DDDI_DEVICECALLBACKS

QueryResourceResidency

QueryResourceResidencyDXGI