layers: Updated DrawState to work with type safety changes
DrawState now working with cube demo, but lots of cleanup and TODO items that need to be addressed.
diff --git a/layers/draw_state.h b/layers/draw_state.h
index f50140e..3922468 100644
--- a/layers/draw_state.h
+++ b/layers/draw_state.h
@@ -74,6 +74,49 @@
NUM_DRAW_TYPES = (DRAW_END_RANGE - DRAW_BEGIN_RANGE + 1),
} DRAW_TYPE;
+typedef enum _DYNAMIC_STATE_BIND_POINT
+{
+ VK_STATE_BIND_POINT_VIEWPORT,
+ VK_STATE_BIND_POINT_RASTER,
+ VK_STATE_BIND_POINT_COLOR_BLEND,
+ VK_STATE_BIND_POINT_DEPTH_STENCIL,
+ VK_NUM_STATE_BIND_POINT // Used for array sizing
+} DYNAMIC_STATE_BIND_POINT;
+
+static string string_DYNAMIC_STATE_BIND_POINT(DYNAMIC_STATE_BIND_POINT sbp)
+{
+ switch (sbp)
+ {
+ case VK_STATE_BIND_POINT_VIEWPORT:
+ return "VIEWPORT";
+ case VK_STATE_BIND_POINT_RASTER:
+ return "RASTER";
+ case VK_STATE_BIND_POINT_COLOR_BLEND:
+ return "COLOR_BLEND";
+ case VK_STATE_BIND_POINT_DEPTH_STENCIL:
+ return "DEPTH_STENCIL";
+ default:
+ return "UNKNOWN_DYNAMIC_STATE_BIND_POINT";
+ }
+}
+
+static VkDbgObjectType dynamicStateBindPointToObjType(DYNAMIC_STATE_BIND_POINT sbp)
+{
+ switch (sbp)
+ {
+ case VK_STATE_BIND_POINT_VIEWPORT:
+ return VK_OBJECT_TYPE_DYNAMIC_VP_STATE;
+ case VK_STATE_BIND_POINT_RASTER:
+ return VK_OBJECT_TYPE_DYNAMIC_RS_STATE;
+ case VK_STATE_BIND_POINT_COLOR_BLEND:
+ return VK_OBJECT_TYPE_DYNAMIC_CB_STATE;
+ case VK_STATE_BIND_POINT_DEPTH_STENCIL:
+ return VK_OBJECT_TYPE_DYNAMIC_DS_STATE;
+ default:
+ return VK_OBJECT_TYPE_MAX_ENUM;
+ }
+}
+
typedef struct _SHADER_DS_MAPPING {
uint32_t slotCount;
VkDescriptorSetLayoutCreateInfo* pShaderMappingSlot;
@@ -119,30 +162,12 @@
VkSamplerCreateInfo createInfo;
} SAMPLER_NODE;
-typedef struct _IMAGE_NODE {
- union {
- VkImageViewCreateInfo ivci;
- VkAttachmentViewCreateInfo avci;
- } createInfo;
-} IMAGE_NODE;
-
typedef struct _BUFFER_NODE {
VkBufferView buffer;
VkBufferViewCreateInfo createInfo;
VkDescriptorInfo descriptorInfo;
} BUFFER_NODE;
-typedef struct _DYNAMIC_STATE_NODE {
- VkObjectType objType;
- VkDynamicStateObject stateObj;
- GENERIC_HEADER* pCreateInfo;
- union {
- VkDynamicVpStateCreateInfo vpci;
- VkDynamicRsStateCreateInfo rsci;
- VkDynamicCbStateCreateInfo cbci;
- VkDynamicDsStateCreateInfo dsci;
- } create_info;
-} DYNAMIC_STATE_NODE;
// Descriptor Data structures
// Layout Node has the core layout data
typedef struct _LAYOUT_NODE {
@@ -178,7 +203,10 @@
{
CMD_BINDPIPELINE,
CMD_BINDPIPELINEDELTA,
- CMD_BINDDYNAMICSTATEOBJECT,
+ CMD_BINDDYNAMICVIEWPORTSTATE,
+ CMD_BINDDYNAMICRASTERSTATE,
+ CMD_BINDDYNAMICCOLORBLENDSTATE,
+ CMD_BINDDYNAMICDEPTHSTENCILSTATE,
CMD_BINDDESCRIPTORSETS,
CMD_BINDINDEXBUFFER,
CMD_BINDVERTEXBUFFER,
@@ -244,6 +272,7 @@
CBSTATUS_DEPTH_STENCIL_BOUND = 0x00000020, // DS state object has been bound
CBSTATUS_INDEX_BUFFER_BOUND = 0x00000040, // Index buffer has been bound
} CBStatusFlagBits;
+
// Cmd Buffer Wrapper Struct
typedef struct _GLOBAL_CB_NODE {
VkCmdBuffer cmdBuffer;
@@ -260,7 +289,7 @@
// each individual CMD_NODE referencing its own "lastBound" state
VkPipeline lastBoundPipeline;
uint32_t lastVtxBinding;
- DYNAMIC_STATE_NODE* lastBoundDynamicState[VK_NUM_STATE_BIND_POINT];
+ uint64_t lastBoundDynamicState[VK_NUM_STATE_BIND_POINT];
VkDescriptorSet lastBoundDescriptorSet;
VkPipelineLayout lastBoundPipelineLayout;
VkRenderPass activeRenderPass;
@@ -268,12 +297,3 @@
VkFramebuffer framebuffer;
vector<VkDescriptorSet> boundDescriptorSets;
} GLOBAL_CB_NODE;
-
-//prototypes for extension functions
-void drawStateDumpDotFile(char* outFileName);
-void drawStateDumpPngFile(const VkDevice device, char* outFileName);
-void drawStateDumpCommandBufferDotFile(char* outFileName);
-// Func ptr typedefs
-typedef void (*DRAW_STATE_DUMP_DOT_FILE)(char*);
-typedef void (*DRAW_STATE_DUMP_PNG_FILE)(char*);
-typedef void (*DRAW_STATE_DUMP_COMMAND_BUFFER_DOT_FILE)(char*);