layers: DrawState changes to support resource binding updates
diff --git a/layers/draw_state.h b/layers/draw_state.h
index 0fb771e..d2d7650 100644
--- a/layers/draw_state.h
+++ b/layers/draw_state.h
@@ -32,18 +32,18 @@
DRAWSTATE_NONE, // Used for INFO & other non-error messages
DRAWSTATE_INTERNAL_ERROR, // Error with DrawState internal data structures
DRAWSTATE_NO_PIPELINE_BOUND, // Unable to identify a bound pipeline
- DRAWSTATE_INVALID_REGION, // Invalid DS region
+ DRAWSTATE_INVALID_POOL, // Invalid DS pool
DRAWSTATE_INVALID_SET, // Invalid DS
DRAWSTATE_INVALID_LAYOUT, // Invalid DS layout
DRAWSTATE_DS_END_WITHOUT_BEGIN, // EndDSUpdate called w/o corresponding BeginDSUpdate
- DRAWSTATE_UPDATE_WITHOUT_BEGIN, // Attempt to update descriptors w/o calling BeginDescriptorRegionUpdate
+ DRAWSTATE_UPDATE_WITHOUT_BEGIN, // Attempt to update descriptors w/o calling BeginDescriptorPoolUpdate
DRAWSTATE_INVALID_PIPELINE, // Invalid Pipeline referenced
DRAWSTATE_INVALID_CMD_BUFFER, // Invalid CmdBuffer referenced
DRAWSTATE_VTX_INDEX_OUT_OF_BOUNDS, // binding in xglCmdBindVertexData() too large for PSO's pVertexBindingDescriptions array
DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, // Invalid dyn state object
DRAWSTATE_MISSING_DOT_PROGRAM, // No "dot" program in order to generate png image
DRAWSTATE_BINDING_DS_NO_END_UPDATE, // DS bound to CmdBuffer w/o call to xglEndDescriptorSetUpdate())
- DRAWSTATE_NO_DS_REGION, // No DS Region is available
+ DRAWSTATE_NO_DS_POOL, // No DS Pool is available
DRAWSTATE_OUT_OF_MEMORY, // malloc failed
DRAWSTATE_DESCRIPTOR_TYPE_MISMATCH, // Type in layout vs. update are not the same
DRAWSTATE_DESCRIPTOR_UPDATE_OUT_OF_BOUNDS, // Descriptors set for update out of bounds for corresponding layout section
@@ -129,41 +129,37 @@
XGL_DYNAMIC_CB_STATE_CREATE_INFO cbci;
XGL_DYNAMIC_DS_STATE_CREATE_INFO dsci;
} create_info;
- //struct _DYNAMIC_STATE_NODE* pNext;
} DYNAMIC_STATE_NODE;
// Descriptor Data structures
// Layout Node has the core layout data
typedef struct _LAYOUT_NODE {
XGL_DESCRIPTOR_SET_LAYOUT layout;
- XGL_FLAGS stageFlags;
- uint32_t shaderStageBindPoints[XGL_NUM_SHADER_STAGE];
XGL_DESCRIPTOR_TYPE* pTypes; // Dynamic array that will be created to verify descriptor types
- XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfoList;
+ XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO createInfo;
uint32_t startIndex; // 1st index of this layout
uint32_t endIndex; // last index of this layout
- struct _LAYOUT_NODE* pPriorSetLayout; // Points to node w/ priorSetLayout
} LAYOUT_NODE;
typedef struct _SET_NODE {
XGL_DESCRIPTOR_SET set;
- XGL_DESCRIPTOR_REGION region;
+ XGL_DESCRIPTOR_POOL pool;
XGL_DESCRIPTOR_SET_USAGE setUsage;
// Head of LL of all Update structs for this set
GENERIC_HEADER* pUpdateStructs;
// Total num of descriptors in this set (count of its layout plus all prior layouts)
uint32_t descriptorCount;
GENERIC_HEADER** ppDescriptors; // Array where each index points to update node for its slot
- LAYOUT_NODE* pLayouts;
+ LAYOUT_NODE* pLayout; // Layout for this set
struct _SET_NODE* pNext;
} SET_NODE;
-typedef struct _REGION_NODE {
- XGL_DESCRIPTOR_REGION region;
- XGL_DESCRIPTOR_REGION_USAGE regionUsage;
+typedef struct _POOL_NODE {
+ XGL_DESCRIPTOR_POOL pool;
+ XGL_DESCRIPTOR_POOL_USAGE poolUsage;
uint32_t maxSets;
- XGL_DESCRIPTOR_REGION_CREATE_INFO createInfo;
- bool32_t updateActive; // Track if Region is in an update block
- SET_NODE* pSets; // Head of LL of sets for this Region
-} REGION_NODE;
+ XGL_DESCRIPTOR_POOL_CREATE_INFO createInfo;
+ bool32_t updateActive; // Track if Pool is in an update block
+ SET_NODE* pSets; // Head of LL of sets for this Pool
+} POOL_NODE;
// Cmd Buffer Tracking
typedef enum _CMD_TYPE
@@ -171,7 +167,7 @@
CMD_BINDPIPELINE,
CMD_BINDPIPELINEDELTA,
CMD_BINDDYNAMICSTATEOBJECT,
- CMD_BINDDESCRIPTORSET,
+ CMD_BINDDESCRIPTORSETS,
CMD_BINDINDEXBUFFER,
CMD_BINDVERTEXBUFFER,
CMD_DRAW,
@@ -182,6 +178,7 @@
CMD_DISPATCHINDIRECT,
CMD_COPYBUFFER,
CMD_COPYIMAGE,
+ CMD_BLITIMAGE,
CMD_COPYBUFFERTOIMAGE,
CMD_COPYIMAGETOBUFFER,
CMD_CLONEIMAGEDATA,
@@ -222,7 +219,7 @@
// Cmd Buffer Wrapper Struct
typedef struct _GLOBAL_CB_NODE {
XGL_CMD_BUFFER cmdBuffer;
- uint32_t queueNodeIndex;
+ uint32_t queueNodeIndex;
XGL_FLAGS flags;
XGL_FENCE fence; // fence tracking this cmd buffer
uint64_t numCmds; // number of cmds in this CB