diff --git a/src/dxvk/dxvk_query.cpp b/src/dxvk/dxvk_query.cpp index c8da6576c..39c0c5cd1 100644 --- a/src/dxvk/dxvk_query.cpp +++ b/src/dxvk/dxvk_query.cpp @@ -19,7 +19,7 @@ namespace dxvk { bool DxvkQuery::isIndexed() const { - return false; + return m_type == VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT; } @@ -112,6 +112,11 @@ namespace dxvk { m_data.statistic.csInvocations += data.statistic.csInvocations; break; + case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT: + m_data.xfbStream.primitivesWritten += data.xfbStream.primitivesWritten; + m_data.xfbStream.primitivesNeeded += data.xfbStream.primitivesNeeded; + break; + default: Logger::err(str::format("DxvkQuery: Unhandled query type: ", m_type)); } diff --git a/src/dxvk/dxvk_query.h b/src/dxvk/dxvk_query.h index a62c09522..e1da5912f 100644 --- a/src/dxvk/dxvk_query.h +++ b/src/dxvk/dxvk_query.h @@ -58,6 +58,19 @@ namespace dxvk { uint64_t tesInvocations; uint64_t csInvocations; }; + + /** + * \brief Transform feedback stream query + * + * Stores the number of primitives written to the + * buffer, as well as the number of primitives + * generated. The latter can be used to check for + * overflow. + */ + struct DxvkQueryXfbStreamData { + uint64_t primitivesWritten; + uint64_t primitivesNeeded; + }; /** * \brief Query data @@ -69,6 +82,7 @@ namespace dxvk { DxvkQueryOcclusionData occlusion; DxvkQueryTimestampData timestamp; DxvkQueryStatisticData statistic; + DxvkQueryXfbStreamData xfbStream; }; /**