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


перечисление 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 и в доступной для ЦП памяти, не должен выполняться каждый параметр TIMESTAMP, но, вероятно, больше в конце каждого буфера команд.

Частота счетчика меток времени предоставляется в контексте 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. В противном случае значение 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) подсчитает их) или как можно позже (пост-клипер и шейдер до пикселя (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