Ejemplo n.º 1
0
HostVector::HostVector(unsigned int fSize)
{
	size = 0;
	data = 0;
	Set2DMapWidth(GetMaxTextureSize());
	Resize(fSize);
}
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
0
TextureFactoryIdentifier
CompositorD3D11::GetTextureFactoryIdentifier()
{
  TextureFactoryIdentifier ident;
  ident.mMaxTextureSize = GetMaxTextureSize();
  ident.mParentProcessId = XRE_GetProcessType();
  ident.mParentBackend = LayersBackend::LAYERS_D3D11;
  return ident;
}
Ejemplo n.º 4
0
bool
CompositorD3D11::CanUseCanvasLayerForSize(const gfx::IntSize& aSize)
{
  int32_t maxTextureSize = GetMaxTextureSize();

  if (aSize.width > maxTextureSize || aSize.height > maxTextureSize) {
    return false;
  }

  return true;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 7
0
// 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;
}
Ejemplo n.º 8
0
// 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;
}
Ejemplo n.º 9
0
DeviceVector2::DeviceVector2(unsigned int fSize)
{
	Set2DMapWidth(GetMaxTextureSize());
	Resize(fSize);
}
Ejemplo n.º 10
0
DeviceVector2::DeviceVector2()
{
	Set2DMapWidth(GetMaxTextureSize());
}
Ejemplo n.º 11
0
HostVector::HostVector()
{
	size = 0;
	data = 0;
	Set2DMapWidth(GetMaxTextureSize());
}