Поделиться через


Требования к оборудованию для многопланового наложения

Драйверы и оборудование дисплея не требуются для поддержки многоплановых наложений. Однако для обеспечения поддержки многопланового наложения оборудование должно соответствовать следующим требованиям:

  • Оборудование должно поддерживать неперекрывающихся плоскостей:
    • Одна плоскость может охватывать одну часть экрана, в то время как другая плоскость может охватывать другую, взаимоисключаемую часть экрана.
    • Если какая-либо часть экрана не покрыта плоскостью, оборудование должно отсканировать черный цвет для этой области. Оборудование может предполагать, что есть виртуальная плоскость в нижнем порядке z , заполненная черным цветом.
  • Оборудование должно поддерживать перекрывающиеся плоскости:
    • Оборудование должно иметь возможность включать или отключать альфа-наложение на уровне. (Альфа-смешивание — это метод, при котором цвет в исходном растровом рисунке сочетается с цветом в целевом растровом рисунке для создания нового растрового изображения назначения.)
    • Необходимо поддерживать смешивание между плоскостями с помощью предварительно умноженного альфа-канала.
  • Если активен только один целевой объект вывода, активные выходные данные должны поддерживать многоплановые наложения. В режиме клонирования, где одновременно активны несколько выходов, оборудование не должно сообщать о том, что оно поддерживает многоплановые наложения, если только все активные выходы не поддерживают многоплановые наложения.
  • Цепочка буферов диспетчера окон рабочего стола (DWM) (плоскость 0) должна иметь возможность взаимодействия с другими плоскостями наложения.
  • Все плоскости должны быть включены и отключены, включая плоскость 0 (цепочка буферов DWM).
  • Все плоскости должны поддерживать отсечение источника и назначения, включая плоскость 0 (своп-цепочку DWM).
  • По крайней мере одна плоскость должна поддерживать сжатие и растягивание независимо от других плоскостей, которые могут быть включены.
  • Плоскости, поддерживающие масштабирование, должны поддерживать как билинейную фильтрацию, так и качество фильтрации, которое лучше, чем билинейное.
  • По крайней мере одна плоскость должна поддерживать эти форматы YUV (дополнительные сведения см. в разделе Диапазоны форматов YUV в Windows 8.1):
    • Преобразование матрицы ITU BT.601 и BT.709 YUV в RGB для форматов YUV.
    • Как обычный (или студийный) яркость YUV (16–235) и яркость YUV в расширенном диапазоне (0–255).
  • Оборудование должно обрабатывать следующие сценарии блокировки регистра:
    • Все атрибуты на уровне (адрес буфера, обрезка, масштабирование и т. д.) должны атомарно размещаться в течение периода вертикального отката. При обновлении блока регистров все они должны быть пост атомарным образом. Например, если VSync возникает после записи 10 из 20 регистров, относящихся к плоскости наложения, ни один из них не будет публиковаться до следующей виртуальной синхронизации, так как они не могут выполнить запись в текущей виртуальной синхронизации).
    • Каждая плоскость может обновляться независимо от других плоскостей. Например, если регистры плоскости 0 были обновлены до VSync, а затем регистры плоскости 1 обновляются при возникновении VSync, обновление уровня 1 может ждать до следующей виртуальной синхронизации, но обновление плоскости 0 должно происходить вовремя.
    • При обновлении нескольких плоскостей во время одного текущего вызова обновления должны происходить атомарным образом. Например, если один вызов обновляет плоскость 0 и включает плоскость 1, регистры плоскости 0 не должны размещаться в VSync, если только плоскость 1 не регистрируется в той же виртуальной синхронизации.
  • Преобразование, масштабирование и смешивание должны выполняться в следующем порядке:
    1. Выделение исходного кода обрезается в соответствии с указанным исходным прямоугольником. Прямоугольник источника гарантированно будет ограничен размером исходного выделения.

    2. При необходимости примените горизонтальный отверток изображения, а затем — вертикальный.

    3. Примените масштабирование в соответствии с целевым прямоугольником, примените обрезку в соответствии с прямоугольником клипа и примените соответствующую фильтрацию при масштабировании.

    4. Смешивание с выделениями на других уровнях. Смешивание должно выполняться сверху вниз (или до попадания непрозрачного слоя) в z-порядке. Если запрашивается альфа-наложение, оборудование должно учитывать значение альфа-пикселя, а значение цвета предварительно умножается на альфа. Следующий псевдокод выполняет операцию источника над назначением несколько раз сверху вниз, (((Layer[0] over Layer[1]) over Layer[2]) over Layer[2]) over Layer[n]). За пределами целевого прямоугольника каждый слой должен рассматриваться как прозрачный (0,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;
      

      Оборудование может смешиваться снизу вверх, если выходные результаты одинаковы. В этом случае следует использовать следующий алгоритм смешения:

      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. Черный цвет должен отображаться в области, где не покрыта ни одной из целевых прямоугольников из каких-либо слоев. Оборудование может предполагать, что существует концептуальный виртуальный нижний черный слой, который является размером экрана.