From f5031fb9521ecf3be4af8584a80516c7307ad61a Mon Sep 17 00:00:00 2001 From: Tim Rowley Date: Fri, 18 Aug 2017 12:34:48 -0500 Subject: [PATCH] swr/rast: Add new API SwrStallBE SwrStallBE stalls the backend threads until all work submitted before the stall has finished. The frontend threads can continue to make forward progress. Reviewed-by: Bruce Cherniak --- src/gallium/drivers/swr/rasterizer/core/api.cpp | 9 +++++++++ src/gallium/drivers/swr/rasterizer/core/api.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index ccb6dfb..6323098 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -458,6 +458,14 @@ void SwrSync(HANDLE hContext, PFN_CALLBACK_FUNC pfnFunc, uint64_t userData, uint AR_API_END(APISync, 1); } +void SwrStallBE(HANDLE hContext) +{ + SWR_CONTEXT* pContext = GetContext(hContext); + DRAW_CONTEXT* pDC = GetDrawContext(pContext); + + pDC->dependent = true; +} + void SwrWaitForIdle(HANDLE hContext) { SWR_CONTEXT *pContext = GetContext(hContext); @@ -1672,6 +1680,7 @@ void SwrGetInterface(SWR_INTERFACE &out_funcs) out_funcs.pfnSwrSaveState = SwrSaveState; out_funcs.pfnSwrRestoreState = SwrRestoreState; out_funcs.pfnSwrSync = SwrSync; + out_funcs.pfnSwrStallBE = SwrStallBE; out_funcs.pfnSwrWaitForIdle = SwrWaitForIdle; out_funcs.pfnSwrWaitForIdleFE = SwrWaitForIdleFE; out_funcs.pfnSwrSetVertexBuffers = SwrSetVertexBuffers; diff --git a/src/gallium/drivers/swr/rasterizer/core/api.h b/src/gallium/drivers/swr/rasterizer/core/api.h index a394205..577cfb1 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.h +++ b/src/gallium/drivers/swr/rasterizer/core/api.h @@ -263,6 +263,13 @@ SWR_FUNC(void, SwrSync, uint64_t userData3); ////////////////////////////////////////////////////////////////////////// +/// @brief Stall cmd. Stalls the backend until all previous work has been completed. +/// Frontend work can continue to make progress +/// @param hContext - Handle passed back from SwrCreateContext +SWR_FUNC(void, SwrStallBE, + HANDLE hContext); + +////////////////////////////////////////////////////////////////////////// /// @brief Blocks until all rendering has been completed. /// @param hContext - Handle passed back from SwrCreateContext SWR_FUNC(void, SwrWaitForIdle, @@ -709,6 +716,7 @@ struct SWR_INTERFACE PFNSwrSaveState pfnSwrSaveState; PFNSwrRestoreState pfnSwrRestoreState; PFNSwrSync pfnSwrSync; + PFNSwrStallBE pfnSwrStallBE; PFNSwrWaitForIdle pfnSwrWaitForIdle; PFNSwrWaitForIdleFE pfnSwrWaitForIdleFE; PFNSwrSetVertexBuffers pfnSwrSetVertexBuffers; -- 2.7.4