1 /****************************************************************************
2 * Copyright (C) 2014-2016 Intel Corporation. All Rights Reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25 * @brief API definitions
27 ******************************************************************************/
32 #include "common/os.h"
37 #include "common/simdintrin.h"
38 #include "common/formats.h"
39 #include "core/state.h"
41 typedef void(SWR_API
*PFN_CALLBACK_FUNC
)(uint64_t data
, uint64_t data2
, uint64_t data3
);
43 //////////////////////////////////////////////////////////////////////////
44 /// @brief Rectangle structure
47 int32_t xmin
; ///< inclusive
48 int32_t ymin
; ///< inclusive
49 int32_t xmax
; ///< exclusive
50 int32_t ymax
; ///< exclusive
52 bool operator == (const SWR_RECT
& rhs
)
54 return (this->ymin
== rhs
.ymin
&&
55 this->ymax
== rhs
.ymax
&&
56 this->xmin
== rhs
.xmin
&&
57 this->xmax
== rhs
.xmax
);
60 bool operator != (const SWR_RECT
& rhs
)
62 return !(*this == rhs
);
65 SWR_RECT
& Intersect(const SWR_RECT
& other
)
67 this->xmin
= std::max(this->xmin
, other
.xmin
);
68 this->ymin
= std::max(this->ymin
, other
.ymin
);
69 this->xmax
= std::min(this->xmax
, other
.xmax
);
70 this->ymax
= std::min(this->ymax
, other
.ymax
);
72 if (xmax
- xmin
< 0 ||
76 ymin
= ymax
= xmin
= xmax
= 0;
81 SWR_RECT
& operator &= (const SWR_RECT
& other
)
83 return Intersect(other
);
86 SWR_RECT
& Union(const SWR_RECT
& other
)
88 this->xmin
= std::min(this->xmin
, other
.xmin
);
89 this->ymin
= std::min(this->ymin
, other
.ymin
);
90 this->xmax
= std::max(this->xmax
, other
.xmax
);
91 this->ymax
= std::max(this->ymax
, other
.ymax
);
96 SWR_RECT
& operator |= (const SWR_RECT
& other
)
101 void Translate(int32_t x
, int32_t y
)
110 //////////////////////////////////////////////////////////////////////////
111 /// @brief Function signature for load hot tiles
112 /// @param hPrivateContext - handle to private data
113 /// @param dstFormat - format of the hot tile
114 /// @param renderTargetIndex - render target to store, can be color, depth or stencil
115 /// @param x - destination x coordinate
116 /// @param y - destination y coordinate
117 /// @param pDstHotTile - pointer to the hot tile surface
118 typedef void(SWR_API
*PFN_LOAD_TILE
)(HANDLE hPrivateContext
, SWR_FORMAT dstFormat
,
119 SWR_RENDERTARGET_ATTACHMENT renderTargetIndex
,
120 uint32_t x
, uint32_t y
, uint32_t renderTargetArrayIndex
, uint8_t *pDstHotTile
);
122 //////////////////////////////////////////////////////////////////////////
123 /// @brief Function signature for store hot tiles
124 /// @param hPrivateContext - handle to private data
125 /// @param srcFormat - format of the hot tile
126 /// @param renderTargetIndex - render target to store, can be color, depth or stencil
127 /// @param x - destination x coordinate
128 /// @param y - destination y coordinate
129 /// @param pSrcHotTile - pointer to the hot tile surface
130 typedef void(SWR_API
*PFN_STORE_TILE
)(HANDLE hPrivateContext
, SWR_FORMAT srcFormat
,
131 SWR_RENDERTARGET_ATTACHMENT renderTargetIndex
,
132 uint32_t x
, uint32_t y
, uint32_t renderTargetArrayIndex
, uint8_t *pSrcHotTile
);
134 //////////////////////////////////////////////////////////////////////////
135 /// @brief Function signature for clearing from the hot tiles clear value
136 /// @param hPrivateContext - handle to private data
137 /// @param renderTargetIndex - render target to store, can be color, depth or stencil
138 /// @param x - destination x coordinate
139 /// @param y - destination y coordinate
140 /// @param pClearColor - pointer to the hot tile's clear value
141 typedef void(SWR_API
*PFN_CLEAR_TILE
)(HANDLE hPrivateContext
,
142 SWR_RENDERTARGET_ATTACHMENT rtIndex
,
143 uint32_t x
, uint32_t y
, const float* pClearColor
);
145 //////////////////////////////////////////////////////////////////////////
146 /// @brief Callback to allow driver to update their copy of streamout write offset.
147 /// This is call is made for any draw operation that has streamout enabled
148 /// and has updated the write offset.
149 /// @param hPrivateContext - handle to private data
150 /// @param soBufferSlot - buffer slot for write offset
151 /// @param soWriteOffset - update value for so write offset.
152 typedef void(SWR_API
*PFN_UPDATE_SO_WRITE_OFFSET
)(HANDLE hPrivateContext
,
153 uint32_t soBufferSlot
, uint32_t soWriteOffset
);
155 //////////////////////////////////////////////////////////////////////////
156 /// @brief Callback to allow driver to update their copy of stats.
157 /// @param hPrivateContext - handle to private data
158 /// @param pStats - pointer to draw stats
159 typedef void(SWR_API
*PFN_UPDATE_STATS
)(HANDLE hPrivateContext
,
160 const SWR_STATS
* pStats
);
162 //////////////////////////////////////////////////////////////////////////
163 /// @brief Callback to allow driver to update their copy of FE stats.
164 /// @note Its optimal to have a separate callback for FE stats since
165 /// there is only one DC per FE thread. This means we do not have
166 /// to sum up the stats across all of the workers.
167 /// @param hPrivateContext - handle to private data
168 /// @param pStats - pointer to draw stats
169 typedef void(SWR_API
*PFN_UPDATE_STATS_FE
)(HANDLE hPrivateContext
,
170 const SWR_STATS_FE
* pStats
);
172 //////////////////////////////////////////////////////////////////////////
174 /// Forward Declaration (see rdtsc_buckets.h for full definition)
175 /////////////////////////////////////////////////////////////////////////
178 //////////////////////////////////////////////////////////////////////////
179 /// SWR_THREADING_INFO
180 /////////////////////////////////////////////////////////////////////////
181 struct SWR_THREADING_INFO
183 uint32_t MAX_WORKER_THREADS
;
184 uint32_t MAX_NUMA_NODES
;
185 uint32_t MAX_CORES_PER_NUMA_NODE
;
186 uint32_t MAX_THREADS_PER_CORE
;
187 bool SINGLE_THREADED
;
190 //////////////////////////////////////////////////////////////////////////
191 /// SWR_CREATECONTEXT_INFO
192 /////////////////////////////////////////////////////////////////////////
193 struct SWR_CREATECONTEXT_INFO
197 // External functions (e.g. sampler) need per draw context state.
198 // Use SwrGetPrivateContextState() to access private state.
199 uint32_t privateStateSize
;
201 // Callback functions
202 PFN_LOAD_TILE pfnLoadTile
;
203 PFN_STORE_TILE pfnStoreTile
;
204 PFN_CLEAR_TILE pfnClearTile
;
205 PFN_UPDATE_SO_WRITE_OFFSET pfnUpdateSoWriteOffset
;
206 PFN_UPDATE_STATS pfnUpdateStats
;
207 PFN_UPDATE_STATS_FE pfnUpdateStatsFE
;
209 // Pointer to rdtsc buckets mgr returned to the caller.
210 // Only populated when KNOB_ENABLE_RDTSC is set
211 BucketManager
* pBucketMgr
;
213 // Output: size required memory passed to for SwrSaveState / SwrRestoreState
214 size_t contextSaveSize
;
216 // Input (optional): Threading info that overrides any set KNOB values.
217 SWR_THREADING_INFO
* pThreadInfo
;
220 //////////////////////////////////////////////////////////////////////////
221 /// @brief Create SWR Context.
222 /// @param pCreateInfo - pointer to creation info.
223 HANDLE SWR_API
SwrCreateContext(
224 SWR_CREATECONTEXT_INFO
* pCreateInfo
);
226 //////////////////////////////////////////////////////////////////////////
227 /// @brief Destroys SWR Context.
228 /// @param hContext - Handle passed back from SwrCreateContext
229 void SWR_API
SwrDestroyContext(
232 //////////////////////////////////////////////////////////////////////////
233 /// @brief Saves API state associated with hContext
234 /// @param hContext - Handle passed back from SwrCreateContext
235 /// @param pOutputStateBlock - Memory block to receive API state data
236 /// @param memSize - Size of memory pointed to by pOutputStateBlock
237 void SWR_API
SwrSaveState(
239 void* pOutputStateBlock
,
242 //////////////////////////////////////////////////////////////////////////
243 /// @brief Restores API state to hContext previously saved with SwrSaveState
244 /// @param hContext - Handle passed back from SwrCreateContext
245 /// @param pStateBlock - Memory block to read API state data from
246 /// @param memSize - Size of memory pointed to by pStateBlock
247 void SWR_API
SwrRestoreState(
249 const void* pStateBlock
,
252 //////////////////////////////////////////////////////////////////////////
253 /// @brief Sync cmd. Executes the callback func when all rendering up to this sync
254 /// has been completed
255 /// @param hContext - Handle passed back from SwrCreateContext
256 /// @param pfnFunc - pointer to callback function,
257 /// @param userData - user data to pass back
258 void SWR_API
SwrSync(
260 PFN_CALLBACK_FUNC pfnFunc
,
263 uint64_t userData3
= 0);
265 //////////////////////////////////////////////////////////////////////////
266 /// @brief Blocks until all rendering has been completed.
267 /// @param hContext - Handle passed back from SwrCreateContext
268 void SWR_API
SwrWaitForIdle(
271 //////////////////////////////////////////////////////////////////////////
272 /// @brief Blocks until all FE rendering has been completed.
273 /// @param hContext - Handle passed back from SwrCreateContext
274 void SWR_API
SwrWaitForIdleFE(
277 //////////////////////////////////////////////////////////////////////////
278 /// @brief Set vertex buffer state.
279 /// @param hContext - Handle passed back from SwrCreateContext
280 /// @param numBuffers - Number of vertex buffer state descriptors.
281 /// @param pVertexBuffers - Array of vertex buffer state descriptors.
282 void SWR_API
SwrSetVertexBuffers(
285 const SWR_VERTEX_BUFFER_STATE
* pVertexBuffers
);
287 //////////////////////////////////////////////////////////////////////////
288 /// @brief Set index buffer
289 /// @param hContext - Handle passed back from SwrCreateContext
290 /// @param pIndexBuffer - Index buffer.
291 void SWR_API
SwrSetIndexBuffer(
293 const SWR_INDEX_BUFFER_STATE
* pIndexBuffer
);
295 //////////////////////////////////////////////////////////////////////////
296 /// @brief Set fetch shader pointer.
297 /// @param hContext - Handle passed back from SwrCreateContext
298 /// @param pfnFetchFunc - Pointer to shader.
299 void SWR_API
SwrSetFetchFunc(
301 PFN_FETCH_FUNC pfnFetchFunc
);
303 //////////////////////////////////////////////////////////////////////////
304 /// @brief Set streamout shader pointer.
305 /// @param hContext - Handle passed back from SwrCreateContext
306 /// @param pfnSoFunc - Pointer to shader.
307 /// @param streamIndex - specifies stream
308 void SWR_API
SwrSetSoFunc(
310 PFN_SO_FUNC pfnSoFunc
,
311 uint32_t streamIndex
);
313 //////////////////////////////////////////////////////////////////////////
314 /// @brief Set streamout state
315 /// @param hContext - Handle passed back from SwrCreateContext
316 /// @param pSoState - Pointer to streamout state.
317 void SWR_API
SwrSetSoState(
319 SWR_STREAMOUT_STATE
* pSoState
);
321 //////////////////////////////////////////////////////////////////////////
322 /// @brief Set streamout buffer state
323 /// @param hContext - Handle passed back from SwrCreateContext
324 /// @param pSoBuffer - Pointer to streamout buffer.
325 /// @param slot - Slot to bind SO buffer to.
326 void SWR_API
SwrSetSoBuffers(
328 SWR_STREAMOUT_BUFFER
* pSoBuffer
,
331 //////////////////////////////////////////////////////////////////////////
332 /// @brief Set vertex shader pointer.
333 /// @param hContext - Handle passed back from SwrCreateContext
334 /// @param pfnVertexFunc - Pointer to shader.
335 void SWR_API
SwrSetVertexFunc(
337 PFN_VERTEX_FUNC pfnVertexFunc
);
339 //////////////////////////////////////////////////////////////////////////
340 /// @brief Set frontend state.
341 /// @param hContext - Handle passed back from SwrCreateContext
342 /// @param pState - Pointer to state
343 void SWR_API
SwrSetFrontendState(
345 SWR_FRONTEND_STATE
*pState
);
347 //////////////////////////////////////////////////////////////////////////
348 /// @brief Set geometry shader state.
349 /// @param hContext - Handle passed back from SwrCreateContext
350 /// @param pState - Pointer to state
351 void SWR_API
SwrSetGsState(
353 SWR_GS_STATE
*pState
);
355 //////////////////////////////////////////////////////////////////////////
356 /// @brief Set geometry shader
357 /// @param hContext - Handle passed back from SwrCreateContext
358 /// @param pState - Pointer to geometry shader function
359 void SWR_API
SwrSetGsFunc(
361 PFN_GS_FUNC pfnGsFunc
);
363 //////////////////////////////////////////////////////////////////////////
364 /// @brief Set compute shader
365 /// @param hContext - Handle passed back from SwrCreateContext
366 /// @param pfnCsFunc - Pointer to compute shader function
367 /// @param totalThreadsInGroup - product of thread group dimensions.
368 /// @param totalSpillFillSize - size in bytes needed for spill/fill.
369 void SWR_API
SwrSetCsFunc(
371 PFN_CS_FUNC pfnCsFunc
,
372 uint32_t totalThreadsInGroup
,
373 uint32_t totalSpillFillSize
);
375 //////////////////////////////////////////////////////////////////////////
376 /// @brief Set tessellation state.
377 /// @param hContext - Handle passed back from SwrCreateContext
378 /// @param pState - Pointer to state
379 void SWR_API
SwrSetTsState(
381 SWR_TS_STATE
*pState
);
383 //////////////////////////////////////////////////////////////////////////
384 /// @brief Set hull shader
385 /// @param hContext - Handle passed back from SwrCreateContext
386 /// @param pfnFunc - Pointer to shader function
387 void SWR_API
SwrSetHsFunc(
389 PFN_HS_FUNC pfnFunc
);
391 //////////////////////////////////////////////////////////////////////////
392 /// @brief Set domain shader
393 /// @param hContext - Handle passed back from SwrCreateContext
394 /// @param pfnFunc - Pointer to shader function
395 void SWR_API
SwrSetDsFunc(
397 PFN_DS_FUNC pfnFunc
);
399 //////////////////////////////////////////////////////////////////////////
400 /// @brief Set depth stencil state
401 /// @param hContext - Handle passed back from SwrCreateContext
402 /// @param pState - Pointer to state.
403 void SWR_API
SwrSetDepthStencilState(
405 SWR_DEPTH_STENCIL_STATE
*pState
);
407 //////////////////////////////////////////////////////////////////////////
408 /// @brief Set backend state
409 /// @param hContext - Handle passed back from SwrCreateContext
410 /// @param pState - Pointer to state.
411 void SWR_API
SwrSetBackendState(
413 SWR_BACKEND_STATE
*pState
);
415 //////////////////////////////////////////////////////////////////////////
416 /// @brief Set pixel shader state
417 /// @param hContext - Handle passed back from SwrCreateContext
418 /// @param pState - Pointer to state.
419 void SWR_API
SwrSetPixelShaderState(
421 SWR_PS_STATE
*pState
);
423 //////////////////////////////////////////////////////////////////////////
424 /// @brief Set blend state
425 /// @param hContext - Handle passed back from SwrCreateContext
426 /// @param pState - Pointer to state.
427 void SWR_API
SwrSetBlendState(
429 SWR_BLEND_STATE
*pState
);
431 //////////////////////////////////////////////////////////////////////////
432 /// @brief Set blend function
433 /// @param hContext - Handle passed back from SwrCreateContext
434 /// @param renderTarget - render target index
435 /// @param pfnBlendFunc - function pointer
436 void SWR_API
SwrSetBlendFunc(
438 uint32_t renderTarget
,
439 PFN_BLEND_JIT_FUNC pfnBlendFunc
);
441 //////////////////////////////////////////////////////////////////////////
443 /// @param hContext - Handle passed back from SwrCreateContext
444 /// @param topology - Specifies topology for draw.
445 /// @param startVertex - Specifies start vertex in vertex buffer for draw.
446 /// @param primCount - Number of vertices.
447 void SWR_API
SwrDraw(
449 PRIMITIVE_TOPOLOGY topology
,
450 uint32_t startVertex
,
453 //////////////////////////////////////////////////////////////////////////
454 /// @brief SwrDrawInstanced
455 /// @param hContext - Handle passed back from SwrCreateContext
456 /// @param topology - Specifies topology for draw.
457 /// @param numVertsPerInstance - How many vertices to read sequentially from vertex data.
458 /// @param numInstances - How many instances to render.
459 /// @param startVertex - Specifies start vertex for draw. (vertex data)
460 /// @param startInstance - Which instance to start sequentially fetching from in each buffer (instanced data)
461 void SWR_API
SwrDrawInstanced(
463 PRIMITIVE_TOPOLOGY topology
,
464 uint32_t numVertsPerInstance
,
465 uint32_t numInstances
,
466 uint32_t startVertex
,
467 uint32_t startInstance
);
469 //////////////////////////////////////////////////////////////////////////
470 /// @brief DrawIndexed
471 /// @param hContext - Handle passed back from SwrCreateContext
472 /// @param topology - Specifies topology for draw.
473 /// @param numIndices - Number of indices to read sequentially from index buffer.
474 /// @param indexOffset - Starting index into index buffer.
475 /// @param baseVertex - Vertex in vertex buffer to consider as index "0". Note value is signed.
476 void SWR_API
SwrDrawIndexed(
478 PRIMITIVE_TOPOLOGY topology
,
480 uint32_t indexOffset
,
483 //////////////////////////////////////////////////////////////////////////
484 /// @brief SwrDrawIndexedInstanced
485 /// @param hContext - Handle passed back from SwrCreateContext
486 /// @param topology - Specifies topology for draw.
487 /// @param numIndices - Number of indices to read sequentially from index buffer.
488 /// @param numInstances - Number of instances to render.
489 /// @param indexOffset - Starting index into index buffer.
490 /// @param baseVertex - Vertex in vertex buffer to consider as index "0". Note value is signed.
491 /// @param startInstance - Which instance to start sequentially fetching from in each buffer (instanced data)
492 void SWR_API
SwrDrawIndexedInstanced(
494 PRIMITIVE_TOPOLOGY topology
,
496 uint32_t numInstances
,
497 uint32_t indexOffset
,
499 uint32_t startInstance
);
501 //////////////////////////////////////////////////////////////////////////
502 /// @brief SwrInvalidateTiles
503 /// @param hContext - Handle passed back from SwrCreateContext
504 /// @param attachmentMask - The mask specifies which surfaces attached to the hottiles to invalidate.
505 /// @param invalidateRect - The pixel-coordinate rectangle to invalidate. This will be expanded to
506 /// be hottile size-aligned.
507 void SWR_API
SwrInvalidateTiles(
509 uint32_t attachmentMask
,
510 const SWR_RECT
& invalidateRect
);
512 //////////////////////////////////////////////////////////////////////////
513 /// @brief SwrDiscardRect
514 /// @param hContext - Handle passed back from SwrCreateContext
515 /// @param attachmentMask - The mask specifies which surfaces attached to the hottiles to discard.
516 /// @param rect - The pixel-coordinate rectangle to discard. Only fully-covered hottiles will be
518 void SWR_API
SwrDiscardRect(
520 uint32_t attachmentMask
,
521 const SWR_RECT
& rect
);
523 //////////////////////////////////////////////////////////////////////////
524 /// @brief SwrDispatch
525 /// @param hContext - Handle passed back from SwrCreateContext
526 /// @param threadGroupCountX - Number of thread groups dispatched in X direction
527 /// @param threadGroupCountY - Number of thread groups dispatched in Y direction
528 /// @param threadGroupCountZ - Number of thread groups dispatched in Z direction
529 void SWR_API
SwrDispatch(
531 uint32_t threadGroupCountX
,
532 uint32_t threadGroupCountY
,
533 uint32_t threadGroupCountZ
);
538 SWR_TILE_INVALID
= 0, // tile is in unitialized state and should be loaded with surface contents before rendering
539 SWR_TILE_DIRTY
= 2, // tile contains newer data than surface it represents
540 SWR_TILE_RESOLVED
= 3, // is in sync with surface it represents
543 /// @todo Add a good description for what attachments are and when and why you would use the different SWR_TILE_STATEs.
544 void SWR_API
SwrStoreTiles(
546 SWR_RENDERTARGET_ATTACHMENT attachment
,
547 SWR_TILE_STATE postStoreTileState
,
548 const SWR_RECT
& storeRect
);
551 //////////////////////////////////////////////////////////////////////////
552 /// @brief SwrClearRenderTarget - Clear attached render targets / depth / stencil
553 /// @param hContext - Handle passed back from SwrCreateContext
554 /// @param clearMask - combination of SWR_CLEAR_COLOR / SWR_CLEAR_DEPTH / SWR_CLEAR_STENCIL flags (or SWR_CLEAR_NONE)
555 /// @param clearColor - color use for clearing render targets
556 /// @param z - depth value use for clearing depth buffer
557 /// @param stencil - stencil value used for clearing stencil buffer
558 /// @param clearRect - The pixel-coordinate rectangle to clear in all cleared buffers
559 void SWR_API
SwrClearRenderTarget(
562 const float clearColor
[4],
565 const SWR_RECT
& clearRect
);
567 //////////////////////////////////////////////////////////////////////////
568 /// @brief SwrSetRastyState
569 /// @param hContext - Handle passed back from SwrCreateContext
570 /// @param pRastState - New SWR_RASTSTATE used for SwrDraw* commands
571 void SWR_API
SwrSetRastState(
573 const SWR_RASTSTATE
*pRastState
);
575 //////////////////////////////////////////////////////////////////////////
576 /// @brief SwrSetViewports
577 /// @param hContext - Handle passed back from SwrCreateContext
578 /// @param numViewports - number of viewports passed in
579 /// @param pViewports - Specifies extents of viewport.
580 /// @param pMatrices - If not specified then SWR computes a default one.
581 void SWR_API
SwrSetViewports(
583 uint32_t numViewports
,
584 const SWR_VIEWPORT
* pViewports
,
585 const SWR_VIEWPORT_MATRICES
* pMatrices
);
587 //////////////////////////////////////////////////////////////////////////
588 /// @brief SwrSetScissorRects
589 /// @param hContext - Handle passed back from SwrCreateContext
590 /// @param numScissors - number of scissors passed in
591 /// @param pScissors - array of scissors
592 void SWR_API
SwrSetScissorRects(
594 uint32_t numScissors
,
595 const SWR_RECT
* pScissors
);
597 //////////////////////////////////////////////////////////////////////////
598 /// @brief Returns a pointer to the private context state for the current
599 /// draw operation. This is used for external componets such as the
602 /// @note Client needs to resend private state prior to each draw call.
603 /// Also, SWR is responsible for the private state memory.
604 /// @param hContext - Handle passed back from SwrCreateContext
605 VOID
* SWR_API
SwrGetPrivateContextState(
608 //////////////////////////////////////////////////////////////////////////
609 /// @brief Clients can use this to allocate memory for draw/dispatch
610 /// operations. The memory will automatically be freed once operation
611 /// has completed. Client can use this to allocate binding tables,
612 /// etc. needed for shader execution.
613 /// @param hContext - Handle passed back from SwrCreateContext
614 /// @param size - Size of allocation
615 /// @param align - Alignment needed for allocation.
616 VOID
* SWR_API
SwrAllocDrawContextMemory(
621 //////////////////////////////////////////////////////////////////////////
622 /// @brief Enables stats counting
623 /// @param hContext - Handle passed back from SwrCreateContext
624 /// @param enable - If true then counts are incremented.
625 void SWR_API
SwrEnableStats(
629 //////////////////////////////////////////////////////////////////////////
630 /// @brief Mark end of frame - used for performance profiling
631 /// @param hContext - Handle passed back from SwrCreateContext
632 void SWR_API
SwrEndFrame(
635 #endif//__SWR_API_H__