HostVector::HostVector(unsigned int fSize) { size = 0; data = 0; Set2DMapWidth(GetMaxTextureSize()); Resize(fSize); }
IDirect3DTextureX* GetTextureX(D3DDevice* pd3dd, DDSurface* pddsurface) { WinPoint size = pddsurface->GetSize(); WinPoint pointMin = pd3dd->GetMinTextureSize(); WinPoint pointMax = pd3dd->GetMaxTextureSize(GetMaxTextureSize());// yp Your_Persona August 2 2006 : MaxTextureSize Patch if (pointMin.X() != 0 || pointMin.Y() != 0) { while ( size.X() < pointMin.X() || size.Y() < pointMin.Y() ) { size.SetX(size.X() * 2); size.SetY(size.Y() * 2); } } if (pointMax.X() != 0 || pointMax.Y() != 0) { while ( size.X() > pointMax.X() || size.Y() > pointMax.Y() ) { size.SetX(size.X() / 2); size.SetY(size.Y() / 2); } } if (pd3dd->IsHardwareAccelerated()) { TRef<DeviceTexture> ptexture; if (!m_mapDeviceTextures.Find(pddsurface, ptexture)) { while (true) { ptexture = CreateDeviceTexture(pd3dd, pddsurface, size); if (ptexture) { m_mapDeviceTextures.Set(pddsurface, ptexture); break; } RevokeTextures(); } } if (ptexture) { TRef<IDirect3DTextureX> pd3dtexture = ptexture->GetTextureX(size); if (pd3dtexture) { return pd3dtexture; } m_mapDeviceTextures.Remove(pddsurface); } return NULL; } else { int id; return pddsurface->GetTextureX(pd3dd->GetTextureFormat(), size, id); } }
TextureFactoryIdentifier CompositorD3D11::GetTextureFactoryIdentifier() { TextureFactoryIdentifier ident; ident.mMaxTextureSize = GetMaxTextureSize(); ident.mParentProcessId = XRE_GetProcessType(); ident.mParentBackend = LayersBackend::LAYERS_D3D11; return ident; }
bool CompositorD3D11::CanUseCanvasLayerForSize(const gfx::IntSize& aSize) { int32_t maxTextureSize = GetMaxTextureSize(); if (aSize.width > maxTextureSize || aSize.height > maxTextureSize) { return false; } return true; }
TextureFactoryIdentifier BasicCompositor::GetTextureFactoryIdentifier() { TextureFactoryIdentifier ident(LayersBackend::LAYERS_BASIC, XRE_GetProcessType(), GetMaxTextureSize()); // All composition ops are supported in software. for (uint8_t op = 0; op < uint8_t(CompositionOp::OP_COUNT); op++) { ident.mSupportedBlendModes += CompositionOp(op); } return ident; }
TextureFactoryIdentifier CompositorD3D11::GetTextureFactoryIdentifier() { TextureFactoryIdentifier ident; ident.mMaxTextureSize = GetMaxTextureSize(); ident.mParentProcessId = XRE_GetProcessType(); ident.mParentBackend = LayersBackend::LAYERS_D3D11; if (mAttachments->mSyncTexture) { HRESULT hr = mAttachments->mSyncTexture->GetSharedHandle(&ident.mSyncHandle); if (FAILED(hr) || !ident.mSyncHandle) { gfxCriticalError() << "Failed to get SharedHandle for sync texture. Result: " << hr; MOZ_CRASH(); } } return ident; }
// return true if target size changed bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int framebuffer_height) { int newEFBWidth, newEFBHeight; newEFBWidth = newEFBHeight = 0; // TODO: Ugly. Clean up switch (s_last_efb_scale) { case SCALE_AUTO: case SCALE_AUTO_INTEGRAL: newEFBWidth = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH); newEFBHeight = FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT); if (s_last_efb_scale == SCALE_AUTO_INTEGRAL) { newEFBWidth = ((newEFBWidth-1) / EFB_WIDTH + 1) * EFB_WIDTH; newEFBHeight = ((newEFBHeight-1) / EFB_HEIGHT + 1) * EFB_HEIGHT; } efb_scale_numeratorX = newEFBWidth; efb_scale_denominatorX = EFB_WIDTH; efb_scale_numeratorY = newEFBHeight; efb_scale_denominatorY = EFB_HEIGHT; break; case SCALE_1X: efb_scale_numeratorX = efb_scale_numeratorY = 1; efb_scale_denominatorX = efb_scale_denominatorY = 1; break; case SCALE_1_5X: efb_scale_numeratorX = efb_scale_numeratorY = 3; efb_scale_denominatorX = efb_scale_denominatorY = 2; break; case SCALE_2X: efb_scale_numeratorX = efb_scale_numeratorY = 2; efb_scale_denominatorX = efb_scale_denominatorY = 1; break; case SCALE_2_5X: efb_scale_numeratorX = efb_scale_numeratorY = 5; efb_scale_denominatorX = efb_scale_denominatorY = 2; break; default: efb_scale_numeratorX = efb_scale_numeratorY = s_last_efb_scale - 3; efb_scale_denominatorX = efb_scale_denominatorY = 1; int maxSize; maxSize = GetMaxTextureSize(); if ((unsigned)maxSize < EFB_WIDTH * efb_scale_numeratorX / efb_scale_denominatorX) { efb_scale_numeratorX = efb_scale_numeratorY = (maxSize / EFB_WIDTH); efb_scale_denominatorX = efb_scale_denominatorY = 1; } break; } if (s_last_efb_scale > SCALE_AUTO_INTEGRAL) CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT, &newEFBWidth, &newEFBHeight); if (newEFBWidth != s_target_width || newEFBHeight != s_target_height) { s_target_width = newEFBWidth; s_target_height = newEFBHeight; return true; } return false; }
// return true if target size changed bool Renderer::CalculateTargetSize(int multiplier) { int newEFBWidth = 0; int newEFBHeight = 0; // TODO: Ugly. Clean up switch (s_last_efb_scale) { case SCALE_AUTO: case SCALE_AUTO_INTEGRAL: newEFBWidth = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH); newEFBHeight = FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT); if (s_last_efb_scale == SCALE_AUTO_INTEGRAL) { efb_scale_numeratorX = efb_scale_numeratorY = std::max((newEFBWidth - 1) / EFB_WIDTH + 1, (newEFBHeight - 1) / EFB_HEIGHT + 1); efb_scale_denominatorX = efb_scale_denominatorY = 1; newEFBWidth = EFBToScaledX(EFB_WIDTH); newEFBHeight = EFBToScaledY(EFB_HEIGHT); } else { efb_scale_numeratorX = newEFBWidth; efb_scale_denominatorX = EFB_WIDTH; efb_scale_numeratorY = newEFBHeight; efb_scale_denominatorY = EFB_HEIGHT; } break; case SCALE_1X: efb_scale_numeratorX = efb_scale_numeratorY = 1; efb_scale_denominatorX = efb_scale_denominatorY = 1; break; case SCALE_1_5X: efb_scale_numeratorX = efb_scale_numeratorY = 3; efb_scale_denominatorX = efb_scale_denominatorY = 2; break; case SCALE_2X: efb_scale_numeratorX = efb_scale_numeratorY = 2; efb_scale_denominatorX = efb_scale_denominatorY = 1; break; case SCALE_2_5X: // 2.5x efb_scale_numeratorX = efb_scale_numeratorY = 5; efb_scale_denominatorX = efb_scale_denominatorY = 2; break; default: efb_scale_numeratorX = efb_scale_numeratorY = s_last_efb_scale - 3; efb_scale_denominatorX = efb_scale_denominatorY = 1; break; } const u32 max_size = GetMaxTextureSize(); if (max_size < EFB_WIDTH * multiplier * efb_scale_numeratorX / efb_scale_denominatorX) { efb_scale_numeratorX = efb_scale_numeratorY = (max_size / (EFB_WIDTH * multiplier)); efb_scale_denominatorX = efb_scale_denominatorY = 1; } if (s_last_efb_scale > SCALE_AUTO_INTEGRAL) CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT, newEFBWidth, newEFBHeight); newEFBWidth *= multiplier; newEFBHeight *= multiplier; ssaa_multiplier = multiplier; if (newEFBWidth != s_target_width || newEFBHeight != s_target_height) { s_target_width = newEFBWidth; s_target_height = newEFBHeight; VertexShaderManager::SetViewportChanged(); GeometryShaderManager::SetViewportChanged(); PixelShaderManager::SetViewportChanged(); return true; } return false; }
DeviceVector2::DeviceVector2(unsigned int fSize) { Set2DMapWidth(GetMaxTextureSize()); Resize(fSize); }
DeviceVector2::DeviceVector2() { Set2DMapWidth(GetMaxTextureSize()); }
HostVector::HostVector() { size = 0; data = 0; Set2DMapWidth(GetMaxTextureSize()); }