summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/swr/rasterizer/core/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/swr/rasterizer/core/state.h')
-rw-r--r--src/gallium/drivers/swr/rasterizer/core/state.h1240
1 files changed, 0 insertions, 1240 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/state.h b/src/gallium/drivers/swr/rasterizer/core/state.h
deleted file mode 100644
index 66a23bd9b08..00000000000
--- a/src/gallium/drivers/swr/rasterizer/core/state.h
+++ /dev/null
@@ -1,1240 +0,0 @@
-/****************************************************************************
- * Copyright (C) 2014-2018 Intel Corporation. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * @file state.h
- *
- * @brief Definitions for API state.
- *
- ******************************************************************************/
-// Skipping clang-format due to parsing by simplistic python scripts
-// clang-format off
-#pragma once
-
-#include "common/formats.h"
-#include "common/intrin.h"
-#include "common/rdtsc_buckets.h"
-#include <functional>
-#include <algorithm>
-
-using gfxptr_t = unsigned long long;
-
-//////////////////////////////////////////////////////////////////////////
-/// PRIMITIVE_TOPOLOGY.
-//////////////////////////////////////////////////////////////////////////
-enum PRIMITIVE_TOPOLOGY
-{
- TOP_UNKNOWN = 0x0,
- TOP_POINT_LIST = 0x1,
- TOP_LINE_LIST = 0x2,
- TOP_LINE_STRIP = 0x3,
- TOP_TRIANGLE_LIST = 0x4,
- TOP_TRIANGLE_STRIP = 0x5,
- TOP_TRIANGLE_FAN = 0x6,
- TOP_QUAD_LIST = 0x7,
- TOP_QUAD_STRIP = 0x8,
- TOP_LINE_LIST_ADJ = 0x9,
- TOP_LISTSTRIP_ADJ = 0xA,
- TOP_TRI_LIST_ADJ = 0xB,
- TOP_TRI_STRIP_ADJ = 0xC,
- TOP_TRI_STRIP_REVERSE = 0xD,
- TOP_POLYGON = 0xE,
- TOP_RECT_LIST = 0xF,
- TOP_LINE_LOOP = 0x10,
- TOP_POINT_LIST_BF = 0x11,
- TOP_LINE_STRIP_CONT = 0x12,
- TOP_LINE_STRIP_BF = 0x13,
- TOP_LINE_STRIP_CONT_BF = 0x14,
- TOP_TRIANGLE_FAN_NOSTIPPLE = 0x16,
- TOP_TRIANGLE_DISC = 0x17, /// @todo What is this??
-
- TOP_PATCHLIST_BASE = 0x1F, // Invalid topology, used to calculate num verts for a patchlist.
- TOP_PATCHLIST_1 = 0x20, // List of 1-vertex patches
- TOP_PATCHLIST_2 = 0x21,
- TOP_PATCHLIST_3 = 0x22,
- TOP_PATCHLIST_4 = 0x23,
- TOP_PATCHLIST_5 = 0x24,
- TOP_PATCHLIST_6 = 0x25,
- TOP_PATCHLIST_7 = 0x26,
- TOP_PATCHLIST_8 = 0x27,
- TOP_PATCHLIST_9 = 0x28,
- TOP_PATCHLIST_10 = 0x29,
- TOP_PATCHLIST_11 = 0x2A,
- TOP_PATCHLIST_12 = 0x2B,
- TOP_PATCHLIST_13 = 0x2C,
- TOP_PATCHLIST_14 = 0x2D,
- TOP_PATCHLIST_15 = 0x2E,
- TOP_PATCHLIST_16 = 0x2F,
- TOP_PATCHLIST_17 = 0x30,
- TOP_PATCHLIST_18 = 0x31,
- TOP_PATCHLIST_19 = 0x32,
- TOP_PATCHLIST_20 = 0x33,
- TOP_PATCHLIST_21 = 0x34,
- TOP_PATCHLIST_22 = 0x35,
- TOP_PATCHLIST_23 = 0x36,
- TOP_PATCHLIST_24 = 0x37,
- TOP_PATCHLIST_25 = 0x38,
- TOP_PATCHLIST_26 = 0x39,
- TOP_PATCHLIST_27 = 0x3A,
- TOP_PATCHLIST_28 = 0x3B,
- TOP_PATCHLIST_29 = 0x3C,
- TOP_PATCHLIST_30 = 0x3D,
- TOP_PATCHLIST_31 = 0x3E,
- TOP_PATCHLIST_32 = 0x3F, // List of 32-vertex patches
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_SHADER_TYPE
-//////////////////////////////////////////////////////////////////////////
-enum SWR_SHADER_TYPE
-{
- SHADER_VERTEX,
- SHADER_GEOMETRY,
- SHADER_DOMAIN,
- SHADER_HULL,
- SHADER_PIXEL,
- SHADER_COMPUTE,
-
- NUM_SHADER_TYPES,
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_RENDERTARGET_ATTACHMENT
-/// @todo Its not clear what an "attachment" means. Its not common term.
-//////////////////////////////////////////////////////////////////////////
-enum SWR_RENDERTARGET_ATTACHMENT
-{
- SWR_ATTACHMENT_COLOR0,
- SWR_ATTACHMENT_COLOR1,
- SWR_ATTACHMENT_COLOR2,
- SWR_ATTACHMENT_COLOR3,
- SWR_ATTACHMENT_COLOR4,
- SWR_ATTACHMENT_COLOR5,
- SWR_ATTACHMENT_COLOR6,
- SWR_ATTACHMENT_COLOR7,
- SWR_ATTACHMENT_DEPTH,
- SWR_ATTACHMENT_STENCIL,
-
- SWR_NUM_ATTACHMENTS
-};
-
-#define SWR_NUM_RENDERTARGETS 8
-
-#define SWR_ATTACHMENT_COLOR0_BIT 0x001
-#define SWR_ATTACHMENT_COLOR1_BIT 0x002
-#define SWR_ATTACHMENT_COLOR2_BIT 0x004
-#define SWR_ATTACHMENT_COLOR3_BIT 0x008
-#define SWR_ATTACHMENT_COLOR4_BIT 0x010
-#define SWR_ATTACHMENT_COLOR5_BIT 0x020
-#define SWR_ATTACHMENT_COLOR6_BIT 0x040
-#define SWR_ATTACHMENT_COLOR7_BIT 0x080
-#define SWR_ATTACHMENT_DEPTH_BIT 0x100
-#define SWR_ATTACHMENT_STENCIL_BIT 0x200
-#define SWR_ATTACHMENT_MASK_ALL 0x3ff
-#define SWR_ATTACHMENT_MASK_COLOR 0x0ff
-
-
-//////////////////////////////////////////////////////////////////////////
-/// @brief SWR Inner Tessellation factor ID
-/// See above GetTessFactorOutputPosition code for documentation
-enum SWR_INNER_TESSFACTOR_ID
-{
- SWR_QUAD_U_TRI_INSIDE,
- SWR_QUAD_V_INSIDE,
-
- SWR_NUM_INNER_TESS_FACTORS,
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// @brief SWR Outer Tessellation factor ID
-/// See above GetTessFactorOutputPosition code for documentation
-enum SWR_OUTER_TESSFACTOR_ID
-{
- SWR_QUAD_U_EQ0_TRI_U_LINE_DETAIL,
- SWR_QUAD_U_EQ1_TRI_V_LINE_DENSITY,
- SWR_QUAD_V_EQ0_TRI_W,
- SWR_QUAD_V_EQ1,
-
- SWR_NUM_OUTER_TESS_FACTORS,
-};
-
-/////////////////////////////////////////////////////////////////////////
-/// simdvertex
-/// @brief Defines a vertex element that holds all the data for SIMD vertices.
-/// Contains space for position, SGV, and 32 generic attributes
-/////////////////////////////////////////////////////////////////////////
-enum SWR_VTX_SLOTS
-{
- VERTEX_SGV_SLOT = 0,
- VERTEX_SGV_RTAI_COMP = 0,
- VERTEX_SGV_VAI_COMP = 1,
- VERTEX_SGV_POINT_SIZE_COMP = 2,
- VERTEX_POSITION_SLOT = 1,
- VERTEX_POSITION_END_SLOT = 1,
- VERTEX_CLIPCULL_DIST_LO_SLOT = (1 + VERTEX_POSITION_END_SLOT), // VS writes lower 4 clip/cull dist
- VERTEX_CLIPCULL_DIST_HI_SLOT = (2 + VERTEX_POSITION_END_SLOT), // VS writes upper 4 clip/cull dist
- VERTEX_ATTRIB_START_SLOT = (3 + VERTEX_POSITION_END_SLOT),
- VERTEX_ATTRIB_END_SLOT = (34 + VERTEX_POSITION_END_SLOT),
- SWR_VTX_NUM_SLOTS = (1 + VERTEX_ATTRIB_END_SLOT)
-};
-
-// SoAoSoA
-struct simdvertex
-{
- simdvector attrib[SWR_VTX_NUM_SLOTS];
-};
-
-struct simd16vertex
-{
- simd16vector attrib[SWR_VTX_NUM_SLOTS];
-};
-
-template <typename SIMD_T>
-struct SIMDVERTEX_T
-{
- typename SIMD_T::Vec4 attrib[SWR_VTX_NUM_SLOTS];
-};
-
-struct SWR_WORKER_DATA
-{
- HANDLE hArContext; // handle to the archrast context
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_SHADER_STATS
-/// @brief Structure passed to shader for stats collection.
-/////////////////////////////////////////////////////////////////////////
-struct SWR_SHADER_STATS
-{
- uint32_t numInstExecuted; // This is roughly the API instructions executed and not x86.
- uint32_t numSampleExecuted;
- uint32_t numSampleLExecuted;
- uint32_t numSampleBExecuted;
- uint32_t numSampleCExecuted;
- uint32_t numSampleCLZExecuted;
- uint32_t numSampleCDExecuted;
- uint32_t numGather4Executed;
- uint32_t numGather4CExecuted;
- uint32_t numGather4CPOExecuted;
- uint32_t numGather4CPOCExecuted;
- uint32_t numLodExecuted;
-};
-
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_VS_CONTEXT
-/// @brief Input to vertex shader
-/////////////////////////////////////////////////////////////////////////
-struct SWR_VS_CONTEXT
-{
- simdvertex* pVin; // IN: SIMD input vertex data store
- simdvertex* pVout; // OUT: SIMD output vertex data store
-
- uint32_t InstanceID; // IN: Instance ID, constant across all verts of the SIMD
- simdscalari VertexID; // IN: Vertex ID
- simdscalari mask; // IN: Active mask for shader
-
- // SIMD16 Frontend fields.
- uint32_t AlternateOffset; // IN: amount to offset for interleaving even/odd simd8 in
- // simd16vertex output
- simd16scalari mask16; // IN: Active mask for shader (16-wide)
- simd16scalari VertexID16; // IN: Vertex ID (16-wide)
-
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-};
-
-/////////////////////////////////////////////////////////////////////////
-/// ScalarCPoint
-/// @brief defines a control point element as passed from the output
-/// of the hull shader to the input of the domain shader
-/////////////////////////////////////////////////////////////////////////
-struct ScalarAttrib
-{
- float x;
- float y;
- float z;
- float w;
-};
-
-struct ScalarCPoint
-{
- ScalarAttrib attrib[SWR_VTX_NUM_SLOTS];
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_TESSELLATION_FACTORS
-/// @brief Tessellation factors structure (non-vector)
-/////////////////////////////////////////////////////////////////////////
-struct SWR_TESSELLATION_FACTORS
-{
- float OuterTessFactors[SWR_NUM_OUTER_TESS_FACTORS];
- float InnerTessFactors[SWR_NUM_INNER_TESS_FACTORS];
- float pad[2];
-};
-
-SWR_STATIC_ASSERT(sizeof(SWR_TESSELLATION_FACTORS) == 32);
-
-#define MAX_NUM_VERTS_PER_PRIM 32 // support up to 32 control point patches
-struct ScalarPatch
-{
- SWR_TESSELLATION_FACTORS tessFactors;
- ScalarCPoint cp[MAX_NUM_VERTS_PER_PRIM];
- ScalarCPoint patchData;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_HS_CONTEXT
-/// @brief Input to hull shader
-/////////////////////////////////////////////////////////////////////////
-struct SWR_HS_CONTEXT
-{
- simdvertex vert[MAX_NUM_VERTS_PER_PRIM]; // IN: (SIMD) input primitive data
- simdscalari PrimitiveID; // IN: (SIMD) primitive ID generated from the draw call
- simdscalari mask; // IN: Active mask for shader
- uint32_t outputSize; // IN: Size of HS output (per lane)
- ScalarPatch* pCPout; // OUT: Output control point patch SIMD-sized-array of SCALAR patches
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_DS_CONTEXT
-/// @brief Input to domain shader
-/////////////////////////////////////////////////////////////////////////
-struct SWR_DS_CONTEXT
-{
- uint32_t PrimitiveID; // IN: (SCALAR) PrimitiveID for the patch associated with the DS invocation
- uint32_t vectorOffset; // IN: (SCALAR) vector index offset into SIMD data.
- uint32_t vectorStride; // IN: (SCALAR) stride (in vectors) of output data per attribute-component
- uint32_t outVertexAttribOffset; // IN: (SCALAR) Offset to the attributes as processed by the next shader stage.
- ScalarPatch* pCpIn; // IN: (SCALAR) Control patch
- simdscalar* pDomainU; // IN: (SIMD) Domain Point U coords
- simdscalar* pDomainV; // IN: (SIMD) Domain Point V coords
- simdscalari mask; // IN: Active mask for shader
- simdscalar* pOutputData; // OUT: (SIMD) Vertex Attributes (2D array of vectors, one row per attribute-component)
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_GS_CONTEXT
-/// @brief Input to geometry shader.
-/////////////////////////////////////////////////////////////////////////
-struct SWR_GS_CONTEXT
-{
- simdvector* pVerts; // IN: input primitive data for SIMD prims
- uint32_t inputVertStride; // IN: input vertex stride, in attributes
- simdscalari PrimitiveID; // IN: input primitive ID generated from the draw call
- uint32_t InstanceID; // IN: input instance ID
- simdscalari mask; // IN: Active mask for shader
- uint8_t* pStreams[KNOB_SIMD_WIDTH]; // OUT: output stream (contains vertices for all output streams)
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-};
-
-struct PixelPositions
-{
- simdscalar UL;
- simdscalar center;
- simdscalar sample;
- simdscalar centroid;
-};
-
-#define SWR_MAX_NUM_MULTISAMPLES 16
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_PS_CONTEXT
-/// @brief Input to pixel shader.
-/////////////////////////////////////////////////////////////////////////
-struct SWR_PS_CONTEXT
-{
- PixelPositions vX; // IN: x location(s) of pixels
- PixelPositions vY; // IN: x location(s) of pixels
- simdscalar vZ; // INOUT: z location of pixels
- simdscalari activeMask; // OUT: mask for kill
- simdscalar inputMask; // IN: input coverage mask for all samples
- simdscalari oMask; // OUT: mask for output coverage
-
- PixelPositions vI; // barycentric coords evaluated at pixel center, sample position, centroid
- PixelPositions vJ;
- PixelPositions vOneOverW; // IN: 1/w
-
- const float* pAttribs; // IN: pointer to attribute barycentric coefficients
- const float* pPerspAttribs; // IN: pointer to attribute/w barycentric coefficients
- const float* pRecipW; // IN: pointer to 1/w coord for each vertex
- const float* I; // IN: Barycentric A, B, and C coefs used to compute I
- const float* J; // IN: Barycentric A, B, and C coefs used to compute J
- float recipDet; // IN: 1/Det, used when barycentric interpolating attributes
- const float* pSamplePosX; // IN: array of sample positions
- const float* pSamplePosY; // IN: array of sample positions
- simdvector shaded[SWR_NUM_RENDERTARGETS]; // OUT: result color per rendertarget
-
- uint32_t frontFace; // IN: front- 1, back- 0
- uint32_t sampleIndex; // IN: sampleIndex
- uint32_t renderTargetArrayIndex; // IN: render target array index from GS
- uint32_t viewportIndex; // IN: viewport index from GS
- uint32_t rasterizerSampleCount; // IN: sample count used by the rasterizer
-
- uint8_t* pColorBuffer[SWR_NUM_RENDERTARGETS]; // IN: Pointers to render target hottiles
-
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-
- BucketManager *pBucketManager; // @llvm_struct - IN: performance buckets.
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_CS_CONTEXT
-/// @brief Input to compute shader.
-/////////////////////////////////////////////////////////////////////////
-struct SWR_CS_CONTEXT
-{
- // The ThreadGroupId is the current thread group index relative
- // to all thread groups in the Dispatch call. The ThreadId, ThreadIdInGroup,
- // and ThreadIdInGroupFlattened can be derived from ThreadGroupId in the shader.
-
- // Compute shader accepts the following system values.
- // o ThreadId - Current thread id relative to all other threads in dispatch.
- // o ThreadGroupId - Current thread group id relative to all other groups in dispatch.
- // o ThreadIdInGroup - Current thread relative to all threads in the current thread group.
- // o ThreadIdInGroupFlattened - Flattened linear id derived from ThreadIdInGroup.
- //
- // All of these system values can be computed in the shader. They will be
- // derived from the current tile counter. The tile counter is an atomic counter that
- // resides in the draw context and is initialized to the product of the dispatch dims.
- //
- // tileCounter = dispatchDims.x * dispatchDims.y * dispatchDims.z
- //
- // Each CPU worker thread will atomically decrement this counter and passes the current
- // count into the shader. When the count reaches 0 then all thread groups in the
- // dispatch call have been completed.
-
- uint32_t tileCounter; // The tile counter value for this thread group.
-
- // Dispatch dimensions used by shader to compute system values from the tile counter.
- uint32_t dispatchDims[3];
-
- uint8_t* pTGSM; // Thread Group Shared Memory pointer.
- uint8_t* pSpillFillBuffer; // Spill/fill buffer for barrier support
- uint8_t* pScratchSpace; // Pointer to scratch space buffer used by the shader, shader is
- // responsible for subdividing scratch space per instance/simd
- uint32_t scratchSpacePerWarp; // Scratch space per work item x SIMD_WIDTH
-
- SWR_SHADER_STATS stats; // OUT: shader statistics used for archrast.
-};
-
-// enums
-enum SWR_TILE_MODE
-{
- SWR_TILE_NONE = 0x0, // Linear mode (no tiling)
- SWR_TILE_MODE_WMAJOR, // W major tiling
- SWR_TILE_MODE_XMAJOR, // X major tiling
- SWR_TILE_MODE_YMAJOR, // Y major tiling
- SWR_TILE_SWRZ, // SWR-Z tiling
-
-
- SWR_TILE_MODE_COUNT
-};
-
-enum SWR_SURFACE_TYPE
-{
- SURFACE_1D = 0,
- SURFACE_2D = 1,
- SURFACE_3D = 2,
- SURFACE_CUBE = 3,
- SURFACE_BUFFER = 4,
- SURFACE_STRUCTURED_BUFFER = 5,
- SURFACE_NULL = 7
-};
-
-enum SWR_ZFUNCTION
-{
- ZFUNC_ALWAYS,
- ZFUNC_NEVER,
- ZFUNC_LT,
- ZFUNC_EQ,
- ZFUNC_LE,
- ZFUNC_GT,
- ZFUNC_NE,
- ZFUNC_GE,
- NUM_ZFUNC
-};
-
-enum SWR_STENCILOP
-{
- STENCILOP_KEEP,
- STENCILOP_ZERO,
- STENCILOP_REPLACE,
- STENCILOP_INCRSAT,
- STENCILOP_DECRSAT,
- STENCILOP_INCR,
- STENCILOP_DECR,
- STENCILOP_INVERT
-};
-
-enum SWR_BLEND_FACTOR
-{
- BLENDFACTOR_ONE,
- BLENDFACTOR_SRC_COLOR,
- BLENDFACTOR_SRC_ALPHA,
- BLENDFACTOR_DST_ALPHA,
- BLENDFACTOR_DST_COLOR,
- BLENDFACTOR_SRC_ALPHA_SATURATE,
- BLENDFACTOR_CONST_COLOR,
- BLENDFACTOR_CONST_ALPHA,
- BLENDFACTOR_SRC1_COLOR,
- BLENDFACTOR_SRC1_ALPHA,
- BLENDFACTOR_ZERO,
- BLENDFACTOR_INV_SRC_COLOR,
- BLENDFACTOR_INV_SRC_ALPHA,
- BLENDFACTOR_INV_DST_ALPHA,
- BLENDFACTOR_INV_DST_COLOR,
- BLENDFACTOR_INV_CONST_COLOR,
- BLENDFACTOR_INV_CONST_ALPHA,
- BLENDFACTOR_INV_SRC1_COLOR,
- BLENDFACTOR_INV_SRC1_ALPHA
-};
-
-enum SWR_BLEND_OP
-{
- BLENDOP_ADD,
- BLENDOP_SUBTRACT,
- BLENDOP_REVSUBTRACT,
- BLENDOP_MIN,
- BLENDOP_MAX,
-};
-
-enum SWR_LOGIC_OP
-{
- LOGICOP_CLEAR,
- LOGICOP_NOR,
- LOGICOP_AND_INVERTED,
- LOGICOP_COPY_INVERTED,
- LOGICOP_AND_REVERSE,
- LOGICOP_INVERT,
- LOGICOP_XOR,
- LOGICOP_NAND,
- LOGICOP_AND,
- LOGICOP_EQUIV,
- LOGICOP_NOOP,
- LOGICOP_OR_INVERTED,
- LOGICOP_COPY,
- LOGICOP_OR_REVERSE,
- LOGICOP_OR,
- LOGICOP_SET,
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_AUX_MODE
-/// @brief Specifies how the auxiliary buffer is used by the driver.
-//////////////////////////////////////////////////////////////////////////
-enum SWR_AUX_MODE
-{
- AUX_MODE_NONE,
- AUX_MODE_COLOR,
- AUX_MODE_UAV,
- AUX_MODE_DEPTH,
-};
-
-// vertex fetch state
-// WARNING- any changes to this struct need to be reflected
-// in the fetch shader jit
-struct SWR_VERTEX_BUFFER_STATE
-{
- gfxptr_t xpData;
- uint32_t index;
- uint32_t pitch;
- uint32_t size;
- uint32_t minVertex; // min vertex (for bounds checking)
- uint32_t maxVertex; // size / pitch. precalculated value used by fetch shader for OOB checks
- uint32_t partialInboundsSize; // size % pitch. precalculated value used by fetch shader for
- // partially OOB vertices
-};
-
-struct SWR_INDEX_BUFFER_STATE
-{
- gfxptr_t xpIndices;
- // Format type for indices (e.g. UINT16, UINT32, etc.)
- SWR_FORMAT format; // @llvm_enum
- uint32_t size;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_FETCH_CONTEXT
-/// @brief Input to fetch shader.
-/// @note WARNING - Changes to this struct need to be reflected in the
-/// fetch shader jit.
-/////////////////////////////////////////////////////////////////////////
-struct SWR_FETCH_CONTEXT
-{
- const SWR_VERTEX_BUFFER_STATE* pStreams; // IN: array of bound vertex buffers
- gfxptr_t xpIndices; // IN: pointer to int32 index buffer for indexed draws
- gfxptr_t xpLastIndex; // IN: pointer to end of index buffer, used for bounds checking
- uint32_t CurInstance; // IN: current instance
- uint32_t BaseVertex; // IN: base vertex
- uint32_t StartVertex; // IN: start vertex
- uint32_t StartInstance; // IN: start instance
- simdscalari VertexID; // OUT: vector of vertex IDs
- simdscalari CutMask; // OUT: vector mask of indices which have the cut index value
-#if USE_SIMD16_SHADERS
- // simd16scalari VertexID; // OUT: vector of vertex IDs
- // simd16scalari CutMask; // OUT: vector mask of indices which have the
- // cut index value
- simdscalari VertexID2; // OUT: vector of vertex IDs
- simdscalari CutMask2; // OUT: vector mask of indices which have the cut index value
-#endif
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_STATS
-///
-/// @brief All statistics generated by SWR go here. These are public
-/// to driver.
-/////////////////////////////////////////////////////////////////////////
-OSALIGNLINE(struct) SWR_STATS
-{
- // Occlusion Query
- uint64_t DepthPassCount; // Number of passing depth tests. Not exact.
-
- // Pipeline Stats
- uint64_t PsInvocations; // Number of Pixel Shader invocations
- uint64_t CsInvocations; // Number of Compute Shader invocations
-
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_STATS
-///
-/// @brief All statistics generated by FE.
-/////////////////////////////////////////////////////////////////////////
-OSALIGNLINE(struct) SWR_STATS_FE
-{
- uint64_t IaVertices; // Number of Fetch Shader vertices
- uint64_t IaPrimitives; // Number of PA primitives.
- uint64_t VsInvocations; // Number of Vertex Shader invocations
- uint64_t HsInvocations; // Number of Hull Shader invocations
- uint64_t DsInvocations; // Number of Domain Shader invocations
- uint64_t GsInvocations; // Number of Geometry Shader invocations
- uint64_t GsPrimitives; // Number of prims GS outputs.
- uint64_t CInvocations; // Number of clipper invocations
- uint64_t CPrimitives; // Number of clipper primitives.
-
- // Streamout Stats
- uint64_t SoPrimStorageNeeded[4];
- uint64_t SoNumPrimsWritten[4];
-};
-
- //////////////////////////////////////////////////////////////////////////
- /// STREAMOUT_BUFFERS
- /////////////////////////////////////////////////////////////////////////
-
-#define MAX_SO_STREAMS 4
-#define MAX_SO_BUFFERS 4
-#define MAX_ATTRIBUTES 32
-
-struct SWR_STREAMOUT_BUFFER
-{
- // Pointers to streamout buffers.
- gfxptr_t pBuffer;
-
- // Offset to the SO write offset. If not null then we update offset here.
- gfxptr_t pWriteOffset;
-
- bool enable;
- bool soWriteEnable;
-
- // Size of buffer in dwords.
- uint32_t bufferSize;
-
- // Vertex pitch of buffer in dwords.
- uint32_t pitch;
-
- // Offset into buffer in dwords. SOS will increment this offset.
- uint32_t streamOffset;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// STREAMOUT_STATE
-/////////////////////////////////////////////////////////////////////////
-struct SWR_STREAMOUT_STATE
-{
- // This disables stream output.
- bool soEnable;
-
- // which streams are enabled for streamout
- bool streamEnable[MAX_SO_STREAMS];
-
- // If set then do not send any streams to the rasterizer.
- bool rasterizerDisable;
-
- // Specifies which stream to send to the rasterizer.
- uint32_t streamToRasterizer;
-
- // The stream masks specify which attributes are sent to which streams.
- // These masks help the FE to setup the pPrimData buffer that is passed
- // the Stream Output Shader (SOS) function.
- uint64_t streamMasks[MAX_SO_STREAMS];
-
- // Number of attributes, including position, per vertex that are streamed out.
- // This should match number of bits in stream mask.
- uint32_t streamNumEntries[MAX_SO_STREAMS];
-
- // Offset to the start of the attributes of the input vertices, in simdvector units
- uint32_t vertexAttribOffset[MAX_SO_STREAMS];
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// STREAMOUT_CONTEXT - Passed to SOS
-/////////////////////////////////////////////////////////////////////////
-struct SWR_STREAMOUT_CONTEXT
-{
- uint32_t* pPrimData;
- SWR_STREAMOUT_BUFFER* pBuffer[MAX_SO_STREAMS];
-
- // Num prims written for this stream
- uint32_t numPrimsWritten;
-
- // Num prims that should have been written if there were no overflow.
- uint32_t numPrimStorageNeeded;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_GS_STATE - Geometry shader state
-/////////////////////////////////////////////////////////////////////////
-struct SWR_GS_STATE
-{
- bool gsEnable;
-
- // If true, geometry shader emits a single stream, with separate cut buffer.
- // If false, geometry shader emits vertices for multiple streams to the stream buffer, with a
- // separate StreamID buffer to map vertices to streams
- bool isSingleStream;
-
- // Number of input attributes per vertex. Used by the frontend to
- // optimize assembling primitives for GS
- uint32_t numInputAttribs;
-
- // Stride of incoming verts in attributes
- uint32_t inputVertStride;
-
- // Output topology - can be point, tristrip, linestrip, or rectlist
- PRIMITIVE_TOPOLOGY outputTopology; // @llvm_enum
-
- // Maximum number of verts that can be emitted by a single instance of the GS
- uint32_t maxNumVerts;
-
- // Instance count
- uint32_t instanceCount;
-
- // When single stream is enabled, singleStreamID dictates which stream is being output.
- // field ignored if isSingleStream is false
- uint32_t singleStreamID;
-
- // Total amount of memory to allocate for one instance of the shader output in bytes
- uint32_t allocationSize;
-
- // Offset to start reading data per input vertex in simdvector units. This can be used to
- // skip over any vertex data output from the previous stage that is unused in the GS, removing
- // unnecessary vertex processing.
- uint32_t vertexAttribOffset;
-
- // Size of the control data section which contains cut or streamID data, in simdscalar units.
- // Should be sized to handle the maximum number of verts output by the GS. Can be 0 if there are
- // no cuts or streamID bits.
- uint32_t controlDataSize;
-
- // Offset to the control data section, in bytes
- uint32_t controlDataOffset;
-
- // Total size of an output vertex, in simdvector units
- uint32_t outputVertexSize;
-
- // Offset to the start of the vertex section, in bytes
- uint32_t outputVertexOffset;
-
- // Set this to non-zero to indicate that the shader outputs a static number of verts. If zero,
- // shader is expected to store the final vertex count in the first dword of the gs output
- // stream.
- uint32_t staticVertexCount;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_TS_OUTPUT_TOPOLOGY - Defines data output by the tessellator / DS
-/////////////////////////////////////////////////////////////////////////
-enum SWR_TS_OUTPUT_TOPOLOGY
-{
- SWR_TS_OUTPUT_POINT,
- SWR_TS_OUTPUT_LINE,
- SWR_TS_OUTPUT_TRI_CW,
- SWR_TS_OUTPUT_TRI_CCW,
-
- SWR_TS_OUTPUT_TOPOLOGY_COUNT
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_TS_PARTITIONING - Defines tessellation algorithm
-/////////////////////////////////////////////////////////////////////////
-enum SWR_TS_PARTITIONING
-{
- SWR_TS_INTEGER,
- SWR_TS_ODD_FRACTIONAL,
- SWR_TS_EVEN_FRACTIONAL,
-
- SWR_TS_PARTITIONING_COUNT
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_TS_DOMAIN - Defines Tessellation Domain
-/////////////////////////////////////////////////////////////////////////
-enum SWR_TS_DOMAIN
-{
- SWR_TS_QUAD,
- SWR_TS_TRI,
- SWR_TS_ISOLINE,
-
- SWR_TS_DOMAIN_COUNT
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_TS_STATE - Tessellation state
-/////////////////////////////////////////////////////////////////////////
-struct SWR_TS_STATE
-{
- bool tsEnable;
-
- SWR_TS_OUTPUT_TOPOLOGY tsOutputTopology; // @llvm_enum
- SWR_TS_PARTITIONING partitioning; // @llvm_enum
- SWR_TS_DOMAIN domain; // @llvm_enum
-
- PRIMITIVE_TOPOLOGY postDSTopology; // @llvm_enum
-
- uint32_t numHsInputAttribs;
- uint32_t numHsOutputAttribs;
- uint32_t hsAllocationSize; // Size of HS output in bytes, per lane
-
- uint32_t numDsOutputAttribs;
- uint32_t dsAllocationSize;
- uint32_t dsOutVtxAttribOffset;
-
- // Offset to the start of the attributes of the input vertices, in simdvector units
- uint32_t srcVertexAttribOffset;
-
- // Offset to the start of the attributes expected by the hull shader
- uint32_t vertexAttribOffset;
-};
-
-// output merger state
-struct SWR_RENDER_TARGET_BLEND_STATE
-{
- uint8_t writeDisableRed : 1;
- uint8_t writeDisableGreen : 1;
- uint8_t writeDisableBlue : 1;
- uint8_t writeDisableAlpha : 1;
-};
-static_assert(sizeof(SWR_RENDER_TARGET_BLEND_STATE) == 1,
- "Invalid SWR_RENDER_TARGET_BLEND_STATE size");
-
-enum SWR_MULTISAMPLE_COUNT
-{
- SWR_MULTISAMPLE_1X = 0,
- SWR_MULTISAMPLE_2X,
- SWR_MULTISAMPLE_4X,
- SWR_MULTISAMPLE_8X,
- SWR_MULTISAMPLE_16X,
- SWR_MULTISAMPLE_TYPE_COUNT
-};
-
-static INLINE uint32_t GetNumSamples(/* SWR_SAMPLE_COUNT */ int sampleCountEnum) // @llvm_func_start
-{
- return uint32_t(1) << sampleCountEnum;
-} // @llvm_func_end
-
-struct SWR_BLEND_STATE
-{
- // constant blend factor color in RGBA float
- float constantColor[4];
-
- // alpha test reference value in unorm8 or float32
- uint32_t alphaTestReference;
- uint32_t sampleMask;
- // all RT's have the same sample count
- ///@todo move this to Output Merger state when we refactor
- SWR_MULTISAMPLE_COUNT sampleCount; // @llvm_enum
-
- SWR_RENDER_TARGET_BLEND_STATE renderTarget[SWR_NUM_RENDERTARGETS];
-};
-static_assert(sizeof(SWR_BLEND_STATE) == 36, "Invalid SWR_BLEND_STATE size");
-
-struct SWR_BLEND_CONTEXT
-{
- const SWR_BLEND_STATE* pBlendState;
- simdvector* src;
- simdvector* src1;
- simdvector* src0alpha;
- uint32_t sampleNum;
- simdvector* pDst;
- simdvector* result;
- simdscalari* oMask;
- simdscalari* pMask;
- uint32_t isAlphaTested;
- uint32_t isAlphaBlended;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// FUNCTION POINTERS FOR SHADERS
-
-#if USE_SIMD16_SHADERS
-typedef void(__cdecl *PFN_FETCH_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_FETCH_CONTEXT& fetchInfo, simd16vertex& out);
-#else
-typedef void(__cdecl *PFN_FETCH_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_FETCH_CONTEXT& fetchInfo, simdvertex& out);
-#endif
-typedef void(__cdecl *PFN_VERTEX_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_VS_CONTEXT* pVsContext);
-typedef void(__cdecl *PFN_HS_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_HS_CONTEXT* pHsContext);
-typedef void(__cdecl *PFN_DS_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_DS_CONTEXT* pDsContext);
-typedef void(__cdecl *PFN_GS_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_GS_CONTEXT* pGsContext);
-typedef void(__cdecl *PFN_CS_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_CS_CONTEXT* pCsContext);
-typedef void(__cdecl *PFN_SO_FUNC)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_STREAMOUT_CONTEXT& soContext);
-typedef void(__cdecl *PFN_PIXEL_KERNEL)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_PS_CONTEXT* pContext);
-typedef void(__cdecl *PFN_CPIXEL_KERNEL)(HANDLE hPrivateData, HANDLE hWorkerPrivateData, SWR_PS_CONTEXT* pContext);
-typedef void(__cdecl *PFN_BLEND_JIT_FUNC)(SWR_BLEND_CONTEXT*);
-typedef simdscalar(*PFN_QUANTIZE_DEPTH)(simdscalar const &);
-
-
-//////////////////////////////////////////////////////////////////////////
-/// FRONTEND_STATE
-/////////////////////////////////////////////////////////////////////////
-struct SWR_FRONTEND_STATE
-{
- // skip clip test, perspective divide, and viewport transform
- // intended for verts in screen space
- bool vpTransformDisable;
- bool bEnableCutIndex;
- union
- {
- struct
- {
- uint32_t triFan : 2;
- uint32_t lineStripList : 1;
- uint32_t triStripList : 2;
- };
- uint32_t bits;
- } provokingVertex;
- uint32_t topologyProvokingVertex; // provoking vertex for the draw topology
-
- // Size of a vertex in simdvector units. Should be sized to the
- // maximum of the input/output of the vertex shader.
- uint32_t vsVertexSize;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// VIEWPORT_MATRIX
-/////////////////////////////////////////////////////////////////////////
-struct SWR_VIEWPORT_MATRIX
-{
- float m00;
- float m11;
- float m22;
- float m30;
- float m31;
- float m32;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// VIEWPORT_MATRIXES
-/////////////////////////////////////////////////////////////////////////
-struct SWR_VIEWPORT_MATRICES
-{
- float m00[KNOB_NUM_VIEWPORTS_SCISSORS];
- float m11[KNOB_NUM_VIEWPORTS_SCISSORS];
- float m22[KNOB_NUM_VIEWPORTS_SCISSORS];
- float m30[KNOB_NUM_VIEWPORTS_SCISSORS];
- float m31[KNOB_NUM_VIEWPORTS_SCISSORS];
- float m32[KNOB_NUM_VIEWPORTS_SCISSORS];
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_VIEWPORT
-/////////////////////////////////////////////////////////////////////////
-struct SWR_VIEWPORT
-{
- float x;
- float y;
- float width;
- float height;
- float minZ;
- float maxZ;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_CULLMODE
-//////////////////////////////////////////////////////////////////////////
-enum SWR_CULLMODE
-{
- SWR_CULLMODE_BOTH,
- SWR_CULLMODE_NONE,
- SWR_CULLMODE_FRONT,
- SWR_CULLMODE_BACK
-};
-
-enum SWR_FILLMODE
-{
- SWR_FILLMODE_POINT,
- SWR_FILLMODE_WIREFRAME,
- SWR_FILLMODE_SOLID
-};
-
-enum SWR_FRONTWINDING
-{
- SWR_FRONTWINDING_CW,
- SWR_FRONTWINDING_CCW
-};
-
-
-enum SWR_PIXEL_LOCATION
-{
- SWR_PIXEL_LOCATION_CENTER,
- SWR_PIXEL_LOCATION_UL,
-};
-
-// fixed point screen space sample locations within a pixel
-struct SWR_MULTISAMPLE_POS
-{
-public:
- INLINE void SetXi(uint32_t sampleNum, uint32_t val) { _xi[sampleNum] = val; }; // @llvm_func
- INLINE void SetYi(uint32_t sampleNum, uint32_t val) { _yi[sampleNum] = val; }; // @llvm_func
- INLINE uint32_t Xi(uint32_t sampleNum) const { return _xi[sampleNum]; }; // @llvm_func
- INLINE uint32_t Yi(uint32_t sampleNum) const { return _yi[sampleNum]; }; // @llvm_func
- INLINE void SetX(uint32_t sampleNum, float val) { _x[sampleNum] = val; }; // @llvm_func
- INLINE void SetY(uint32_t sampleNum, float val) { _y[sampleNum] = val; }; // @llvm_func
- INLINE float X(uint32_t sampleNum) const { return _x[sampleNum]; }; // @llvm_func
- INLINE float Y(uint32_t sampleNum) const { return _y[sampleNum]; }; // @llvm_func
- typedef const float (&sampleArrayT)[SWR_MAX_NUM_MULTISAMPLES]; //@llvm_typedef
- INLINE sampleArrayT X() const { return _x; }; // @llvm_func
- INLINE sampleArrayT Y() const { return _y; }; // @llvm_func
- INLINE const __m128i& vXi(uint32_t sampleNum) const { return _vXi[sampleNum]; }; // @llvm_func
- INLINE const __m128i& vYi(uint32_t sampleNum) const { return _vYi[sampleNum]; }; // @llvm_func
- INLINE const simdscalar& vX(uint32_t sampleNum) const { return _vX[sampleNum]; }; // @llvm_func
- INLINE const simdscalar& vY(uint32_t sampleNum) const { return _vY[sampleNum]; }; // @llvm_func
- INLINE const __m128i& TileSampleOffsetsX() const { return tileSampleOffsetsX; }; // @llvm_func
- INLINE const __m128i& TileSampleOffsetsY() const { return tileSampleOffsetsY; }; // @llvm_func
-
- INLINE void PrecalcSampleData(int numSamples); //@llvm_func
-
-private:
- template <typename MaskT>
- INLINE __m128i expandThenBlend4(uint32_t* min, uint32_t* max); // @llvm_func
- INLINE void CalcTileSampleOffsets(int numSamples); // @llvm_func
-
- // scalar sample values
- uint32_t _xi[SWR_MAX_NUM_MULTISAMPLES];
- uint32_t _yi[SWR_MAX_NUM_MULTISAMPLES];
- float _x[SWR_MAX_NUM_MULTISAMPLES];
- float _y[SWR_MAX_NUM_MULTISAMPLES];
-
- // precalc'd / vectorized samples
- __m128i _vXi[SWR_MAX_NUM_MULTISAMPLES];
- __m128i _vYi[SWR_MAX_NUM_MULTISAMPLES];
- simdscalar _vX[SWR_MAX_NUM_MULTISAMPLES];
- simdscalar _vY[SWR_MAX_NUM_MULTISAMPLES];
- __m128i tileSampleOffsetsX;
- __m128i tileSampleOffsetsY;
-};
-
-//////////////////////////////////////////////////////////////////////////
-/// SWR_RASTSTATE
-//////////////////////////////////////////////////////////////////////////
-struct SWR_RASTSTATE
-{
- uint32_t cullMode : 2;
- uint32_t fillMode : 2;
- uint32_t frontWinding : 1;
- uint32_t scissorEnable : 1;
- uint32_t depthClipEnable : 1;
- uint32_t clipEnable : 1;
- uint32_t clipHalfZ : 1;
- uint32_t pointParam : 1;
- uint32_t pointSpriteEnable : 1;
- uint32_t pointSpriteTopOrigin : 1;
- uint32_t forcedSampleCount : 1;
- uint32_t pixelOffset : 1;
- uint32_t depthBiasPreAdjusted : 1; ///< depth bias constant is in float units, not per-format Z units
- uint32_t conservativeRast : 1;
-
- float pointSize;
- float lineWidth;
-
- float depthBias;
- float slopeScaledDepthBias;
- float depthBiasClamp;
- SWR_FORMAT depthFormat; // @llvm_enum
-
- // sample count the rasterizer is running at
- SWR_MULTISAMPLE_COUNT sampleCount; // @llvm_enum
- uint32_t pixelLocation; // UL or Center
- SWR_MULTISAMPLE_POS samplePositions; // @llvm_struct
- bool bIsCenterPattern; // @llvm_enum
-};
-
-
-enum SWR_CONSTANT_SOURCE
-{
- SWR_CONSTANT_SOURCE_CONST_0000,
- SWR_CONSTANT_SOURCE_CONST_0001_FLOAT,
- SWR_CONSTANT_SOURCE_CONST_1111_FLOAT,
- SWR_CONSTANT_SOURCE_PRIM_ID
-};
-
-struct SWR_ATTRIB_SWIZZLE
-{
- uint16_t sourceAttrib : 5; // source attribute
- uint16_t constantSource : 2; // constant source to apply
- uint16_t componentOverrideMask : 4; // override component with constant source
-};
-
-// backend state
-struct SWR_BACKEND_STATE
-{
- uint32_t constantInterpolationMask; // bitmask indicating which attributes have constant
- // interpolation
- uint32_t pointSpriteTexCoordMask; // bitmask indicating the attribute(s) which should be
- // interpreted as tex coordinates
-
- bool swizzleEnable; // when enabled, core will parse the swizzle map when
- // setting up attributes for the backend, otherwise
- // all attributes up to numAttributes will be sent
- uint8_t numAttributes; // total number of attributes to send to backend (up to 32)
- uint8_t numComponents[32]; // number of components to setup per attribute, this reduces some
- // calculations for unneeded components
-
- bool readRenderTargetArrayIndex; // Forward render target array index from last FE stage to the
- // backend
- bool readViewportArrayIndex; // Read viewport array index from last FE stage during binning
-
- // User clip/cull distance enables
- uint8_t cullDistanceMask;
- uint8_t clipDistanceMask;
-
- // padding to ensure swizzleMap starts 64B offset from start of the struct
- // and that the next fields are dword aligned.
- uint8_t pad[10];
-
- // Offset to the start of the attributes of the input vertices, in simdvector units
- uint32_t vertexAttribOffset;
-
- // Offset to clip/cull attrib section of the vertex, in simdvector units
- uint32_t vertexClipCullOffset;
-
- SWR_ATTRIB_SWIZZLE swizzleMap[32];
-};
-static_assert(sizeof(SWR_BACKEND_STATE) == 128,
- "Adjust padding to keep size (or remove this assert)");
-
-
-union SWR_DEPTH_STENCIL_STATE
-{
- struct
- {
- // dword 0
- uint32_t depthWriteEnable : 1;
- uint32_t depthTestEnable : 1;
- uint32_t stencilWriteEnable : 1;
- uint32_t stencilTestEnable : 1;
- uint32_t doubleSidedStencilTestEnable : 1;
-
- uint32_t depthTestFunc : 3;
- uint32_t stencilTestFunc : 3;
-
- uint32_t backfaceStencilPassDepthPassOp : 3;
- uint32_t backfaceStencilPassDepthFailOp : 3;
- uint32_t backfaceStencilFailOp : 3;
- uint32_t backfaceStencilTestFunc : 3;
- uint32_t stencilPassDepthPassOp : 3;
- uint32_t stencilPassDepthFailOp : 3;
- uint32_t stencilFailOp : 3;
-
- // dword 1
- uint8_t backfaceStencilWriteMask;
- uint8_t backfaceStencilTestMask;
- uint8_t stencilWriteMask;
- uint8_t stencilTestMask;
-
- // dword 2
- uint8_t backfaceStencilRefValue;
- uint8_t stencilRefValue;
- };
- uint32_t value[3];
-};
-
-enum SWR_SHADING_RATE
-{
- SWR_SHADING_RATE_PIXEL,
- SWR_SHADING_RATE_SAMPLE,
- SWR_SHADING_RATE_COUNT,
-};
-
-enum SWR_INPUT_COVERAGE
-{
- SWR_INPUT_COVERAGE_NONE,
- SWR_INPUT_COVERAGE_NORMAL,
- SWR_INPUT_COVERAGE_INNER_CONSERVATIVE,
- SWR_INPUT_COVERAGE_COUNT,
-};
-
-enum SWR_PS_POSITION_OFFSET
-{
- SWR_PS_POSITION_SAMPLE_NONE,
- SWR_PS_POSITION_SAMPLE_OFFSET,
- SWR_PS_POSITION_CENTROID_OFFSET,
- SWR_PS_POSITION_OFFSET_COUNT,
-};
-
-enum SWR_BARYCENTRICS_MASK
-{
- SWR_BARYCENTRIC_PER_PIXEL_MASK = 0x1,
- SWR_BARYCENTRIC_CENTROID_MASK = 0x2,
- SWR_BARYCENTRIC_PER_SAMPLE_MASK = 0x4,
-};
-
-// pixel shader state
-struct SWR_PS_STATE
-{
- // dword 0-1
- PFN_PIXEL_KERNEL pfnPixelShader; // @llvm_pfn
-
- // dword 2
- uint32_t killsPixel : 1; // pixel shader can kill pixels
- uint32_t inputCoverage : 2; // ps uses input coverage
- uint32_t writesODepth : 1; // pixel shader writes to depth
- uint32_t usesSourceDepth : 1; // pixel shader reads depth
- uint32_t shadingRate : 2; // shading per pixel / sample / coarse pixel
- uint32_t posOffset : 2; // type of offset (none, sample, centroid) to add to pixel position
- uint32_t barycentricsMask : 3; // which type(s) of barycentric coords does the PS interpolate
- // attributes with
- uint32_t usesUAV : 1; // pixel shader accesses UAV
- uint32_t forceEarlyZ : 1; // force execution of early depth/stencil test
-
- uint8_t renderTargetMask; // Mask of render targets written
-};
-
-// depth bounds state
-struct SWR_DEPTH_BOUNDS_STATE
-{
- bool depthBoundsTestEnable;
- float depthBoundsTestMinValue;
- float depthBoundsTestMaxValue;
-};
-// clang-format on