Перечисление D3D10DDI_QUERY (d3d10umddi.h)

Тип перечисления D3D10DDI_QUERY содержит значения, определяющие тип запроса.

Синтаксис

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
} ;

Константы

 
D3D10DDI_QUERY_EVENT
Этот тип запроса предоставляет примитив синхронизации, который многие из следующих типов запросов имитируют для работы с асинхронной природой графического процессора (GPU). Выданное D3D10DDI_QUERY_EVENT получает сигнал после завершения работы GPU со всеми ранее выданными командами, как правило, из серверной части графического конвейера. Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Однако значение BOOL является избыточным, так как при каждом D3D10DDI_QUERY_EVENT запросе значение BOOL всегда имеет значение TRUE. Драйвер всегда должен отправлять обратно значение данных BOOL , равное TRUE , при сигнале D3D10DDI_QUERY_EVENT.
D3D10DDI_QUERY_OCCLUSION
Статистические данные, которые драйвер связывает с этим типом запроса, являются UINT64. Эти статистические данные содержат количество мультипримеров, прошедших тестирование глубины и набора элементов, также известное как "видимые" мультипримеры, для всех примитивов с момента создания контекста устройства. Если целевой объект отрисовки не является многостраничным, счетчик увеличивается на количество видимых целых пикселей. Счетчик должен обернуться вокруг при переполнении.

ПРИМЕЧАНИЕ

Среда выполнения Direct3D может в любое время вызвать функцию QueryGetData драйвера, чтобы запросить эти статистические данные. Поэтому он должен постоянно вычисляться точно.

Только разница между двумя независимыми статистическими запросами предоставляет значимую информацию. Драйвер должен вычислить разницу между статистическими данными, которые он получает при вызове функции QueryBegin , и статистическими данными, которые он получает при вызове функции QueryEnd .

В целях вычисления видимых мультипримеров отключенные тесты глубины или тесты трафаретов должны вести себя так, как если бы они "прошли" отключенный тест. Это дает эквивалентные результаты, когда тестовые единицы были включены с тестовой функцией, для нее задано значение "always". Кроме того, эти значения должны вычисляться как обычные, даже если нет привязанных целевых объектов отрисовки. Так как тесты глубины и набора элементов логически выполняются на этапе слияния вывода конвейера, пиксели, отброшенные во время выполнения шейдера пикселей, не увеличивают значение счетчика окклюзии. Отброшенные пиксели логически даже не достигают слияния выходных данных. Существуют конфигурации конвейера, в которых единственными эффективными результатами, полученными из конвейера, являются табуляция счетчика окклюзии.

D3D10DDI_QUERY_TIMESTAMP
Данные, которые драйвер связывает с этим типом запроса, являются UINT64. Тип запроса TIMESTAMP используется аналогично типу запроса D3D10DDI_QUERY_EVENT, так как тип запроса TIMESTAMP также предоставляет тип примитив синхронизации. Как и D3D10DDI_QUERY_EVENT, метка времени должна отображаться после завершения работы GPU со всеми ранее выданными командами. Однако timeSTAMP отличается от D3D10DDI_QUERY_EVENT тем, что возвращает значение 64-разрядной метки времени. Это 64-разрядное значение метки времени должно быть отбираться из счетчика GPU, который увеличивается с согласованной частотой. Значение метки времени должно быть приведено в тот момент, когда GPU завершит работу со всеми ранее выданными командами. Gpu не требуется, чтобы убедиться, что все кэши сбрасываются в память, чтобы определить, что работа завершена. Это делается для того, чтобы выполнение нескольких высокочастотных типов запросов TIMESTAMP не вызывало сильное нарушение конвейера. Однако ЦП должен отслеживать четко определенный порядок записи в память между собой и GPU, особенно при поддержке D3D10DDI_QUERY_EVENT. Если бы ЦП определил, что GPU записал определенное значение (особенно значение ограждения), ЦП определит, что все предыдущие операции записи в памяти, которые были выданы до записи ограничения, должны быть записаны в память и могут быть немедленно видны ЦП. Тип очистки, который может потребоваться для получения данных из кэша GPU и в доступной для ЦП памяти, не должен выполняться при каждой метке ВРЕМЕНИ, но, вероятно, в конце каждого буфера команд.

Частота счетчика меток времени указывается в контексте D3D10DDI_QUERY_TIMESTAMPDISJOINT типа запроса. Частота этого счетчика должна быть больше 10 МГц и устойчива к высокочастотной динамическому регулированию GPU. Счетчик меток времени должен быть глобальным. Таким образом, счетчик меток времени не требуется принимать во внимание срез времени GPU контекстов.

Начальное значение счетчика меток времени не указано. Поэтому абсолютное значение счетчика меток времени, как правило, само по себе не имеет смысла. Тем не менее, относительное значение, созданное из разницы двух абсолютных значений, квэнтифицирует затраченное количество времени. Разница между двумя значениями меток времени является точной только в том случае, если два запроса TIMESTAMP заключены в квадратные скобки в D3D10DDI_QUERY_TIMESTAMPDISJOINT диапазоне, а значение запроса D3D10DDI_QUERY_TIMESTAMPDISJOINT возвращает значение FALSE.
D3D10DDI_QUERY_TIMESTAMPDISJOINT
Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT структурой. TIMESTAMPDISJOINT позволяет приложению определить квадратные скобки, чтобы не только запросить частоту часов TIMESTAMP, но и определить, была ли эта частота согласованной во всем диапазоне графических команд в квадратных скобках. Элемент Disjoint D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT содержит значение BOOL, указывающее, когда что-то привело к тому, что счетчик меток времени стал несвязанным или несвязанным. Несколько примеров событий, которые должны активировать TIMESTAMPDISJOINT, — это выключение питания, регулирование из-за событий энергосбережения ноутбука, отключение кабеля переменного тока и перегрев. Такие события должны быть достаточно редкими во время устойчивого состояния выполнения графического приложения, чтобы их можно было избежать, управляя средой выполнения системы. Обратите внимание, что при возникновении таких событий они эффективно снижают полезность функции TIMESTAMP. Запросы TIMESTAMP после события, которое активирует запрос TIMESTAMPDISJOINT, не должны быть значимыми по сравнению с запросами TIMESTAMP, предшествующими такому событию. Значение BOOL в элементе Disjoint имеет значение TRUE , если значения из запросов TIMESTAMP не могут быть гарантированно непрерывными в течение всего времени выполнения запроса TIMESTAMPDISJOINT. Otheriwse, Disjoint должно иметь значение FALSE. Значение элемента Frequency D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT должно быть равно частоте часов TIMESTAMP.

Кроме того, уведомления о таких событиях регулирования полезны для средств мониторинга производительности, регрессии и исследования, при условии, что уведомления приводят к различиям в производительности при выполнении приложений.
D3D10DDI_QUERY_PIPELINESTATS
Дополнительные сведения см. в разделе "Примечания".
D3D10DDI_QUERY_OCCLUSIONPREDICATE
Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Этот предикат отражает спецификацию для запроса OCCLUSION. Если запрос OCCLUSION для того же диапазона в квадратных скобках возвращает значение 0, то предикат OCCLUSION возвращает значение FALSE. В противном случае предикат OCCLUSION возвращает значение TRUE, указывающее, что отображается по крайней мере одна мультипримерка. Если предикат был указан как подсказка, а не гарантированный, ни один результат не распространяется обратно в приложение. Этот тип запроса является предикатом и может использоваться для предиката команд отрисовки.
D3D10DDI_QUERY_STREAMOUTPUTSTATS
Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_SO_STATISTICS структурой. Эта структура содержит статистику для мониторинга объема данных, передаваемых на этапе потокового вывода конвейера. Эта статистика подсчитывает только полные примитивы (например, точки, линии и треугольники), которые передаются в поток. Если тип-примитив изменяется (например, строки на треугольники), подсчет никак не корректируется. То есть счетчик всегда является общими примитивами, независимо от типа.

ПРИМЕЧАНИЕ

Среда выполнения Direct3D может в любое время вызвать функцию QueryGetData драйвера, чтобы запросить эти статистические данные. Поэтому он должен постоянно вычисляться точно.

Только разница между двумя независимыми статистическими запросами предоставляет значимую информацию. Драйвер должен вычислить разницу между статистическими данными, которые он получает при вызове функции QueryBegin , и статистическими данными, которые он получает при вызове функции QueryEnd .

D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE
Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Это значение BOOL имеет значение TRUE , если какой-либо потоковый выход переполнен. Если бы два D3D10DDI_QUERY_STREAMOUTPUTSTATS запроса использовались для одновременного мониторинга одного и того же диапазона в квадратных скобках, что и тип предиката STREAMOVERFLOWPREDICATE, разница в значениях в элементах PrimitivesStorageNeededD3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten . STREAMOVERFLOWPREDICATE не поддерживает возможность использования в качестве подсказки. Поэтому тип предиката должен быть гарантирован. Этот запрос является предикатом и может использоваться для предиката команд отрисовки, что предотвращает отображение нежелательного кадра в приложении.

В случае потоковой передачи в несколько буферов одновременно, как только любой из них переполняется, потоковые выходные данные останавливаются для всех буферов, а данные для STREAMOVERFLOWPREDICATE становятся true.
D3D11DDI_QUERY_PIPELINESTATS
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS структурой. Эта структура содержит статистику для каждого этапа графического конвейера. Этот тип запроса совпадает с типом запроса D3D11DDI_QUERY_PIPELINESTATS, за исключением D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS добавляет элементы HSInvocations и DSInvocations для шейдеров оболочки и доменных шейдеров .
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_SO_STATISTICS структурой.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_SO_STATISTICS структурой.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_SO_STATISTICS структурой.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются D3D10_DDI_QUERY_DATA_SO_STATISTICS структурой.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Значение BOOL имеет значение TRUE , если поток 0 был переполнен. Если бы два D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 запроса использовались для одновременного отслеживания одного и того же диапазона в квадратных скобках, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM0, разница в значениях в элементах PrimitivesStorageNeededD3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten .
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Значение BOOL имеет значение TRUE , если поток 1 был переполнен. Если два D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 запроса использовались для одновременного отслеживания одного и того же диапазона в квадратных скобках, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM1, разница в значениях в элементах PrimitivesStorageNeededD3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten .
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Значение BOOL имеет значение TRUE , если поток 2 был переполнен. Если бы два D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 запроса использовались для одновременного отслеживания одного и того же диапазона в квадратных скобках, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM2, разница в значениях в элементах PrimitivesStorageNeededD3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten .
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3
Поддерживается в Windows 7 и более поздних версиях.

Данные, которые драйвер связывает с этим типом запроса, являются логическим значением. Значение BOOL имеет значение TRUE , если поток 3 был переполнен. Если два D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 запроса использовались для одновременного мониторинга одного и того же диапазона в квадратных скобках, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM3, разница в значениях в элементах PrimitivesStorageNeededD3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten .
D3D10DDI_COUNTER_GPU_IDLE
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени простоя GPU.
D3D10DDI_COUNTER_VERTEX_PROCESSING
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени, когда вершинный шейдер занят обработкой данных.
D3D10DDI_COUNTER_GEOMETRY_PROCESSING
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени, когда геометрический шейдер занят обработкой данных.
D3D10DDI_COUNTER_PIXEL_PROCESSING
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени, в течение времени, когда пиксельный шейдер занят обработкой данных.
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени, в течение которых операции GPU, отличные от операций вершины, геометрии и шейдера пикселей, заняты обработкой данных.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент от теоретического максимума использования пропускной способности адаптера.
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент от теоретического максимума использования пропускной способности видеопамять.
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент от теоретического максимума использования пропускной способности вершин.
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент от теоретического максимума использования пропускной способности установки треугольника.
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент от теоретического максимума использования пропускной способности при заполнении.
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени ожидания шейдером вершин для операций чтения или записи данных в памяти (в сравнении с процентом времени вычисления математических вычислений вершинным шейдером).
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени вычисления математических вычислений шейдером вершин (в сравнении с процентом времени ожидания памяти для операций чтения или записи данных).
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени ожидания операций чтения или записи данных в памяти геометрическим шейдером (в сравнении с процентом времени вычисления математических вычислений геометрическим шейдером).
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени вычисления математических вычислений шейдером геометрии (в сравнении с процентом времени ожидания памяти для операций чтения или записи данных).
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени ожидания операций чтения или записи данных в памяти пиксельным шейдером (в сравнении с процентом времени вычисления математических вычислений пиксельным шейдером).
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент времени вычисления вычислений шейдером пикселей (в сравнении с процентом времени ожидания памяти для операций чтения или записи данных).
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE
Данные, которые драйвер связывает с данным типом счетчика запросов, являются FLOAT32. Драйвер возвращает процент вершин, полученных геометрическим шейдером или пиксельным шейдером из кэша вершин, которые уже были преобразованы вершинным шейдером.

Кэш преобразованных вершин (то есть вершин, с которыми работал вершинный шейдер) существует сразу после вершинного шейдера. Эти вершины могут использоваться геометрическим шейдером или пиксельным шейдером. 100 % частота попаданий (результат запроса D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE) указывает, что каждая вершина, необходимая для геометрического шейдера или пиксельного шейдера, уже преобразована. В то время как коэффициент попадания 0 % указывает, что каждая вершина требует обработки вершинным шейдером, прежде чем она может быть использована.

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

Кэш памяти текстур может существовать между представлением ресурсов шейдера или, возможно, буфером констант и шейдерами. Частота попаданий 100 % означает, что все тексели, необходимые для шейдера, уже были доступны в кэше. В то время как частота попаданий в 0 % означает, что каждый тексель требует получения данных из видеопамять.

Драйвер может реструктурировать алгоритмы и данные для увеличения частоты попаданий в кэш.
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
Первый доступный счетчик запросов, зависящий от устройства. Поставщики оборудования могут использовать это значение и любое 32-разрядное значение выше 0x40000000 для счетчика запросов для своих устройств.

Комментарии

Значения для D3D10DDI_COUNTER_VERTEX_PROCESSING, D3D10DDI_COUNTER_GEOMETRY_PROCESSING, D3D10DDI_COUNTER_PIXEL_PROCESSING и D3D10DDI_COUNTER_OTHER_GPU_PROCESSING могут складываться в определенное драйвером значение, которое представляет собой количество обнаруживаемых параллельных единиц. Этот номер публикуется драйвером как часть возможностей графического адаптера. Число обнаруживаемых параллельных единиц может быть равно 1, 2, 3 или 4 в зависимости от сведений об архитектуре оборудования, способности счетчиков производительности определять, на что фактически тратится время, или по полному усмотрению поставщика оборудования. Для архитектур, которые сообщают количество обнаруживаемых параллельных единиц, равное 1 (== 1) в элементе NumDetectableParallelUnitsструктуры D3D10DDI_COUNTER_INFO в ответ на вызов функции CheckCounterInfo , применяется следующее уравнение:

(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1,0 — D3D10DDI_COUNTER_GPU_IDLE

Мониторинг всех этих идентификаторов счетчиков (наряду с D3D10DDI_COUNTER_GPU_IDLE) по-прежнему должен соответствовать правилам одновременно активных счетчиков.

Для архитектур, которые сообщают количество обнаруживаемых параллельных единиц, не равное 1 (!= 1), взаимодействие между каждой метрикой занятости является более сложным. Например, если число обнаруживаемых параллельных единиц равно 4 (== 4), D3D10DDI_COUNTER_VERTEX_PROCESSING и D3D10DDI_COUNTER_PIXEL_PROCESSING равны .25 (== .25), а остальные метрики занятости равны 0 (== 0). D3D10DDI_COUNTER_GPU_IDLE может привести к от .5 до .75 в зависимости от фактического перекрытия этих параллельных единиц.

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_QUERY_PIPELINESTATS

Данные, которые драйвер связывает с этим типом запроса, являются структурой D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS , которая содержит статистику для каждого этапа графического конвейера. Для каждого этапа значение количества вызовов должно находиться между бесконечным кэшем и без кэша. Клиппер будет действовать как геометрический шейдер (GS). Клиппер будет выполняться для каждого треугольника. Если исходный треугольник полностью обрезан, при каждом вызове создается ноль примитивов, если исходный треугольник не обрезается вообще (или обрезка приводит только к одному треугольнику), два примитива будут созданы, если исходный треугольник был обрезан и привел к двум треугольникам и т. д. В типичных конфигурациях конвейера значение в элементе GSPrimitivesD3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS будет равно значению в элементе CInvocations . Если растеризация отключена и конвейер настроен для отправки только примитивов в потоковый вывод, значение в GSPrimitives будет отклоняться от значения в CInvocations , так как вызовы CInvocations не будут увеличиваться. Статистика обрезки будет гибкой в отношении реализаций полосы защиты. Таким образом, при отрисовке треугольников, выходящих за пределы окна просмотра, тесты гарантируют, что обрезка попадает между диапазоном значений (числа, предполагающие бесконечный защитный диапазон, и числа, предполагающие обрезку прямоугольника вокруг окна просмотра). Все значения содержат количество событий с момента создания контекста устройства. Обратите внимание, что эти статистические данные можно запросить в любое время, поэтому их необходимо постоянно вычислять точно.

Только разница между двумя независимыми статистическими запросами предоставляет значимую информацию. Драйвер должен вычислить разницу между статистическими данными, которые он получает при вызове функции QueryBegin , и статистическими данными, которые он получает при вызове функции QueryEnd .

Ниже приведены примеры взаимодействия между значениями в элементах IAVertices, IAPrimitives и VSInvocationsD3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS в отношении кэширования после вершинного шейдера (VS).

Сценарий Допустимое значение IAVertices Допустимое значение IAPrimitives Допустимое значение VSInvocations
Нарисуйте индексированную треугольную полосу из 4 примитивов (со всеми индексами одинаковое значение) 6 4 1--12
Нарисуйте список индексированных треугольников из 4 примитивов (со всеми индексами с одинаковым значением) 12 4 1--12
Нарисуйте треугольную полосу из 4 примитивов 6 4 6--12
Нарисуйте список треугольников из 4 примитивов 12 4 6--12

Частичные примитивы будут находиться в диапазоне значений, аналогично тому, как выполняется кэширование вершин. Таким образом, если частичные примитивы возможны, статистика должна находиться между конвейером, который обрезает их как можно скорее (прежде чем даже сборщик входных данных (IA) подсчитает их) или как можно позже (post clipper и предпиксельный шейдер (PS)). Stream выходные данные и GS со значением NULL являются гибкими в зависимости от того, вызывают ли они вызовы GS.

Что касается значения в элементе PSInvocationsD3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS, ранняя оптимизация глубины и трафарета может препятствовать реализации работы пиксельного шейдера. Таким образом, если пиксели не выполняют проверку глубины, значение в PSInvocations может увеличиваться или не увеличиваться в зависимости от того, где на самом деле выполняется проверка глубины в конвейере. Если пиксельный шейдер выводит глубину, значение в PSInvocations должно увеличиваться должным образом, даже если глубина вывода завершается ошибкой. В следующем примере показано, как будет проверяться значение в PSInvocations .

Рассмотрим DSP (количество пикселей, которые проходят тесты глубины и трафарета) и DSF (количество пикселей, которые не прошли проверку глубины или трафарета) . DSP примерно эквивалентен запросу OCCLUSION, за исключением того, что OCCLUSION измеряет несколько выборок (не пикселей). Во всех случаях DSP <= значение в PSInvocations<= ( DSP + DSF ). Когда пиксельный шейдер выводит глубину, значение в PSInvocations — это сумма DSP и DSF. Кроме того, если шейдер пикселей NULL привязан к конвейеру, значение в PSInvocations не увеличивается.

Что касается значений в IAVertices и VSInvocations, обработка смежных вершин может быть оптимизирована, если GS не объявляет вершины смежности в качестве входных данных для GS. Таким образом, если GS не объявляет смежные вершины в качестве входных данных, значения в IAVertices и VSInvocations могут отражать или не отражать работу, подразумеваемую смежными вершинами. Если GS объявляет смежные вершины, значение в IAVertices должно включать смежные вершины (без учета кэширования после VS), а значение в VSInvocations должно включать смежные вершины (а также любые эффекты после кэширования VS).

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Верхняя часть d3d10umddi.h (включая D3d10umddi.h)

См. также раздел

CheckCounterInfo

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT