INT CmDevice_RT::CreateAuxDevice(CmDriverContext * pDriverContext) { INT hr = CM_SUCCESS; PCM_HAL_STATE pCmHalState; PCM_CONTEXT pCmCtx; PGENOS_CONTEXT pOsContext; pOsContext = (PGENOS_CONTEXT) GENOS_AllocAndZeroMemory(sizeof(GENOS_CONTEXT)); CMCHK_NULL(pOsContext); if (pDriverContext) { pOsContext->wDeviceID = pDriverContext->deviceid; pOsContext->wRevision = pDriverContext->device_rev; pOsContext->bufmgr = pDriverContext->bufmgr; } m_pUmdContext = pOsContext; CHK_GENOSSTATUS_RETURN_CMERROR(HalCm_Create (pOsContext, &m_DevCreateOption, &pCmHalState)); CHK_GENOSSTATUS_RETURN_CMERROR(pCmHalState->pfnCmAllocate(pCmHalState)); pCmCtx = (PCM_CONTEXT) GENOS_AllocAndZeroMemory(sizeof(CM_CONTEXT)); CMCHK_NULL(pCmCtx); pCmCtx->GenHwDrvCtx = *pOsContext; pCmCtx->pCmHalState = pCmHalState; m_pAccelData = (PVOID) pCmCtx; CMCHK_HR_MESSAGE(GetMaxValueFromCaps(m_HalMaxValues, m_HalMaxValuesEx), "Failed to get Max values."); CMCHK_HR_MESSAGE(GetGenPlatform(m_Platform), "Failed to get GPU type."); m_DDIVersion = VA_CM_VERSION; finish: return hr; }
GENOS_STATUS IntelGen_HwAllocateSshBuffer(PGENHW_HW_INTERFACE pHwInterface, PGENHW_SSH pSSH) { GENOS_STATUS eStatus; PGENOS_INTERFACE pOsInterface; GENHW_HW_ASSERT(pHwInterface); GENHW_HW_ASSERT(pSSH); eStatus = GENOS_STATUS_UNKNOWN; pOsInterface = pHwInterface->pfnGetOsInterface(pHwInterface); if (pSSH->pSshBuffer != NULL) { GENHW_HW_ASSERTMESSAGE("SSH buffer already allocated."); goto finish; } pSSH->iBindingTableSize = GENOS_ALIGN_CEIL(pHwInterface->SshSettings.iSurfacesPerBT * sizeof(BINDING_TABLE_STATE_G5), pHwInterface->SshSettings.iBTAlignment); pSSH->iBindingTableOffset = 0; pSSH->iSurfaceStateOffset = pHwInterface->SshSettings.iBindingTables * pSSH->iBindingTableSize; pSSH->dwSshIntanceSize = pSSH->iSurfaceStateOffset + (pHwInterface->SshSettings.iSurfaceStates * sizeof(GENHW_SURFACE_STATE)); pSSH->dwSshSize = pSSH->dwSshIntanceSize; pHwInterface->dwIndirectHeapSize = GENOS_ALIGN_CEIL(pSSH->dwSshIntanceSize, 0x00001000); GENHW_HW_CHK_STATUS(pOsInterface->pfnSetIndirectStateSize(pOsInterface, pHwInterface->dwIndirectHeapSize)); pSSH->pSshBuffer = (PBYTE) GENOS_AllocAndZeroMemory(pSSH->dwSshSize); if (!pSSH->pSshBuffer) { GENHW_HW_ASSERTMESSAGE("Fail to Allocate SSH buffer."); goto finish; } pSSH->iCurSshBufferIndex = 0; pSSH->iCurrentBindingTable = 0; pSSH->iCurrentSurfaceState = 0; eStatus = GENOS_STATUS_SUCCESS; finish: return eStatus; }