APZInputBridgeParent::APZInputBridgeParent(const LayersId& aLayersId) { MOZ_ASSERT(XRE_IsGPUProcess()); MOZ_ASSERT(NS_IsMainThread()); mTreeManager = CompositorBridgeParent::GetAPZCTreeManager(aLayersId); MOZ_ASSERT(mTreeManager); }
static inline bool AreCrashGuardsEnabled() { // Crash guard isn't supported in the GPU process since the entire // process is basically a crash guard. if (XRE_IsGPUProcess()) { return false; } #ifdef NIGHTLY_BUILD // We only use the crash guard on non-nightly channels, since the nightly // channel is for development and having graphics features perma-disabled // is rather annoying. Unless the user forces is with an environment // variable, which comes in handy for testing. return gfxEnv::ForceCrashGuardNightly(); #else // Check to see if all guards have been disabled through the environment. if (gfxEnv::DisableCrashGuard()) { return false; } return true; #endif }
void DeviceManagerDx::CreateCompositorDevice(FeatureState& d3d11) { if (gfxPrefs::LayersD3D11ForceWARP()) { CreateWARPCompositorDevice(); return; } RefPtr<IDXGIAdapter1> adapter = GetDXGIAdapter(); if (!adapter) { d3d11.SetFailed(FeatureStatus::Unavailable, "Failed to acquire a DXGI adapter", NS_LITERAL_CSTRING("FEATURE_FAILURE_D3D11_DXGI")); return; } if (XRE_IsGPUProcess() && !D3D11Checks::DoesRemotePresentWork(adapter)) { d3d11.SetFailed( FeatureStatus::Unavailable, "DXGI does not support out-of-process presentation", NS_LITERAL_CSTRING("FEATURE_FAILURE_D3D11_REMOTE_PRESENT")); return; } RefPtr<ID3D11Device> device; if (!CreateCompositorDeviceHelper(d3d11, adapter, true, device)) { // Try again without video support and record that it failed. mCompositorDeviceSupportsVideo = false; if (!CreateCompositorDeviceHelper(d3d11, adapter, false, device)) { return; } } else { mCompositorDeviceSupportsVideo = true; } // Only test this when not using WARP since it can fail and cause // GetDeviceRemovedReason to return weird values. bool textureSharingWorks = D3D11Checks::DoesTextureSharingWork(device); DXGI_ADAPTER_DESC desc; PodZero(&desc); adapter->GetDesc(&desc); if (!textureSharingWorks) { gfxConfig::SetFailed(Feature::D3D11_HW_ANGLE, FeatureStatus::Broken, "Texture sharing doesn't work"); } if (D3D11Checks::DoesRenderTargetViewNeedRecreating(device)) { gfxConfig::SetFailed(Feature::D3D11_HW_ANGLE, FeatureStatus::Broken, "RenderTargetViews need recreating"); } if (XRE_IsParentProcess()) { // It seems like this may only happen when we're using the NVIDIA gpu D3D11Checks::WarnOnAdapterMismatch(device); } int featureLevel = device->GetFeatureLevel(); { MutexAutoLock lock(mDeviceLock); mCompositorDevice = device; mDeviceStatus = Some(D3D11DeviceStatus( false, textureSharingWorks, featureLevel, DxgiAdapterDesc::From(desc))); } mCompositorDevice->SetExceptionMode(0); }