D3D10DDI_QUERY enumeração (d3d10umddi.h)
O tipo de enumeração D3D10DDI_QUERY contém valores que identificam um tipo de consulta.
Syntax
typedef enum D3D10DDI_QUERY {
D3D10DDI_QUERY_EVENT,
D3D10DDI_QUERY_OCCLUSION,
D3D10DDI_QUERY_TIMESTAMP,
D3D10DDI_QUERY_TIMESTAMPDISJOINT,
D3D10DDI_QUERY_PIPELINESTATS,
D3D10DDI_QUERY_OCCLUSIONPREDICATE,
D3D10DDI_QUERY_STREAMOUTPUTSTATS,
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE,
D3D11DDI_QUERY_PIPELINESTATS,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3,
D3D10DDI_COUNTER_GPU_IDLE,
D3D10DDI_COUNTER_VERTEX_PROCESSING,
D3D10DDI_COUNTER_GEOMETRY_PROCESSING,
D3D10DDI_COUNTER_PIXEL_PROCESSING,
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING,
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE,
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
} ;
Constantes
D3D10DDI_QUERY_EVENT Esse tipo de consulta fornece um primitivo de sincronização que muitos dos seguintes tipos de consulta imitam para lidar com a natureza assíncrona da GPU (unidade de processamento gráfico). Um D3D10DDI_QUERY_EVENT emitido torna-se sinalizado depois que a GPU é concluída com todos os comandos emitidos anteriormente, geralmente do back-end do pipeline de gráficos. Os dados que o driver associa a esse tipo de consulta são um BOOL. No entanto, o valor BOOL é redundante porque sempre que uma consulta D3D10DDI_QUERY_EVENT é sinalizada, o valor do BOOL é sempre TRUE. O driver sempre deve enviar de volta o valor de dados BOOL de TRUE ao sinalizar o D3D10DDI_QUERY_EVENT. |
D3D10DDI_QUERY_OCCLUSION Os dados estatísticos que o driver associa a esse tipo de consulta são um UINT64. Esses dados estatísticos contêm o número de várias estâples que passaram por testes de profundidade e estêncil, também conhecidos como multisamplas "visíveis", para todos os primitivos desde a criação do contexto do dispositivo. Se o destino de renderização não for multisampled, o contador será incrementado pelo número de pixels inteiros visíveis. O contador deve ser encapsulado quando estourar. OBSERVAÇÃO O runtime do Direct3D pode chamar a função QueryGetData do driver a qualquer momento para solicitar esses dados estatísticos. Portanto, ele deve ser calculado continuamente com precisão. |
D3D10DDI_QUERY_TIMESTAMP Os dados que o driver associa a esse tipo de consulta são um UINT64. O tipo de consulta TIMESTAMP é usado de forma semelhante ao tipo de consulta D3D10DDI_QUERY_EVENT porque o tipo de consulta TIMESTAMP também fornece um tipo de primitivo de sincronização. Como D3D10DDI_QUERY_EVENT, TIMESTAMP deve ser sinalizado quando a GPU for concluída com todos os comandos emitidos anteriormente. No entanto, TIMESTAMP difere de D3D10DDI_QUERY_EVENT retornando um valor de carimbo de data/hora de 64 bits. Esse valor de carimbo de data/hora de 64 bits deve ser amostrado de um contador de GPU, que incrementa em uma frequência consistente. O valor do carimbo de data/hora deve ser amostrado no instante em que a GPU for concluída com todos os comandos emitidos anteriormente. A GPU não é necessária para garantir que todos os caches sejam liberados para a memória para determinar se o trabalho está concluído. Isso é para que atender a vários tipos de consulta TIMESTAMP de alta frequência não perturbe fortemente o pipeline. No entanto, a CPU deve monitorar a ordenação de gravação de memória bem definida entre si e a GPU, especialmente quando há suporte para D3D10DDI_QUERY_EVENT. Se a CPU determinasse que a GPU escreveu um determinado valor (especialmente um valor de cerca), a CPU determinaria que todas as gravações de memória anteriores que foram emitidas antes da gravação da cerca devem ser liberadas para a memória e podem ser vistas imediatamente pela CPU. O tipo de liberação que pode ser necessário para obter dados de caches de GPU e para a memória acessível da CPU não deve ser feito a cada TIMESTAMP, mas provavelmente mais no final de cada buffer de comando. A frequência do contador de carimbo de data/hora é fornecida no contexto de um tipo de consulta D3D10DDI_QUERY_TIMESTAMPDISJOINT. A frequência desse contador deve ser maior que 10 MHz e resistente à limitação dinâmica de alta frequência da GPU. O contador de carimbo de data/hora deve ser global. Portanto, o contador de carimbo de data/hora não é necessário para levar em conta o corte de tempo de GPU dos contextos. O valor inicial do contador de carimbo de data/hora não é especificado. Portanto, o valor absoluto do contador de carimbo de data/hora geralmente não tem sentido por si só. No entanto, o valor relativo gerado a partir da diferença de dois valores absolutos quantifica uma quantidade decorrido de tempo. A diferença de dois valores de carimbo de data/hora só é precisa quando as duas consultas TIMESTAMP são entre colchetes dentro de um intervalo de D3D10DDI_QUERY_TIMESTAMPDISJOINT e quando o valor query-disjoint da consulta D3D10DDI_QUERY_TIMESTAMPDISJOINT retorna FALSE. |
D3D10DDI_QUERY_TIMESTAMPDISJOINT Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT . TIMESTAMPDISJOINT permite que um aplicativo defina um colchete para não apenas solicitar a frequência do relógio TIMESTAMP, mas também para detectar se essa frequência era consistente em todo o intervalo entre colchetes de comandos gráficos. O membro disjoint de D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT contém um valor BOOL que indica quando algo fez com que o contador de carimbo de data/hora se tornasse descontinuado ou desarticulado. Alguns exemplos de eventos que devem disparar TIMESTAMPDISJOINT são uma redução, limitação para cima e para baixo devido a eventos de economia de energia do laptop, um cabo AC desconectado e superaquecimento. Essas ocorrências de evento devem ser raras o suficiente durante um estado de execução de aplicativo gráfico constante a ser evitado controlando o ambiente de execução do sistema. Observe que, se esses eventos ocorrerem, eles reduzirão efetivamente a utilidade da funcionalidade TIMESTAMP. Consultas TIMESTAMP após um evento que dispararia uma consulta TIMESTAMPDISJOINT não devem ser significativas em comparação com as consultas TIMESTAMP anteriores a esse evento. O valor BOOL no membro Disjoint será TRUE se os valores das consultas TIMESTAMP não puderem ser contínuos durante toda a duração da consulta TIMESTAMPDISJOINT. Caso contrário, Disjoint deve ser FALSE. O valor do membro Frequency de D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT deve ser igual à frequência do relógio TIMESTAMP. Além disso, as notificações desses eventos de limitação são úteis para monitoramento de desempenho, regressão e ferramentas de investigação, supondo que as notificações resultem em diferenças de desempenho na execução do aplicativo. |
D3D10DDI_QUERY_PIPELINESTATS Consulte Comentários para obter detalhes. |
D3D10DDI_QUERY_OCCLUSIONPREDICATE Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse predicado espelha a especificação da consulta OCCLUSION. Se a consulta OCCLUSION para o mesmo intervalo entre colchetes retornar 0, o predicado OCCLUSION retornará FALSE. Caso contrário, o predicado OCCLUSION retornará TRUE, o que indica que pelo menos uma multisampla está visível. Se o predicado tiver sido indicado como uma dica versus garantido, nenhum resultado será propagado de volta para o aplicativo. Esse tipo de consulta é um predicado e pode ser usado para predicado de comandos de renderização. |
D3D10DDI_QUERY_STREAMOUTPUTSTATS Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_SO_STATISTICS . Essa estrutura contém estatísticas para monitorar a quantidade de dados que são transmitidos no estágio de saída de fluxo do pipeline. Essas estatísticas contam apenas primitivos completos (por exemplo, pontos, linhas e triângulos) que são transmitidos para fora. Se o tipo primitivo for alterado (por exemplo, linhas para triângulos), a contagem não será ajustada de forma alguma. Ou seja, a contagem é sempre primitiva total, independentemente do tipo. OBSERVAÇÃO O runtime do Direct3D pode chamar a função QueryGetData do driver a qualquer momento para solicitar essas estatísticas. Portanto, ele deve ser calculado continuamente com precisão. |
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse BOOL será TRUE se qualquer saída de fluxo tiver estourada. Se duas consultas D3D10DDI_QUERY_STREAMOUTPUTSTATS fossem usadas para monitorar simultaneamente o mesmo intervalo entre colchetes que um tipo de predicado STREAMOVERFLOWPREDICATE, a diferença nos valores nos membros PrimitivesStorageNeeded de D3D10_DDI_QUERY_DATA_SO_STATISTICS teria resultado em uma diferença maior do que a diferença nos valores nos membros NumPrimitivesWritten . O STREAMOVERFLOWPREDICATE não dá suporte à capacidade de ser usado como uma dica. Portanto, o tipo de predicado deve ser garantido. Essa consulta é um predicado e pode ser usada para predicar comandos de renderização, o que impede que um quadro indesejado seja mostrado ao aplicativo. No caso de streaming para vários buffers simultaneamente, assim que qualquer um deles estourar, a saída do fluxo gravará stop para todos os buffers e os dados de STREAMOVERFLOWPREDICATE se tornarão TRUE. |
D3D11DDI_QUERY_PIPELINESTATS Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS. Essa estrutura contém estatísticas para cada estágio do pipeline de gráficos. Esse tipo de consulta é o mesmo que o tipo de consulta D3D11DDI_QUERY_PIPELINESTATS, exceto D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS adiciona membros HSInvocations e DSInvocations para sombreadores de casco e domínio. |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse BOOL será TRUE se a saída do fluxo 0 estourar. Se duas consultas D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 fossem usadas para monitorar simultaneamente o mesmo intervalo entre colchetes que um tipo de predicado STREAMOVERFLOWPREDICATE_STREAM0, a diferença nos valores nos membros PrimitivesStorageNeeded do D3D10_DDI_QUERY_DATA_SO_STATISTICS teria resultado em uma diferença maior do que a diferença nos valores nos membros NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse BOOL será TRUE se a saída do fluxo 1 tiver estourada. Se duas consultas D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 fossem usadas para monitorar simultaneamente o mesmo intervalo entre colchetes que um tipo de predicado STREAMOVERFLOWPREDICATE_STREAM1, a diferença nos valores nos membros PrimitivesStorageNeeded do D3D10_DDI_QUERY_DATA_SO_STATISTICS teria resultado em uma diferença maior do que a diferença nos valores nos membros NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse BOOL será TRUE se a saída do fluxo 2 tiver estourada. Se duas consultas D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 fossem usadas para monitorar simultaneamente o mesmo intervalo entre colchetes que um tipo de predicado STREAMOVERFLOWPREDICATE_STREAM2, a diferença nos valores nos membros PrimitivesStorageNeeded de D3D10_DDI_QUERY_DATA_SO_STATISTICS teria resultado em uma diferença maior do que a diferença nos valores nos membros NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3 Com suporte no Windows 7 e versões posteriores. Os dados que o driver associa a esse tipo de consulta são um BOOL. Esse BOOL será TRUE se a saída do fluxo 3 tiver estourada. Se duas consultas D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 fossem usadas para monitorar simultaneamente o mesmo intervalo entre colchetes que um tipo de predicado STREAMOVERFLOWPREDICATE_STREAM3, a diferença nos valores nos membros PrimitivesStorageNeeded de D3D10_DDI_QUERY_DATA_SO_STATISTICS teria resultado em uma diferença maior do que a diferença nos valores nos membros NumPrimitivesWritten . |
D3D10DDI_COUNTER_GPU_IDLE Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna o percentual de tempo ocioso da GPU. |
D3D10DDI_COUNTER_VERTEX_PROCESSING Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo em que o sombreador de vértice está ocupado processando dados. |
D3D10DDI_COUNTER_GEOMETRY_PROCESSING Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo em que o sombreador de geometria está ocupado processando dados. |
D3D10DDI_COUNTER_PIXEL_PROCESSING Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo em que o sombreador de pixel está ocupado processando dados. |
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo em que as operações de GPU, além de operações de vértice, geometria e sombreador de pixel, estão ocupadas processando dados. |
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de um máximo teórico de utilização da largura de banda do adaptador. |
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de um máximo teórico de utilização de largura de banda de memória de vídeo. |
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de um máximo teórico de utilização da taxa de transferência de vértice. |
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de um máximo teórico de utilização da taxa de transferência de configuração de triângulo. |
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna o percentual de um máximo teórico de utilização da taxa de transferência de taxa de preenchimento. |
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de vértice aguarda que a memória execute leituras ou gravações de dados (em comparação com o percentual de tempo que o sombreador de vértice calcula matemática). |
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de vértice calcula matemática (em comparação com a porcentagem de tempo que o sombreador de vértice aguarda a memória executar leituras ou gravações de dados). |
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de geometria aguarda que a memória execute leituras ou gravações de dados (em comparação com o percentual de tempo que o sombreador de geometria calcula matemática). |
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de geometria calcula matemática (em comparação com a porcentagem de tempo que o sombreador de geometria aguarda a memória executar leituras ou gravações de dados). |
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de pixel espera que a memória execute leituras ou gravações de dados (em comparação com a porcentagem de tempo que o sombreador de pixel calcula matemática). |
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de tempo que o sombreador de pixel calcula matemática (em comparação com a porcentagem de tempo que o sombreador de pixel espera que a memória execute leituras ou gravações de dados). |
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de vértices que o sombreador de geometria ou sombreador de pixel recuperou de um cache de vértices que já foram transformados pelo sombreador de vértice. Um cache de vértices transformados (ou seja, vértices em que o sombreador de vértice foi executado) existe imediatamente após o sombreador de vértice. Esses vértices podem ser usados pelo sombreador de geometria ou pelo sombreador de pixel. Uma taxa de ocorrências de 100% (resultado de uma consulta D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE) indica que cada vértice necessário para o sombreador de geometria ou sombreador de pixel já foi transformado. Enquanto uma taxa de ocorrências de 0% indica que cada vértice exigiu processamento pelo sombreador de vértice antes de ser usado. O driver pode reestruturar algoritmos e dados para aumentar as taxas de ocorrências no cache. |
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE Os dados que o driver associa a esse tipo de contador de consulta são um FLOAT32. O driver retorna a porcentagem de texels ou memória de textura que um sombreador recuperou de um cache de texels que já foram recuperados da memória de vídeo. Um cache de memória de textura pode existir entre a exibição de recursos do sombreador ou, possivelmente, o buffer e os sombreadores constantes. Uma taxa de ocorrências de 100% indica que cada texel necessário para um sombreador já estava disponível no cache. Enquanto uma taxa de ocorrências de 0% indica que cada texel exigia a recuperação de dados da memória de vídeo. O driver pode reestruturar algoritmos e dados para aumentar as taxas de ocorrências no cache. |
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0 O primeiro contador de consulta dependente do dispositivo disponível. Os fornecedores de hardware podem usar esse valor e qualquer valor de 32 bits acima 0x40000000 para um contador de consulta para seus dispositivos. |
Comentários
Os valores de D3D10DDI_COUNTER_VERTEX_PROCESSING, D3D10DDI_COUNTER_GEOMETRY_PROCESSING, D3D10DDI_COUNTER_PIXEL_PROCESSING e D3D10DDI_COUNTER_OTHER_GPU_PROCESSING podem somar um valor definido pelo driver, que é o número de unidades paralelas detectáveis. Esse número é publicado pelo driver como parte dos recursos do adaptador gráfico. O número de unidades paralelas detectáveis pode ser 1, 2, 3 ou 4, dependendo dos detalhes da arquitetura de hardware, da capacidade dos contadores de desempenho de discernir onde o tempo está sendo gasto ou a critério total do fornecedor de hardware. Para arquiteturas que relatam o número de unidades paralelas detectáveis igual a 1 (== 1) no membro NumDetectableParallelUnits da estrutura D3D10DDI_COUNTER_INFO em resposta a uma chamada para a função CheckCounterInfo , a seguinte equação se aplica:
(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1,0 - D3D10DDI_COUNTER_GPU_IDLE
O monitoramento de todos esses identificadores de contador (juntamente com D3D10DDI_COUNTER_GPU_IDLE) ainda deve estar em conformidade com as regras de contadores ativos simultaneamente.
Para arquiteturas que relatam o número de unidades paralelas detectáveis não igual a 1 (!= 1), a interação entre cada métrica ocupada é mais complexa. Por exemplo, com o número de unidades paralelas detectáveis igual a 4 (== 4), D3D10DDI_COUNTER_VERTEX_PROCESSING e D3D10DDI_COUNTER_PIXEL_PROCESSING são iguais a .25 (== .25), enquanto o restante das métricas ocupadas é igual a 0 (== 0). D3D10DDI_COUNTER_GPU_IDLE pode resultar entre 0,5 e 0,75, dependendo da sobreposição real dessas unidades paralelas obtidas.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION, D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION e D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION todos relatam uma porcentagem de um gargalo que pode ser usado. Os aplicativos podem determinar quando um determinado máximo teórico está sendo enfatizado para que eles possam determinar como contornar o gargalo.
Detalhes do valor de D3D10DDI_QUERY_PIPELINESTATS
Os dados que o driver associa a esse tipo de consulta são uma estrutura D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS , que contém estatísticas para cada estágio do pipeline gráfico. Para cada estágio, o valor do número de invocações deve ficar entre o cache infinito e nenhum cache. O cortador parecerá se comportar como o sombreador de geometria (GS). O clipper será executado para cada triângulo. Para cada invocação, zero primitivos serão gerados se o triângulo original for totalmente recortado, um primitivo será gerado se o triângulo original não for recortado (ou o recorte resultar em apenas um triângulo), dois primitivos serão gerados se o triângulo original for recortado e resultar em dois triângulos e assim por diante. Em configurações típicas do pipeline, o valor no membro GSPrimitives de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS seria igual ao valor no membro CInvocations . Se a rasterização estiver desabilitada e o pipeline estiver configurado para enviar apenas primitivos para a saída de fluxo, o valor em GSPrimitives desviará do valor em CInvocations porque CInvocations não seria incrementado. As estatísticas de recorte serão flexíveis em relação às implementações de banda de proteção. Portanto, ao renderizar triângulos que se estendem além do visor, os testes garantirão que o recorte fique entre um intervalo de valores (números que pressupõem uma faixa de proteção infinita e números que pressupõem um retângulo de recorte apertado ao redor do visor). Todos os valores contêm o número de eventos desde a criação do contexto do dispositivo. Observe que essas estatísticas podem ser solicitadas a qualquer momento, portanto, elas devem ser calculadas continuamente com precisão.
Somente a diferença entre duas solicitações de estatística independente fornecerá informações significativas. O driver deve calcular a diferença entre os dados de estatística que recebe quando ocorre uma chamada para sua função QueryBegin e os dados estatísticos que recebe quando ocorre uma chamada para sua função QueryEnd .
Veja a seguir exemplos da interação entre os valores nos membros IAVertices, IAPrimitives e VSInvocations de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS em relação ao cache do VS (sombreador de vértice).
Cenário | Valor válido de IAVertices | Valor válido de IAPrimitives | Valor válido do VSInvocations |
---|---|---|---|
Desenhar faixa de triângulo indexado de 4 primitivos (com todos os índices com o mesmo valor) | 6 | 4 | 1--12 |
Desenhar lista de triângulos indexados de 4 primitivos (com todos os índices com o mesmo valor) | 12 | 4 | 1--12 |
Desenhar faixa de triângulo de 4 primitivos | 6 | 4 | 6--12 |
Desenhar lista de triângulos de 4 primitivos | 12 | 4 | 6--12 |
Primitivos parciais terão permissão para se enquadrar no intervalo de valores, semelhante à maneira como o cache de vértice se comporta. Portanto, quando primitivos parciais são possíveis, as estatísticas devem ficar entre um pipeline que os corta o mais rápido possível (antes mesmo que o assembler de entrada (IA) os conte) ou o mais tarde possível (pós-cortador e sombreador pré-pixel (PS)). Stream saída e um NULL GS são flexíveis quanto a se realmente fazem com que as invocações de GS ocorram.
Com relação ao valor no membro PSInvocations de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS, as otimizações de profundidade e estêncil iniciais podem ou não impedir que o trabalho do sombreador de pixel seja realizado. Portanto, quando os pixels falham em um teste de profundidade, o valor em PSInvocations pode ou não ser incrementado dependendo de onde o teste de profundidade realmente ocorre no pipeline. Se o sombreador de pixel gerar profundidade, o valor em PSInvocations deverá ser incrementado conforme o esperado, mesmo que a profundidade de saída falhe. O exemplo a seguir mostra como o valor em PSInvocations será testado.
Considere o DSP (número de pixels que passam nos testes de profundidade e estêncil) e DSF (número de pixels que falham nas quantidades de teste de profundidade ou estêncil). O DSP é aproximadamente equivalente à consulta OCCLUSION, exceto que OCCLUSION mede várias amostras (não pixels). Em todos os casos, DSP <= o valor em PSInvocations<= ( DSP + DSF ). Quando o sombreador de pixel gera profundidade, o valor em PSInvocations é a soma de DSP e DSF. Além disso, quando um sombreador de pixel NULL é associado ao pipeline, o valor em PSInvocations não é incrementado.
Com relação aos valores em IAVertices e VSInvocations, o processamento de vértice adjacente poderá ser otimizado se o GS não declarar os vértices de adjacência como entradas para o GS. Portanto, quando o GS não declara vértices adjacentes como entradas, os valores em IAVertices e VSInvocations podem ou não refletir o trabalho implícito pelos vértices adjacentes. Se o GS declarar vértices adjacentes, o valor em IAVertices deverá incluir os vértices adjacentes (sem considerar nenhum cache pós-VS) e o valor em VSInvocations deverá incluir os vértices adjacentes (juntamente com quaisquer efeitos do cache pós-VS).
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows. |
Cabeçalho | d3d10umddi.h (inclua D3d10umddi.h) |
Confira também
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS