перечисление 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. Однако значение BOOL является избыточным, так как при каждом сигнале запроса D3D10DDI_QUERY_EVENT значение BOOL всегда TRUE. Драйвер всегда должен отправлять значение данных BOOL TRUE при сигнале D3D10DDI_QUERY_EVENT. |
D3D10DDI_QUERY_OCCLUSION Статистические данные, которые драйвер связывает с этим типом запроса, — это UINT64. Эти статистические данные содержат количество многофакторных модулей, которые прошли тестирование глубины и набора элементов, также известные как "видимые" мультисамплесы для всех примитивов с момента создания контекста устройства. Если целевой объект отрисовки не является многофакторным, счетчик увеличивается по количеству видимых пикселей. Счетчик должен обтекаться при переполнении. ЗАМЕТКА Среда выполнения Direct3D может вызывать функцию QueryGetData драйвера в любое время, чтобы запросить эти статистические данные. Таким образом, он должен быть постоянно вычисляется точно. |
D3D10DDI_QUERY_TIMESTAMP Данные, которые драйвер связывает с этим типом запроса, — это UINT64. Тип запроса TIMESTAMP используется аналогично типу запроса D3D10DDI_QUERY_EVENT, так как тип запроса TIMESTAMP также предоставляет тип примитива синхронизации. Как и D3D10DDI_QUERY_EVENT, TIMESTAMP должен стать сигналом после завершения 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, — это отключение питания, регулирование вверх и вниз из-за событий экономии питания ноутбука, отключенного шнура ac и перегрева. Такие события должны быть достаточно редкими во время устойчивого состояния выполнения графического приложения, чтобы избежать управления средой выполнения системы. Обратите внимание, что при возникновении таких событий они эффективно снижают полезность функциональных возможностей TIMESTAMP. Запросы TIMESTAMP после события, активировавшего запрос TIMESTAMPDISJOINT, не должны быть значимыми по сравнению с запросами TIMESTAMP, предшествующими такому событию. Значение BOOL в элементе DisjointTRUE, если значения из запросов TIMESTAMP не могут быть непрерывными в течение длительности запроса TIMESTAMPDISJOINT. В противном случае разсоединение должно быть FALSE. Значение элемента D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT частоты должно быть равно частоте часов TIMESTAMP. Кроме того, уведомления о таких событиях регулирования полезны для мониторинга производительности, регрессии и средств исследования, при условии, что уведомления приводят к различиям производительности в выполнении приложения. |
D3D10DDI_QUERY_PIPELINESTATS Дополнительные сведения см. в примечаниях. |
D3D10DDI_QUERY_OCCLUSIONPREDICATE Данные, которые драйвер связывает с этим типом запроса, — это BOOL. Этот предикат отражает спецификацию запроса OCCLUSION. Если запрос OCCLUSION для того же диапазона с скобками возвращает значение 0, предикат OCCLUSION возвращает FALSE. В противном случае предикат OCCLUSION возвращает TRUE, что указывает на то, что по крайней мере один мультисамплем отображается. Если предикат был указан как намек и гарантированно, результат никогда не распространяется обратно в приложение. Этот тип запроса является предикатом и может использоваться для предиката команд отрисовки. |
D3D10DDI_QUERY_STREAMOUTPUTSTATS Данные, которые драйвер связывает с этим типом запроса, — это D3D10_DDI_QUERY_DATA_SO_STATISTICS структура. Эта структура содержит статистику для мониторинга объема данных, которые передаются на этапе потокового вывода конвейера. Эти статистические данные учитывают только полные примитивы (например, точки, линии и треугольники), которые передаются из потока. Если примитивный тип изменяется (например, линии на треугольники), подсчет не корректируется каким-либо образом. То есть число всегда является общими примитивами, независимо от типа. ЗАМЕТКА Среда выполнения Direct3D может вызывать функцию QueryGetData драйвера в любое время, чтобы запросить эти статистические данные. Таким образом, он должен быть постоянно вычисляется точно. |
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE Данные, которые драйвер связывает с этим типом запроса, — это BOOL. Этот логический параметр TRUE, если поток переполняется. Если два запроса D3D10DDI_QUERY_STREAMOUTPUTSTATS использовались для одновременного мониторинга того же диапазона с скобками, что и тип предиката STREAMOVERFLOWPREDICATE, разница значений в PrimitivesStorageNeeded членов D3D10_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, разница значений в PrimitivesStorageNeeded членов D3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях элементов NumPrimitivesWritten. |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1 Поддерживается в Windows 7 и более поздних версиях. Данные, которые драйвер связывает с этим типом запроса, — это BOOL. Этот логический элемент TRUE, если поток 1 переполняется. Если два запроса D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 использовались для одновременного мониторинга того же диапазона с скобками, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM1, разница значений в PrimitivesStorageNeeded членов D3D10_DDI_QUERY_DATA_SO_STATISTICS привела бы к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten. |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2 Поддерживается в Windows 7 и более поздних версиях. Данные, которые драйвер связывает с этим типом запроса, — это BOOL. Этот логический объект TRUE, если поток 2 переполняется. Если два запроса D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 использовались для одновременного мониторинга того же диапазона с скобками, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM2, разница значений в PrimitivesStorageNeeded членов D3D10_DDI_QUERY_DATA_SO_STATISTICS приведет к большей разнице, чем разница в значениях в элементах NumPrimitivesWritten. |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3 Поддерживается в Windows 7 и более поздних версиях. Данные, которые драйвер связывает с этим типом запроса, — это BOOL. Этот логический объект TRUE, если поток 3 переполняется. Если два запроса D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 использовались для одновременного мониторинга одного и того же диапазона с скобками, что и тип предиката STREAMOVERFLOWPREDICATE_STREAM3, разница значений в PrimitivesStorageNeeded членов D3D10_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) указывает, что все вершины, необходимые для геометрического шейдера или шейдера пикселей, уже преобразованы. В то время как скорость попадания%% указывает на то, что каждая вершина, требуемая обработка шейдером вершин, прежде чем она может быть использована. Драйвер может переструктурировать алгоритмы и данные для повышения скорости попаданий в кэш. |
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). Клиппер будет выполняться для каждого треугольника. При каждом вызове примитивы будут создаваться, если исходный треугольник полностью обрезан, будет создан один примитив, если исходный треугольник не обрезается вообще (или вырезка приводит только к одному треугольнику), два примитива будут сформированы, если исходный треугольник был обрезан и привел к двум треугольникам и т. д. В типичных конфигурациях конвейера значение в GSPrimitives член D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS будет равно значению в элементе CInvocations. Если растеризация отключена и конвейер настроен только для отправки примитивов в поток выходных данных, значение в GSPrimitives будет отклоняться от значения в CInvocations, так как CInvocations не будет увеличиваться. Статистика вырезки будет гибкой в отношении реализации полосы защиты. Таким образом, при отрисовке треугольников, которые выходят за рамки окна просмотра, тесты обеспечивают вырезку между диапазоном значений (числа, предполагающие бесконечный полоса защиты и числа, предполагающие жесткое вырезание прямоугольника вокруг окна просмотра). Все значения содержат количество событий после создания контекста устройства. Обратите внимание, что эти статистические данные можно запрашивать в любое время, поэтому они должны быть постоянно вычисляться точно.
Только разница между двумя независимыми статистическими запросами будет предоставлять значимые сведения. Драйвер должен вычислить разницу между статистическими данными, получаемыми при вызове функции QueryBegin, и статистические данные, получаемые при вызове функции QueryEnd.
Ниже приведены примеры взаимодействия между значениями в IAVertices, IAPrimitivesи VSInvocations членов D3D10_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)). Потоковые выходные данные и NULL GS являются гибкими по поводу того, вызывают ли они вызовы GS.
Что касается значения в PSInvocations члена D3D10_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 (include D3d10umddi.h) |
См. также
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS