From: George Kyriazis Date: Mon, 26 Feb 2018 23:55:23 +0000 (-0600) Subject: swr/rast: Add split draw and other state information to DrawInfoEvent. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2f6ae8cfcd41851c6f7732795f1e23617b3ae7c3;p=mesa.git swr/rast: Add split draw and other state information to DrawInfoEvent. Removed specific split draw events. Reviewed-by: Bruce Cherniak --- diff --git a/src/gallium/drivers/swr/rasterizer/archrast/archrast.cpp b/src/gallium/drivers/swr/rasterizer/archrast/archrast.cpp index d5cffbb5cec..af18b161eaf 100644 --- a/src/gallium/drivers/swr/rasterizer/archrast/archrast.cpp +++ b/src/gallium/drivers/swr/rasterizer/archrast/archrast.cpp @@ -85,28 +85,18 @@ namespace ArchRast virtual void Handle(const DrawInstancedEvent& event) { - DrawInfoEvent e(event.data.drawId, ArchRast::Instanced, event.data.topology, event.data.numVertices, 0, 0, event.data.startVertex, event.data.numInstances, event.data.startInstance); + DrawInfoEvent e(event.data.drawId, ArchRast::Instanced, event.data.topology, + event.data.numVertices, 0, 0, event.data.startVertex, event.data.numInstances, + event.data.startInstance, event.data.tsEnable, event.data.gsEnable, event.data.soEnable, event.data.splitId); EventHandlerFile::Handle(e); } virtual void Handle(const DrawIndexedInstancedEvent& event) { - DrawInfoEvent e(event.data.drawId, ArchRast::IndexedInstanced, event.data.topology, 0, event.data.numIndices, event.data.indexOffset, event.data.baseVertex, event.data.numInstances, event.data.startInstance); - - EventHandlerFile::Handle(e); - } - - virtual void Handle(const DrawInstancedSplitEvent& event) - { - DrawInfoEvent e(event.data.drawId, ArchRast::InstancedSplit, 0, 0, 0, 0, 0, 0, 0); - - EventHandlerFile::Handle(e); - } - - virtual void Handle(const DrawIndexedInstancedSplitEvent& event) - { - DrawInfoEvent e(event.data.drawId, ArchRast::IndexedInstancedSplit, 0, 0, 0, 0, 0, 0, 0); + DrawInfoEvent e(event.data.drawId, ArchRast::IndexedInstanced, event.data.topology, 0, + event.data.numIndices, event.data.indexOffset, event.data.baseVertex, event.data.numInstances, + event.data.startInstance, event.data.tsEnable, event.data.gsEnable, event.data.soEnable, event.data.splitId); EventHandlerFile::Handle(e); } diff --git a/src/gallium/drivers/swr/rasterizer/archrast/events.proto b/src/gallium/drivers/swr/rasterizer/archrast/events.proto index ee5d75b5f2f..45193a33fd3 100644 --- a/src/gallium/drivers/swr/rasterizer/archrast/events.proto +++ b/src/gallium/drivers/swr/rasterizer/archrast/events.proto @@ -48,6 +48,10 @@ event DrawInfoEvent int32_t baseVertex; uint32_t numInstances; uint32_t startInstance; + uint32_t tsEnable; + uint32_t gsEnable; + uint32_t soEnable; + uint32_t splitId; // Split draw count or id. }; event DispatchEvent diff --git a/src/gallium/drivers/swr/rasterizer/archrast/events_private.proto b/src/gallium/drivers/swr/rasterizer/archrast/events_private.proto index a07c4a7f136..760f7aa4957 100644 --- a/src/gallium/drivers/swr/rasterizer/archrast/events_private.proto +++ b/src/gallium/drivers/swr/rasterizer/archrast/events_private.proto @@ -128,6 +128,10 @@ event DrawInstancedEvent int32_t startVertex; uint32_t numInstances; uint32_t startInstance; + uint32_t tsEnable; + uint32_t gsEnable; + uint32_t soEnable; + uint32_t splitId; // Split draw count or id. }; event DrawIndexedInstancedEvent @@ -139,16 +143,8 @@ event DrawIndexedInstancedEvent int32_t baseVertex; uint32_t numInstances; uint32_t startInstance; -}; - -///@brief API Stat: Split draw event for DrawInstanced. In certain cases, Rasty can split draws up into smaller draws. -event DrawInstancedSplitEvent -{ - uint32_t drawId; -}; - -///@brief API Stat: Split draw event for DrawIndexedInstanced. -event DrawIndexedInstancedSplitEvent -{ - uint32_t drawId; + uint32_t tsEnable; + uint32_t gsEnable; + uint32_t soEnable; + uint32_t splitId; // Split draw count or id. }; diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index 99d3cd5bb01..86864f022aa 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -1169,7 +1169,6 @@ void DrawInstanced( DRAW_CONTEXT* pDC = GetDrawContext(pContext); RDTSC_BEGIN(APIDraw, pDC->drawId); - AR_API_EVENT(DrawInstancedEvent(pDC->drawId, topology, numVertices, startVertex, numInstances, startInstance)); uint32_t maxVertsPerDraw = MaxVertsPerDraw(pDC, numVertices, topology); uint32_t primsPerDraw = GetNumPrims(topology, maxVertsPerDraw); @@ -1221,7 +1220,8 @@ void DrawInstanced( //enqueue DC QueueDraw(pContext); - AR_API_EVENT(DrawInstancedSplitEvent(pDC->drawId)); + AR_API_EVENT(DrawInstancedEvent(pDC->drawId, topology, numVertsForDraw, startVertex, numInstances, + startInstance, pState->tsState.tsEnable, pState->gsState.gsEnable, pState->soState.soEnable, draw)); remainingVerts -= numVertsForDraw; draw++; @@ -1297,7 +1297,6 @@ void DrawIndexedInstance( API_STATE* pState = &pDC->pState->state; RDTSC_BEGIN(APIDrawIndexed, pDC->drawId); - AR_API_EVENT(DrawIndexedInstancedEvent(pDC->drawId, topology, numIndices, indexOffset, baseVertex, numInstances, startInstance)); uint32_t maxIndicesPerDraw = MaxVertsPerDraw(pDC, numIndices, topology); uint32_t primsPerDraw = GetNumPrims(topology, maxIndicesPerDraw); @@ -1366,7 +1365,8 @@ void DrawIndexedInstance( //enqueue DC QueueDraw(pContext); - AR_API_EVENT(DrawIndexedInstancedSplitEvent(pDC->drawId)); + AR_API_EVENT(DrawIndexedInstancedEvent(pDC->drawId, topology, numIndicesForDraw, indexOffset, baseVertex, + numInstances, startInstance, pState->tsState.tsEnable, pState->gsState.gsEnable, pState->soState.soEnable, draw)); pIB += maxIndicesPerDraw * indexSize; remainingIndices -= numIndicesForDraw;