Compartir a través de


Requisitos de hardware de superposición multiplano

Los controladores de pantalla y el hardware no son necesarios para admitir superposiciones multiplano. Sin embargo, para proporcionar compatibilidad con la superposición multiplano, el hardware debe cumplir estos requisitos:

  • El hardware debe admitir planos no superpuestos:
    • Un plano puede cubrir una parte de la pantalla, mientras que otro plano puede cubrir una parte diferente, mutuamente excluyente, de la pantalla.
    • Si alguna parte de la pantalla no está cubierta por un plano, el hardware debe examinar el color negro para esa área. El hardware puede suponer que hay un plano virtual en el orden z inferior que está lleno de negro.
  • El hardware debe admitir planos superpuestos:
    • El hardware debe poder habilitar o deshabilitar la combinación alfa por plano. (La combinación alfa es una técnica en la que el color de un mapa de bits de origen se combina con eso en un mapa de bits de destino para generar un nuevo mapa de bits de destino).
    • Se debe admitir la combinación entre los planos mediante alfa multiplicado previamente.
  • Cuando solo hay un destino de salida activo, la salida activa debe admitir superposiciones multiplano. En el caso del modo de clonación, donde varias salidas están activas simultáneamente, el hardware no debe informar de que admite superposiciones multiplano a menos que todas las salidas activas admitan superposiciones multiplano.
  • La cadena de intercambio (plano 0) del Administrador de ventanas de escritorio (DWM) debe poder interactuar con los demás planos de superposición.
  • Todos los planos deben poder habilitarse y deshabilitarse, incluido el plano 0 (la cadena de intercambio de DWM).
  • Todos los planos deben admitir el recorte de origen y destino, incluido el plano 0 (la cadena de intercambio de DWM).
  • Al menos un plano debe admitir la reducción y el ajuste, independientemente de otros planos que se puedan habilitar.
  • Los planos que admiten el escalado deben admitir el filtrado bilineal y la calidad de filtrado que es mejor que bilinear.
  • Al menos un plano debe admitir estos formatos YUV (para obtener más información, consulte Intervalos de formato YUV en Windows 8.1):
    • Tanto UIT BT.601 como BT.709 YUV a conversión de matriz RGB para formatos YUV.
    • Tanto la luminancia YUV de rango normal (o estudio) (16 - 235) y la luminancia YUV de rango extendido (0 - 255).
  • El hardware debe controlar estos escenarios de bloqueo temporal de registro:
    • Todos los atributos por plano (dirección del búfer, recorte, escalado, etc.) deben publicarse atómicamente durante el período de retroceso vertical. Al actualizar un bloque de registros, todos deben publicarse atómicamente; por ejemplo, si la VSync se produce después de escribir 10 de 20 registros pertenecientes al plano de superposición, ninguno de ellos publicará hasta la siguiente VSync porque no pueden publicar todos en la Vsync actual.
    • Cada plano se puede actualizar independientemente de los demás planos. Por ejemplo, si los registros del plano 0 se han actualizado antes de la VSync y versiones posteriores, los registros del plano 1 se actualizan cuando se produce la VSync, es posible que las actualizaciones del plano 1 esperen hasta la siguiente VSync, pero las actualizaciones del plano 0 deben producirse a tiempo.
    • Cuando se actualizan varios planos durante una única llamada presente, las actualizaciones deben producirse de forma atómica. Por ejemplo, si una sola llamada presente está actualizando el plano 0 y habilitando el plano 1, los registros del plano 0 no deben publicarse en la VSync a menos que el plano 1 se registre también en la misma VSync.
  • La transformación, el escalado y la combinación deben producirse en este orden:
    1. La asignación de origen se recorta según el rectángulo de origen especificado. Se garantiza que el rectángulo de origen se enlaza dentro del tamaño de la asignación de origen.

    2. Aplique un volteo de imagen horizontal y, a continuación, se voltee una imagen vertical si se solicita.

    3. Aplique el escalado según el rectángulo de destino, aplique el recorte según el rectángulo de recorte y aplique el filtrado adecuado al escalar.

    4. Combinar con asignaciones en otras capas. La mezcla debe realizarse de arriba a abajo (o hasta que se alcance una capa opaca) en orden z. Si se solicita la combinación alfa, el hardware debe respetar el valor alfa por píxel y el valor de color se multiplica previamente por alfa. El pseudocódigo siguiente realiza una operación de origen sobre destino repetidamente de arriba abajo(((Layer[0] over Layer[1]) over Layer[2]) over ]: Layer[n]). Fuera del rectángulo de destino, cada capa debe tratarse como transparente (0,0,0,0).

      Color = Color[0]; // Layer 0 is topmost.
      Alpha = Color[0].Alpha;
      for (i = 1; Alpha < 1 && i < LayersToBlend; i++)
      {
          Color += ((1 - Alpha) * Color[i]);
          Alpha += ((1 - Alpha) * Color[i].Alpha);
      }
      Output Color;
      

      El hardware puede combinarse de abajo a arriba siempre que el resultado de la salida sea el mismo. En este caso, se debe usar el siguiente algoritmo de mezcla:

      Color = Color[LayersToBlend-1];  // Bottom-most layer
      Alpha = Color[LayersToBlend-1].Alpha;
      if (LayersToBlend > 1)
      {
          for (i = LayersToBlend - 2; Alpha < 1 && i >= 0; i--)
          {
              Color = Color[i] + ((1 - Color[i].Alpha) * Color;
              Alpha = Color[i].Alpha + (1 - Color[i].Alpha) * Alpha;
          }
      }
      Output Color;
      
    5. El color negro debe mostrarse en el área en la que no esté cubierto por ninguno de los rectángulos de destino de ninguna capa. El hardware puede suponer que hay una capa virtual virtual más negra conceptual que es el tamaño de la pantalla.