From: Tim Rowley Date: Fri, 18 Aug 2017 17:34:48 +0000 (-0500) Subject: swr/rast: Add new API SwrStallBE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f5031fb9521ecf3be4af8584a80516c7307ad61a;p=mesa.git 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 --- diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index ccb6dfb7a19..632309821f8 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 a39420552b5..577cfb157a5 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.h +++ b/src/gallium/drivers/swr/rasterizer/core/api.h @@ -262,6 +262,13 @@ SWR_FUNC(void, SwrSync, uint64_t userData2, 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 @@ -709,6 +716,7 @@ struct SWR_INTERFACE PFNSwrSaveState pfnSwrSaveState; PFNSwrRestoreState pfnSwrRestoreState; PFNSwrSync pfnSwrSync; + PFNSwrStallBE pfnSwrStallBE; PFNSwrWaitForIdle pfnSwrWaitForIdle; PFNSwrWaitForIdleFE pfnSwrWaitForIdleFE; PFNSwrSetVertexBuffers pfnSwrSetVertexBuffers;