- Pipeline gráfico
- Terminologia para compressão de cor
- O bloco de cor
- Compressão de cor
- Esquema de compressão de cor
- Antialiasing de qualidade aprimorada (EQAA)
- Compatibilidade de recursos
- APIs para compressão de cor
- Desempenho e depuração
Pipeline gráfico
O diagrama a seguir mostra o pipeline gráfico lógico. Os blocos de profundidade e de cor são as duas últimas operações lógicas antes da saída de renderização.
Terminologia para compressão de cor
Veja a seguir termos comuns usados ao descrever sistemas de compressão.O bloco de cor
O bloco de cor é responsável por transferir para a memória os dados de cor gerados pelo sombreador de pixel. Esse processo inclui o gerenciamento da compressão MSAA, da mesclagem de cores, da formatação de cores, da ROP e da gravação na memória. O bloco de cor permite que a cor de saída do sombreador para um pixel (cor de origem, CS) seja combinada com a cor atual no destino de renderização para esse pixel (cor de destino, CD) usando fatores de mesclagem (BF(S,D)) e uma função de combinação especificada. A equação geral para essa mesclagem é conhecida como equação de mesclagem.- Um modo de mesclagem especial chamado mesclagem de origem dupla. Embora a maioria dos fatores de mesclagem seja uma função da cor de origem, da cor de destino ou da cor constante de mesclagem, a mesclagem de origem dupla usa uma segunda cor de saída do sombreador (atribuída a MRT1) como fatores de mesclagem. A cor de origem na equação de mesclagem é obtida de MRT0.
- MSAA 2x, 4x e 8x. Há vários recursos específicos de MSAA no bloco de cor, como um resolve por hardware de qualquer superfície mesclável usando um filtro de caixa (calculando a média das subamostras de um pixel para obter a cor final do pixel) e a compressão de cor (descrita na seção a seguir).
- Um buffer de quadros com correção de gama usando o formato 8_8_8_8 sRGB.
- Limpeza rápida da superfície de cor. Isso é feito limpando apenas os bits de CMask associados a cada bloco na superfície. À medida que quads são desenhados em blocos com limpeza rápida, o bloco de cor tem um hardware especial para preencher posteriormente as partes dos blocos que não foram tocadas.
- O cache de CMask gerencia as informações de compressão em nível de bloco.
- O cache de FMask gerencia as informações de compressão em nível de quad.
- O cache de cor e o mesclador executam as atualizações de pixels.
Compressão de cor
O antialiasing de várias amostras (MSAA) é um método para reduzir artefatos visuais causados pela resolução limitada dos pixels. No MSAA, o valor final de cada pixel é determinado por 2, 4 ou 8 amostras de cor coletadas dentro do pixel. Cada uma dessas amostras recebe a mesma cor do sombreador de pixel, mas cada amostra passa por teste de profundidade separadamente. Isso resulta em detalhes mais refinados nas bordas da geometria. Pixels com várias amostras têm requisitos de memória e processamento maiores do que pixels de amostra única, e é por isso que um esquema de compressão de cor é implementado. A compressão de cor é um esquema sem perdas, por pixel, cujo objetivo é economizar largura de banda de memória e minimizar a quantidade de ciclos de clock necessários para operar em um pixel com várias amostras. No 8xMSAA (8 amostras por pixel), cada pixel requer potencialmente 8x a largura de banda de memória e 8x o poder de processamento de um pixel simples de amostra única. Normalmente, as amostras de um pixel são muito redundantes, contendo apenas um ou dois valores de cor exclusivos. Raramente todas as amostras de um pixel 8xMSAA têm 8 valores exclusivos. Uma alta disparidade nas amostras não é impossível. Ela pode ocorrer em uma cena com geometria finamente tesselada, ou pode acontecer simplesmente por acaso. O objetivo do esquema de compressão é aproveitar a redundância de amostras em uma cena típica.Esquema de compressão de cor
Para comprimir um pixel MSAA, a redundância é aproveitada armazenando cada cor exclusiva apenas uma vez. Por exemplo, no 8xMSAA, as 8 amostras podem ter as cores mostradas na tabela a seguir. Há apenas três cores exclusivas, mas atualmente elas ocupam o espaço de 8.


Antialiasing de qualidade aprimorada (EQAA)
O antialiasing de qualidade aprimorada (EQAA) é uma compressão com perdas para antialiasing. É uma extensão do algoritmo de compressão de cor sem perdas. O armazenamento de cores é reduzido de modo que não há armazenamento suficiente para ter uma cor exclusiva por amostra. Na maioria das vezes, um pixel tem apenas um pequeno número de cores exclusivas. A FMask pode mapeá-las para cobrir o pixel inteiro. Para EQAA, o bloco de cor oferece suporte a até 16 amostras. O bloco de cor não oferece suporte a 16 amostras para MSAA normal devido ao volume excessivo de memória. O bloco de cor não tenta adivinhar nem interpolar cores. Quando não consegue determinar qual deve ser uma cor ou não pode armazená-la, o bloco de cor marca a amostra correspondente como desconhecida na FMask. A renderização para EQAA acontece normalmente como no MSAA, mas está sujeita à limitação de que apenas um determinado número de amostras está correto. Há um limite para o número de amostras por superfície.Compatibilidade de recursos
A tabela a seguir mostra as combinações de operações permitidas no bloco de cor.
