bug 14365: replace dynamic state objects
authorCourtney Goeltzenleuchter <courtney@LunarG.com>
Thu, 17 Sep 2015 21:06:17 +0000 (15:06 -0600)
committerCourtney Goeltzenleuchter <courtney@LunarG.com>
Wed, 23 Sep 2015 17:15:00 +0000 (11:15 -0600)
This is phase 1 of the replacement of dynamic state objects.
In this commit we remove the create and destroy functions
and rename the CmdBind... with CmdSet...

21 files changed:
demos/cube.c
demos/tri.c
demos/vulkaninfo.c
icd/nulldrv/nulldrv.c
include/vk_debug_report_lunarg.h
include/vk_layer.h
include/vulkan.h
layers/device_limits.cpp
layers/draw_state.cpp
layers/draw_state.h
layers/layer_common.h
layers/mem_tracker.cpp
layers/mem_tracker.h
layers/object_track.h
layers/param_checker.cpp
layers/vk_validation_layer_details.md
loader/gpa_helper.h
loader/table_ops.h
loader/trampoline.c
vk-layer-generate.py
vulkan.py

index e9341809cca70c623523c53ba8b97226358d0f6b..77d27147d5658c72638427106541ce7cdd041baf 100644 (file)
@@ -372,13 +372,6 @@ struct demo {
     VkRenderPass render_pass;
     VkPipeline pipeline;
 
-    VkDynamicViewportState dynamic_viewport;
-    VkDynamicLineWidthState dynamic_line_width;
-    VkDynamicDepthBiasState dynamic_depth_bias;
-    VkDynamicBlendState dynamic_blend;
-    VkDynamicDepthBoundsState dynamic_depth_bounds;
-    VkDynamicStencilState dynamic_stencil;
-
     mat4x4 projection_matrix;
     mat4x4 view_matrix;
     mat4x4 model_matrix;
@@ -549,12 +542,34 @@ static void demo_draw_build_cmd(struct demo *demo, VkCmdBuffer cmd_buf)
     vkCmdBindDescriptorSets(cmd_buf, VK_PIPELINE_BIND_POINT_GRAPHICS, demo->pipeline_layout,
             0, 1, &demo->desc_set, 0, NULL);
 
-    vkCmdBindDynamicViewportState(cmd_buf, demo->dynamic_viewport);
-    vkCmdBindDynamicLineWidthState(cmd_buf,  demo->dynamic_line_width);
-    vkCmdBindDynamicDepthBiasState(cmd_buf,  demo->dynamic_depth_bias);
-    vkCmdBindDynamicBlendState(cmd_buf, demo->dynamic_blend);
-    vkCmdBindDynamicDepthBoundsState(cmd_buf, demo->dynamic_depth_bounds);
-    vkCmdBindDynamicStencilState(cmd_buf, demo->dynamic_stencil);
+    VkViewport viewport;
+    memset(&viewport, 0, sizeof(viewport));
+    viewport.height = (float) demo->height;
+    viewport.width = (float) demo->width;
+    viewport.minDepth = (float) 0.0f;
+    viewport.maxDepth = (float) 1.0f;
+
+    VkRect2D scissor;
+    memset(&scissor, 0, sizeof(scissor));
+    scissor.extent.width = demo->width;
+    scissor.extent.height = demo->height;
+    scissor.offset.x = 0;
+    scissor.offset.y = 0;
+    vkCmdSetViewport(cmd_buf, 1, &viewport, &scissor);
+
+    vkCmdSetLineWidth(cmd_buf, 1.0);
+    vkCmdSetDepthBias(cmd_buf, 0.0f, 0.0f, 0.0f);
+
+    float blend[4];
+    blend[0] = 1.0f;
+    blend[1] = 1.0f;
+    blend[2] = 1.0f;
+    blend[3] = 1.0f;
+    vkCmdSetBlendConstants(cmd_buf, blend);
+    vkCmdSetDepthBounds(cmd_buf, 0.0f, 1.0f);
+    vkCmdSetStencilCompareMask(cmd_buf, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0xff);
+    vkCmdSetStencilWriteMask(cmd_buf, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0xff);
+    vkCmdSetStencilReference(cmd_buf, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0);
 
     vkCmdDraw(cmd_buf, 0, 12 * 3, 0, 1);
     vkCmdEndRenderPass(cmd_buf);
@@ -1571,84 +1586,6 @@ static void demo_prepare_pipeline(struct demo *demo)
     vkDestroyShaderModule(demo->device, demo->vert_shader_module);
 }
 
-static void demo_prepare_dynamic_states(struct demo *demo)
-{
-    VkDynamicViewportStateCreateInfo viewport_create;
-    VkDynamicLineWidthStateCreateInfo line_width;
-    VkDynamicDepthBiasStateCreateInfo depth_bias;
-    VkDynamicBlendStateCreateInfo blend;
-    VkDynamicDepthBoundsStateCreateInfo depth_bounds;
-    VkDynamicStencilStateCreateInfo stencil;
-    VkResult U_ASSERT_ONLY err;
-
-    memset(&viewport_create, 0, sizeof(viewport_create));
-    viewport_create.sType = VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO;
-    viewport_create.viewportAndScissorCount = 1;
-    VkViewport viewport;
-    memset(&viewport, 0, sizeof(viewport));
-    viewport.height = (float) demo->height;
-    viewport.width = (float) demo->width;
-    viewport.minDepth = (float) 0.0f;
-    viewport.maxDepth = (float) 1.0f;
-    viewport_create.pViewports = &viewport;
-    VkRect2D scissor;
-    memset(&scissor, 0, sizeof(scissor));
-    scissor.extent.width = demo->width;
-    scissor.extent.height = demo->height;
-    scissor.offset.x = 0;
-    scissor.offset.y = 0;
-    viewport_create.pScissors = &scissor;
-
-    memset(&line_width, 0, sizeof(line_width));
-    line_width.sType = VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO;
-    line_width.lineWidth = 1.0;
-
-    memset(&depth_bias, 0, sizeof(depth_bias));
-    depth_bias.sType = VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO;
-    depth_bias.depthBias = 0.0f;
-    depth_bias.depthBiasClamp = 0.0f;
-    depth_bias.slopeScaledDepthBias = 0.0f;
-
-    memset(&blend, 0, sizeof(blend));
-    blend.sType = VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO;
-    blend.blendConst[0] = 1.0f;
-    blend.blendConst[1] = 1.0f;
-    blend.blendConst[2] = 1.0f;
-    blend.blendConst[3] = 1.0f;
-
-    memset(&depth_bounds, 0, sizeof(depth_bounds));
-    depth_bounds.sType = VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO;
-    depth_bounds.minDepthBounds = 0.0f;
-    depth_bounds.maxDepthBounds = 1.0f;
-
-    memset(&stencil, 0, sizeof(stencil));
-    stencil.sType = VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO;
-    stencil.stencilReference = 0;
-    stencil.stencilCompareMask = 0xff;
-    stencil.stencilWriteMask = 0xff;
-
-    err = vkCreateDynamicViewportState(demo->device, &viewport_create, &demo->dynamic_viewport);
-    assert(!err);
-
-    err = vkCreateDynamicLineWidthState(demo->device, &line_width, &demo->dynamic_line_width);
-    assert(!err);
-
-    err = vkCreateDynamicDepthBiasState(demo->device, &depth_bias, &demo->dynamic_depth_bias);
-    assert(!err);
-
-    err = vkCreateDynamicBlendState(demo->device,
-            &blend, &demo->dynamic_blend);
-    assert(!err);
-
-    err = vkCreateDynamicDepthBoundsState(demo->device,
-            &depth_bounds, &demo->dynamic_depth_bounds);
-    assert(!err);
-
-    err = vkCreateDynamicStencilState(demo->device,
-            &stencil, &stencil, &demo->dynamic_stencil);
-    assert(!err);
-}
-
 static void demo_prepare_descriptor_pool(struct demo *demo)
 {
     const VkDescriptorTypeCount type_counts[2] = {
@@ -1768,7 +1705,6 @@ static void demo_prepare(struct demo *demo)
     demo_prepare_descriptor_layout(demo);
     demo_prepare_render_pass(demo);
     demo_prepare_pipeline(demo);
-    demo_prepare_dynamic_states(demo);
 
     for (uint32_t i = 0; i < demo->swapchainImageCount; i++) {
         err = vkCreateCommandBuffer(demo->device, &cmd, &demo->buffers[i].cmd);
@@ -1807,13 +1743,6 @@ static void demo_cleanup(struct demo *demo)
     vkFreeDescriptorSets(demo->device, demo->desc_pool, 1, &demo->desc_set);
     vkDestroyDescriptorPool(demo->device, demo->desc_pool);
 
-    vkDestroyDynamicViewportState(demo->device, demo->dynamic_viewport);
-    vkDestroyDynamicLineWidthState(demo->device, demo->dynamic_line_width);
-    vkDestroyDynamicDepthBiasState(demo->device, demo->dynamic_depth_bias);
-    vkDestroyDynamicBlendState(demo->device, demo->dynamic_blend);
-    vkDestroyDynamicDepthBoundsState(demo->device, demo->dynamic_depth_bounds);
-    vkDestroyDynamicStencilState(demo->device, demo->dynamic_stencil);
-
     vkDestroyPipeline(demo->device, demo->pipeline);
     vkDestroyPipelineCache(demo->device, demo->pipelineCache);
     vkDestroyRenderPass(demo->device, demo->render_pass);
index 3d0365baa8f7555f45ef1b7d2e019f7d1eaac3b5..cc13b825dbc3a87c2dc7fb80f3ac22b205f6e49b 100644 (file)
@@ -225,13 +225,6 @@ struct demo {
     VkRenderPass render_pass;
     VkPipeline pipeline;
 
-    VkDynamicViewportState dynamic_viewport;
-    VkDynamicLineWidthState dynamic_line_width;
-    VkDynamicDepthBiasState dynamic_depth_bias;
-    VkDynamicBlendState dynamic_blend;
-    VkDynamicDepthBoundsState dynamic_depth_bounds;
-    VkDynamicStencilState dynamic_stencil;
-
     VkShaderModule vert_shader_module;
     VkShaderModule frag_shader_module;
 
@@ -392,12 +385,34 @@ static void demo_draw_build_cmd(struct demo *demo)
     vkCmdBindDescriptorSets(demo->draw_cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, demo->pipeline_layout,
             0, 1, & demo->desc_set, 0, NULL);
 
-    vkCmdBindDynamicViewportState(demo->draw_cmd, demo->dynamic_viewport);
-    vkCmdBindDynamicLineWidthState(demo->draw_cmd, demo->dynamic_line_width);
-    vkCmdBindDynamicDepthBiasState(demo->draw_cmd, demo->dynamic_depth_bias);
-    vkCmdBindDynamicBlendState(demo->draw_cmd, demo->dynamic_blend);
-    vkCmdBindDynamicDepthBoundsState(demo->draw_cmd, demo->dynamic_depth_bounds);
-    vkCmdBindDynamicStencilState(demo->draw_cmd, demo->dynamic_stencil);
+    VkViewport viewport;
+    memset(&viewport, 0, sizeof(viewport));
+    viewport.height = (float) demo->height;
+    viewport.width = (float) demo->width;
+    viewport.minDepth = (float) 0.0f;
+    viewport.maxDepth = (float) 1.0f;
+
+    VkRect2D scissor;
+    memset(&scissor, 0, sizeof(scissor));
+    scissor.extent.width = demo->width;
+    scissor.extent.height = demo->height;
+    scissor.offset.x = 0;
+    scissor.offset.y = 0;
+    vkCmdSetViewport(demo->draw_cmd, 1, &viewport, &scissor);
+
+    vkCmdSetLineWidth(demo->draw_cmd, 1.0);
+    vkCmdSetDepthBias(demo->draw_cmd, 0.0f, 0.0f, 0.0f);
+
+    float blend[4];
+    blend[0] = 1.0f;
+    blend[1] = 1.0f;
+    blend[2] = 1.0f;
+    blend[3] = 1.0f;
+    vkCmdSetBlendConstants(demo->draw_cmd, blend);
+    vkCmdSetDepthBounds(demo->draw_cmd, 0.0f, 1.0f);
+    vkCmdSetStencilCompareMask(demo->draw_cmd, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0xff);
+    vkCmdSetStencilWriteMask(demo->draw_cmd, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0xff);
+    vkCmdSetStencilReference(demo->draw_cmd, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, 0);
 
     VkDeviceSize offsets[1] = {0};
     vkCmdBindVertexBuffers(demo->draw_cmd, VERTEX_BUFFER_BIND_ID, 1, &demo->vertices.buf, offsets);
@@ -1328,84 +1343,6 @@ static void demo_prepare_pipeline(struct demo *demo)
     vkDestroyShaderModule(demo->device, demo->vert_shader_module);
 }
 
-static void demo_prepare_dynamic_states(struct demo *demo)
-{
-    VkDynamicViewportStateCreateInfo viewport_create;
-    VkDynamicLineWidthStateCreateInfo line_width;
-    VkDynamicDepthBiasStateCreateInfo depth_bias;
-    VkDynamicBlendStateCreateInfo blend;
-    VkDynamicDepthBoundsStateCreateInfo depth_bounds;
-    VkDynamicStencilStateCreateInfo stencil;
-    VkResult U_ASSERT_ONLY err;
-
-    memset(&viewport_create, 0, sizeof(viewport_create));
-    viewport_create.sType = VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO;
-    viewport_create.viewportAndScissorCount = 1;
-    VkViewport viewport;
-    memset(&viewport, 0, sizeof(viewport));
-    viewport.height = (float) demo->height;
-    viewport.width = (float) demo->width;
-    viewport.minDepth = (float) 0.0f;
-    viewport.maxDepth = (float) 1.0f;
-    viewport_create.pViewports = &viewport;
-    VkRect2D scissor;
-    memset(&scissor, 0, sizeof(scissor));
-    scissor.extent.width = demo->width;
-    scissor.extent.height = demo->height;
-    scissor.offset.x = 0;
-    scissor.offset.y = 0;
-    viewport_create.pScissors = &scissor;
-
-    memset(&line_width, 0, sizeof(line_width));
-    line_width.sType = VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO;
-    line_width.lineWidth = 1.0;
-
-    memset(&depth_bias, 0, sizeof(depth_bias));
-    depth_bias.sType = VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO;
-    depth_bias.depthBias = 0.0f;
-    depth_bias.depthBiasClamp = 0.0f;
-    depth_bias.slopeScaledDepthBias = 0.0f;
-
-    memset(&blend, 0, sizeof(blend));
-    blend.sType = VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO;
-    blend.blendConst[0] = 1.0f;
-    blend.blendConst[1] = 1.0f;
-    blend.blendConst[2] = 1.0f;
-    blend.blendConst[3] = 1.0f;
-
-    memset(&depth_bounds, 0, sizeof(depth_bounds));
-    depth_bounds.sType = VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO;
-    depth_bounds.minDepthBounds = 0.0f;
-    depth_bounds.maxDepthBounds = 1.0f;
-
-    memset(&stencil, 0, sizeof(stencil));
-    stencil.sType = VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO;
-    stencil.stencilReference = 0;
-    stencil.stencilCompareMask = 0xff;
-    stencil.stencilWriteMask = 0xff;
-
-    err = vkCreateDynamicViewportState(demo->device, &viewport_create, &demo->dynamic_viewport);
-    assert(!err);
-
-    err = vkCreateDynamicLineWidthState(demo->device, &line_width, &demo->dynamic_line_width);
-    assert(!err);
-
-    err = vkCreateDynamicDepthBiasState(demo->device, &depth_bias, &demo->dynamic_depth_bias);
-    assert(!err);
-
-    err = vkCreateDynamicBlendState(demo->device,
-            &blend, &demo->dynamic_blend);
-    assert(!err);
-
-    err = vkCreateDynamicDepthBoundsState(demo->device,
-            &depth_bounds, &demo->dynamic_depth_bounds);
-    assert(!err);
-
-    err = vkCreateDynamicStencilState(demo->device,
-            &stencil, &stencil, &demo->dynamic_stencil);
-    assert(!err);
-}
-
 static void demo_prepare_descriptor_pool(struct demo *demo)
 {
     const VkDescriptorTypeCount type_count = {
@@ -1512,7 +1449,6 @@ static void demo_prepare(struct demo *demo)
     demo_prepare_descriptor_layout(demo);
     demo_prepare_render_pass(demo);
     demo_prepare_pipeline(demo);
-    demo_prepare_dynamic_states(demo);
 
     demo_prepare_descriptor_pool(demo);
     demo_prepare_descriptor_set(demo);
@@ -2175,13 +2111,6 @@ static void demo_cleanup(struct demo *demo)
     vkDestroyCommandBuffer(demo->device, demo->draw_cmd);
     vkDestroyCommandPool(demo->device, demo->cmd_pool);
 
-    vkDestroyDynamicViewportState(demo->device, demo->dynamic_viewport);
-    vkDestroyDynamicLineWidthState(demo->device, demo->dynamic_line_width);
-    vkDestroyDynamicDepthBiasState(demo->device, demo->dynamic_depth_bias);
-    vkDestroyDynamicBlendState(demo->device, demo->dynamic_blend);
-    vkDestroyDynamicDepthBoundsState(demo->device, demo->dynamic_depth_bounds);
-    vkDestroyDynamicStencilState(demo->device, demo->dynamic_stencil);
-
     vkDestroyPipeline(demo->device, demo->pipeline);
     vkDestroyRenderPass(demo->device, demo->render_pass);
     vkDestroyPipelineLayout(demo->device, demo->pipeline_layout);
index ee5597cbfa23bf333465daa2e3b434e4e17f83be..90a260a4ad73a30182cdb1c96c03e1f51d5c0d6c 100644 (file)
@@ -890,7 +890,6 @@ static void app_dump_limits(const VkPhysicalDeviceLimits *limits)
     printf("\t\tmaxSamplerLodBias                       = %f\n",                 limits->maxSamplerLodBias                      );
     printf("\t\tmaxSamplerAnisotropy                    = %f\n",                 limits->maxSamplerAnisotropy                   );
     printf("\t\tmaxViewports                            = 0x%" PRIxLEAST32 "\n", limits->maxViewports                           );
-    printf("\t\tmaxDynamicViewportStates                = 0x%" PRIxLEAST32 "\n", limits->maxDynamicViewportStates               );
     printf("\t\tmaxViewportDimensions[0]                = 0x%" PRIxLEAST32 "\n", limits->maxViewportDimensions[0]               );
     printf("\t\tmaxViewportDimensions[1]                = 0x%" PRIxLEAST32 "\n", limits->maxViewportDimensions[1]               );
     printf("\t\tviewportBoundsRange[0]                  = %f\n",                 limits->viewportBoundsRange[0]                 );
index 9cdf961abbadb77cc2c3d15a8a0581bf684d111f..f6fbe164dacebc7a32bc3683e4f32053f3e13a13 100644 (file)
@@ -480,103 +480,6 @@ static VkResult graphics_pipeline_create(struct nulldrv_dev *dev,
     return VK_SUCCESS;
 }
 
-static VkResult nulldrv_viewport_state_create(struct nulldrv_dev *dev,
-                                       const VkDynamicViewportStateCreateInfo *info,
-                                       struct nulldrv_dynamic_vp **state_ret)
-{
-    struct nulldrv_dynamic_vp *state;
-
-    state = (struct nulldrv_dynamic_vp *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
-static VkResult nulldrv_line_width_state_create(struct nulldrv_dev *dev,
-                                     const VkDynamicLineWidthStateCreateInfo *info,
-                                     struct nulldrv_dynamic_line_width **state_ret)
-{
-    struct nulldrv_dynamic_line_width *state;
-
-    state = (struct nulldrv_dynamic_line_width *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
-static VkResult nulldrv_depth_bias_state_create(struct nulldrv_dev *dev,
-                                     const VkDynamicDepthBiasStateCreateInfo *info,
-                                     struct nulldrv_dynamic_depth_bias **state_ret)
-{
-    struct nulldrv_dynamic_depth_bias *state;
-
-    state = (struct nulldrv_dynamic_depth_bias *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
-static VkResult nulldrv_blend_state_create(struct nulldrv_dev *dev,
-                                    const VkDynamicBlendStateCreateInfo *info,
-                                    struct nulldrv_dynamic_blend **state_ret)
-{
-    struct nulldrv_dynamic_blend *state;
-
-    state = (struct nulldrv_dynamic_blend *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
-static VkResult nulldrv_depth_bounds_state_create(struct nulldrv_dev *dev,
-                                 const VkDynamicDepthBoundsStateCreateInfo *info,
-                                 struct nulldrv_dynamic_depth_bounds **state_ret)
-{
-    struct nulldrv_dynamic_depth_bounds *state;
-
-    state = (struct nulldrv_dynamic_depth_bounds *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
-static VkResult nulldrv_stencil_state_create(struct nulldrv_dev *dev,
-                                 const VkDynamicStencilStateCreateInfo *infoFront,
-                                 const VkDynamicStencilStateCreateInfo *infoBack,
-                                 struct nulldrv_dynamic_stencil **state_ret)
-{
-    struct nulldrv_dynamic_stencil *state;
-
-    state = (struct nulldrv_dynamic_stencil *) nulldrv_base_create(dev,
-            sizeof(*state), VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE);
-    if (!state)
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-
-    *state_ret = state;
-
-    return VK_SUCCESS;
-}
-
 static VkResult nulldrv_cmd_create(struct nulldrv_dev *dev,
                             const VkCmdBufferCreateInfo *info,
                             struct nulldrv_cmd **cmd_ret)
@@ -1174,44 +1077,42 @@ ICD_EXPORT void VKAPI vkCmdBindPipeline(
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicViewportState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicViewportState                    state)
+ICD_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportAndScissorCount, const VkViewport* pViewports, const VkRect2D* pScissors)
+{
+    NULLDRV_LOG_FUNC;
+}
+
+ICD_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
 {
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicLineWidthState                   state)
+ICD_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
 {
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicDepthBiasState                   state)
+ICD_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
 {
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicBlendState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicBlendState                       state)
+ICD_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
 {
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicDepthBoundsState                 state)
+ICD_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
 {
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT void VKAPI vkCmdBindDynamicStencilState(
-    VkCmdBuffer                               cmdBuffer,
-    VkDynamicStencilState                     state)
+ICD_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
+{
+    NULLDRV_LOG_FUNC;
+}
+
+ICD_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
 {
     NULLDRV_LOG_FUNC;
 }
@@ -2035,121 +1936,6 @@ ICD_EXPORT void VKAPI vkDestroyShader(
     NULLDRV_LOG_FUNC;
 }
 
-ICD_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
-    VkDevice                                 device,
-    const VkDynamicViewportStateCreateInfo*  pCreateInfo,
-    VkDynamicViewportState*                  pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_viewport_state_create(dev, pCreateInfo,
-            (struct nulldrv_dynamic_vp **) pState);
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicViewportState(
-    VkDevice                                  device,
-    VkDynamicViewportState                    dynamicViewportState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
-ICD_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
-    VkDevice                                  device,
-    const VkDynamicLineWidthStateCreateInfo*  pCreateInfo,
-    VkDynamicLineWidthState*                  pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_line_width_state_create(dev, pCreateInfo,
-            (struct nulldrv_dynamic_line_width **) pState);
-}
-
-ICD_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
-    VkDevice                                       device,
-    const VkDynamicDepthBiasStateCreateInfo*       pCreateInfo,
-    VkDynamicDepthBiasState*                       pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_depth_bias_state_create(dev, pCreateInfo,
-            (struct nulldrv_dynamic_depth_bias **) pState);
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicLineWidthState(
-    VkDevice                                  device,
-    VkDynamicLineWidthState                   dynamicLineWidthState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicDepthBiasState(
-    VkDevice                                  device,
-    VkDynamicDepthBiasState                   dynamicDepthBiasState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
-ICD_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
-    VkDevice                                     device,
-    const VkDynamicBlendStateCreateInfo*         pCreateInfo,
-    VkDynamicBlendState*                         pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_blend_state_create(dev, pCreateInfo,
-            (struct nulldrv_dynamic_blend **) pState);
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicBlendState(
-    VkDevice                                  device,
-    VkDynamicBlendState                       dynamicBlendState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
-ICD_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
-    VkDevice                                     device,
-    const VkDynamicDepthBoundsStateCreateInfo*   pCreateInfo,
-    VkDynamicDepthBoundsState*                   pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_depth_bounds_state_create(dev, pCreateInfo,
-            (struct nulldrv_dynamic_depth_bounds **) pState);
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicDepthBoundsState(
-    VkDevice                                  device,
-    VkDynamicDepthBoundsState                 dynamicDepthBoundsState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
-ICD_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
-    VkDevice                                     device,
-    const VkDynamicStencilStateCreateInfo*       pCreateInfoFront,
-    const VkDynamicStencilStateCreateInfo*       pCreateInfoBack,
-    VkDynamicStencilState*                       pState)
-{
-    NULLDRV_LOG_FUNC;
-    struct nulldrv_dev *dev = nulldrv_dev(device);
-
-    return nulldrv_stencil_state_create(dev, pCreateInfoFront, pCreateInfoBack,
-            (struct nulldrv_dynamic_stencil **) pState);
-}
-
-ICD_EXPORT void VKAPI vkDestroyDynamicStencilState(
-    VkDevice                                  device,
-    VkDynamicStencilState                     dynamicStencilState)
-{
-    NULLDRV_LOG_FUNC;
-}
-
 ICD_EXPORT VkResult VKAPI vkCreateBufferView(
     VkDevice                                  device,
     const VkBufferViewCreateInfo*          pCreateInfo,
index 5d6dcaee862180a53135a027ff420f28c841e0f9..23bb63cadb6d1852675aff71de18c96be2ec47fa 100644 (file)
@@ -66,21 +66,15 @@ typedef enum {
     VK_OBJECT_TYPE_DESCRIPTOR_SET = 17,
     VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 18,
     VK_OBJECT_TYPE_DESCRIPTOR_POOL = 19,
-    VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE = 20,
-    VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE = 21,
-    VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE = 22,
-    VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE = 23,
-    VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE = 24,
-    VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE = 25,
-    VK_OBJECT_TYPE_FENCE = 26,
-    VK_OBJECT_TYPE_SEMAPHORE = 27,
-    VK_OBJECT_TYPE_EVENT = 28,
-    VK_OBJECT_TYPE_QUERY_POOL = 29,
-    VK_OBJECT_TYPE_FRAMEBUFFER = 30,
-    VK_OBJECT_TYPE_RENDER_PASS = 31,
-    VK_OBJECT_TYPE_PIPELINE_CACHE = 32,
-    VK_OBJECT_TYPE_SWAPCHAIN_KHR = 33,
-    VK_OBJECT_TYPE_CMD_POOL = 34,
+    VK_OBJECT_TYPE_FENCE = 20,
+    VK_OBJECT_TYPE_SEMAPHORE = 21,
+    VK_OBJECT_TYPE_EVENT = 22,
+    VK_OBJECT_TYPE_QUERY_POOL = 23,
+    VK_OBJECT_TYPE_FRAMEBUFFER = 24,
+    VK_OBJECT_TYPE_RENDER_PASS = 25,
+    VK_OBJECT_TYPE_PIPELINE_CACHE = 26,
+    VK_OBJECT_TYPE_SWAPCHAIN_KHR = 27,
+    VK_OBJECT_TYPE_CMD_POOL = 28,
     VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE,
     VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_CMD_POOL,
     VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_CMD_POOL - VK_OBJECT_TYPE_INSTANCE + 1),
index 9cbce5fe203469045714c8d90572afdcd6c6ce4f..28e3f788629610c40e846a378c237e76d7eb94a1 100644 (file)
@@ -100,18 +100,6 @@ typedef struct VkLayerDispatchTable_
     PFN_vkAllocDescriptorSets AllocDescriptorSets;
     PFN_vkFreeDescriptorSets FreeDescriptorSets;
     PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
-    PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
-    PFN_vkDestroyDynamicViewportState DestroyDynamicViewportState;
-    PFN_vkCreateDynamicLineWidthState CreateDynamicLineWidthState;
-    PFN_vkDestroyDynamicLineWidthState DestroyDynamicLineWidthState;
-    PFN_vkCreateDynamicDepthBiasState CreateDynamicDepthBiasState;
-    PFN_vkDestroyDynamicDepthBiasState DestroyDynamicDepthBiasState;
-    PFN_vkCreateDynamicBlendState CreateDynamicBlendState;
-    PFN_vkDestroyDynamicBlendState DestroyDynamicBlendState;
-    PFN_vkCreateDynamicDepthBoundsState CreateDynamicDepthBoundsState;
-    PFN_vkDestroyDynamicDepthBoundsState DestroyDynamicDepthBoundsState;
-    PFN_vkCreateDynamicStencilState CreateDynamicStencilState;
-    PFN_vkDestroyDynamicStencilState DestroyDynamicStencilState;
     PFN_vkCreateFramebuffer CreateFramebuffer;
     PFN_vkDestroyFramebuffer DestroyFramebuffer;
     PFN_vkCreateRenderPass CreateRenderPass;
@@ -126,15 +114,17 @@ typedef struct VkLayerDispatchTable_
     PFN_vkEndCommandBuffer EndCommandBuffer;
     PFN_vkResetCommandBuffer ResetCommandBuffer;
     PFN_vkCmdBindPipeline CmdBindPipeline;
-    PFN_vkCmdBindDynamicViewportState CmdBindDynamicViewportState;
-    PFN_vkCmdBindDynamicLineWidthState CmdBindDynamicLineWidthState;
-    PFN_vkCmdBindDynamicDepthBiasState CmdBindDynamicDepthBiasState;
-    PFN_vkCmdBindDynamicBlendState CmdBindDynamicBlendState;
-    PFN_vkCmdBindDynamicDepthBoundsState CmdBindDynamicDepthBoundsState;
-    PFN_vkCmdBindDynamicStencilState CmdBindDynamicStencilState;
     PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
     PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
     PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
+    PFN_vkCmdSetViewport CmdSetViewport;
+    PFN_vkCmdSetLineWidth CmdSetLineWidth;
+    PFN_vkCmdSetDepthBias CmdSetDepthBias;
+    PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
+    PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
+    PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
+    PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
+    PFN_vkCmdSetStencilReference CmdSetStencilReference;
     PFN_vkCmdDraw CmdDraw;
     PFN_vkCmdDrawIndexed CmdDrawIndexed;
     PFN_vkCmdDrawIndirect CmdDrawIndirect;
index 5f1972f3e5155d717d0a6c2fcb0a52a42f5bee25..5c0052d9f18b5d2cbca776af17923501fd9dd4a2 100644 (file)
@@ -41,7 +41,7 @@ extern "C" {
     ((major << 22) | (minor << 12) | patch)
 
 // Vulkan API version supported by this file
-#define VK_API_VERSION VK_MAKE_VERSION(0, 170, 0)
+#define VK_API_VERSION VK_MAKE_VERSION(0, 170, 1)
 
 
 #if defined(__cplusplus) && (_MSC_VER >= 1800 || __cplusplus >= 201103L)
@@ -117,12 +117,6 @@ VK_DEFINE_NONDISP_HANDLE(VkDescriptorSetLayout)
 VK_DEFINE_NONDISP_HANDLE(VkSampler)
 VK_DEFINE_NONDISP_HANDLE(VkDescriptorPool)
 VK_DEFINE_NONDISP_HANDLE(VkDescriptorSet)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicViewportState)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicLineWidthState)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicDepthBiasState)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicBlendState)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicDepthBoundsState)
-VK_DEFINE_NONDISP_HANDLE(VkDynamicStencilState)
 VK_DEFINE_NONDISP_HANDLE(VkFramebuffer)
 VK_DEFINE_NONDISP_HANDLE(VkCmdPool)
 
@@ -175,49 +169,43 @@ typedef enum {
     VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
-    VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO = 9,
-    VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO = 10,
-    VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO = 11,
-    VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO = 12,
-    VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO = 13,
-    VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO = 14,
-    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 15,
-    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 16,
-    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 17,
-    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 18,
-    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 19,
-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 20,
-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 21,
-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 22,
-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 23,
-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 24,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 25,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 26,
-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 27,
-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 28,
-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 29,
-    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 30,
-    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 31,
-    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 32,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 33,
-    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 34,
-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 35,
-    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 36,
-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 37,
-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 38,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 39,
-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 40,
-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 41,
-    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 42,
-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 43,
-    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 44,
-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 45,
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 46,
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 47,
-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 48,
-    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 49,
-    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 50,
-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 51,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 9,
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14,
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16,
+    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18,
+    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20,
+    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22,
+    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23,
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24,
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29,
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34,
+    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35,
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36,
+    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37,
+    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38,
+    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39,
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40,
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41,
+    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42,
+    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
     VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
@@ -1083,6 +1071,13 @@ typedef enum {
 } VkCmdBufferResetFlagBits;
 typedef VkFlags VkCmdBufferResetFlags;
 
+typedef enum {
+    VK_STENCIL_FACE_NONE = 0,
+    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+} VkStencilFaceFlagBits;
+typedef VkFlags VkStencilFaceFlags;
+
 typedef enum {
     VK_QUERY_CONTROL_CONSERVATIVE_BIT = 0x00000001,
 } VkQueryControlFlagBits;
@@ -1264,7 +1259,6 @@ typedef struct {
     float                                       maxSamplerLodBias;
     float                                       maxSamplerAnisotropy;
     uint32_t                                    maxViewports;
-    uint32_t                                    maxDynamicViewportStates;
     uint32_t                                    maxViewportDimensions[2];
     float                                       viewportBoundsRange[2];
     uint32_t                                    viewportSubPixelBits;
@@ -1618,6 +1612,30 @@ typedef struct {
     uint32_t                                    patchControlPoints;
 } VkPipelineTessellationStateCreateInfo;
 
+typedef struct {
+    float                                       originX;
+    float                                       originY;
+    float                                       width;
+    float                                       height;
+    float                                       minDepth;
+    float                                       maxDepth;
+} VkViewport;
+
+typedef struct {
+    int32_t                                     x;
+    int32_t                                     y;
+} VkOffset2D;
+
+typedef struct {
+    int32_t                                     width;
+    int32_t                                     height;
+} VkExtent2D;
+
+typedef struct {
+    VkOffset2D                                  offset;
+    VkExtent2D                                  extent;
+} VkRect2D;
+
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
@@ -1815,73 +1833,6 @@ typedef struct {
     uint32_t                                    count;
 } VkCopyDescriptorSet;
 
-typedef struct {
-    float                                       originX;
-    float                                       originY;
-    float                                       width;
-    float                                       height;
-    float                                       minDepth;
-    float                                       maxDepth;
-} VkViewport;
-
-typedef struct {
-    int32_t                                     x;
-    int32_t                                     y;
-} VkOffset2D;
-
-typedef struct {
-    int32_t                                     width;
-    int32_t                                     height;
-} VkExtent2D;
-
-typedef struct {
-    VkOffset2D                                  offset;
-    VkExtent2D                                  extent;
-} VkRect2D;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    uint32_t                                    viewportAndScissorCount;
-    const VkViewport*                           pViewports;
-    const VkRect2D*                             pScissors;
-} VkDynamicViewportStateCreateInfo;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    float                                       lineWidth;
-} VkDynamicLineWidthStateCreateInfo;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    float                                       depthBias;
-    float                                       depthBiasClamp;
-    float                                       slopeScaledDepthBias;
-} VkDynamicDepthBiasStateCreateInfo;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    float                                       blendConst[4];
-} VkDynamicBlendStateCreateInfo;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    float                                       minDepthBounds;
-    float                                       maxDepthBounds;
-} VkDynamicDepthBoundsStateCreateInfo;
-
-typedef struct {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    uint32_t                                    stencilCompareMask;
-    uint32_t                                    stencilWriteMask;
-    uint32_t                                    stencilReference;
-} VkDynamicStencilStateCreateInfo;
-
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
@@ -2024,6 +1975,11 @@ typedef struct {
     uint32_t                                    stencil;
 } VkClearDepthStencilValue;
 
+typedef union {
+    VkClearColorValue                           color;
+    VkClearDepthStencilValue                    depthStencil;
+} VkClearValue;
+
 typedef struct {
     VkOffset3D                                  offset;
     VkExtent3D                                  extent;
@@ -2037,11 +1993,6 @@ typedef struct {
     VkExtent3D                                  extent;
 } VkImageResolve;
 
-typedef union {
-    VkClearColorValue                           color;
-    VkClearDepthStencilValue                    depthStencil;
-} VkClearValue;
-
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
@@ -2193,18 +2144,6 @@ typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescripto
 typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets);
 typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
 typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicViewportState)(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicViewportState)(VkDevice device, VkDynamicViewportState dynamicViewportState);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicLineWidthState)(VkDevice device, const VkDynamicLineWidthStateCreateInfo* pCreateInfo, VkDynamicLineWidthState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicLineWidthState)(VkDevice device, VkDynamicLineWidthState dynamicLineWidthState);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicDepthBiasState)(VkDevice device, const VkDynamicDepthBiasStateCreateInfo* pCreateInfo, VkDynamicDepthBiasState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicDepthBiasState)(VkDevice device, VkDynamicDepthBiasState dynamicDepthBiasState);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicBlendState)(VkDevice device, const VkDynamicBlendStateCreateInfo* pCreateInfo, VkDynamicBlendState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicBlendState)(VkDevice device, VkDynamicBlendState dynamicBlendState);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicDepthBoundsState)(VkDevice device, const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo, VkDynamicDepthBoundsState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicDepthBoundsState)(VkDevice device, VkDynamicDepthBoundsState dynamicDepthBoundsState);
-typedef VkResult (VKAPI *PFN_vkCreateDynamicStencilState)(VkDevice device, const VkDynamicStencilStateCreateInfo* pCreateInfoFront, const VkDynamicStencilStateCreateInfo* pCreateInfoBack, VkDynamicStencilState* pState);
-typedef void (VKAPI *PFN_vkDestroyDynamicStencilState)(VkDevice device, VkDynamicStencilState dynamicStencilState);
 typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
 typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer);
 typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
@@ -2219,12 +2158,14 @@ typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const
 typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer);
 typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
 typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
-typedef void (VKAPI *PFN_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState);
-typedef void (VKAPI *PFN_vkCmdBindDynamicLineWidthState)(VkCmdBuffer cmdBuffer, VkDynamicLineWidthState dynamicLineWidthState);
-typedef void (VKAPI *PFN_vkCmdBindDynamicDepthBiasState)(VkCmdBuffer cmdBuffer, VkDynamicDepthBiasState dynamicDepthBiasState);
-typedef void (VKAPI *PFN_vkCmdBindDynamicBlendState)(VkCmdBuffer cmdBuffer, VkDynamicBlendState dynamicBlendState);
-typedef void (VKAPI *PFN_vkCmdBindDynamicDepthBoundsState)(VkCmdBuffer cmdBuffer, VkDynamicDepthBoundsState dynamicDepthBoundsState);
-typedef void (VKAPI *PFN_vkCmdBindDynamicStencilState)(VkCmdBuffer cmdBuffer, VkDynamicStencilState dynamicStencilState);
+typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCmdBuffer cmdBuffer, uint32_t viewportAndScissorCount, const VkViewport* pViewports, const VkRect2D* pScissors);
+typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCmdBuffer cmdBuffer, float lineWidth);
+typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
+typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCmdBuffer cmdBuffer, const float blendConst[4]);
+typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
 typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
 typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
 typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
@@ -2695,61 +2636,6 @@ void VKAPI vkUpdateDescriptorSets(
     uint32_t                                    copyCount,
     const VkCopyDescriptorSet*                  pDescriptorCopies);
 
-VkResult VKAPI vkCreateDynamicViewportState(
-    VkDevice                                    device,
-    const VkDynamicViewportStateCreateInfo*     pCreateInfo,
-    VkDynamicViewportState*                     pState);
-
-void VKAPI vkDestroyDynamicViewportState(
-    VkDevice                                    device,
-    VkDynamicViewportState                      dynamicViewportState);
-
-VkResult VKAPI vkCreateDynamicLineWidthState(
-    VkDevice                                    device,
-    const VkDynamicLineWidthStateCreateInfo*    pCreateInfo,
-    VkDynamicLineWidthState*                    pState);
-
-void VKAPI vkDestroyDynamicLineWidthState(
-    VkDevice                                    device,
-    VkDynamicLineWidthState                     dynamicLineWidthState);
-
-VkResult VKAPI vkCreateDynamicDepthBiasState(
-    VkDevice                                    device,
-    const VkDynamicDepthBiasStateCreateInfo*    pCreateInfo,
-    VkDynamicDepthBiasState*                    pState);
-
-void VKAPI vkDestroyDynamicDepthBiasState(
-    VkDevice                                    device,
-    VkDynamicDepthBiasState                     dynamicDepthBiasState);
-
-VkResult VKAPI vkCreateDynamicBlendState(
-    VkDevice                                    device,
-    const VkDynamicBlendStateCreateInfo*        pCreateInfo,
-    VkDynamicBlendState*                        pState);
-
-void VKAPI vkDestroyDynamicBlendState(
-    VkDevice                                    device,
-    VkDynamicBlendState                         dynamicBlendState);
-
-VkResult VKAPI vkCreateDynamicDepthBoundsState(
-    VkDevice                                    device,
-    const VkDynamicDepthBoundsStateCreateInfo*  pCreateInfo,
-    VkDynamicDepthBoundsState*                  pState);
-
-void VKAPI vkDestroyDynamicDepthBoundsState(
-    VkDevice                                    device,
-    VkDynamicDepthBoundsState                   dynamicDepthBoundsState);
-
-VkResult VKAPI vkCreateDynamicStencilState(
-    VkDevice                                    device,
-    const VkDynamicStencilStateCreateInfo*      pCreateInfoFront,
-    const VkDynamicStencilStateCreateInfo*      pCreateInfoBack,
-    VkDynamicStencilState*                      pState);
-
-void VKAPI vkDestroyDynamicStencilState(
-    VkDevice                                    device,
-    VkDynamicStencilState                       dynamicStencilState);
-
 VkResult VKAPI vkCreateFramebuffer(
     VkDevice                                    device,
     const VkFramebufferCreateInfo*              pCreateInfo,
@@ -2812,29 +2698,45 @@ void VKAPI vkCmdBindPipeline(
     VkPipelineBindPoint                         pipelineBindPoint,
     VkPipeline                                  pipeline);
 
-void VKAPI vkCmdBindDynamicViewportState(
+void VKAPI vkCmdSetViewport(
+    VkCmdBuffer                                 cmdBuffer,
+    uint32_t                                    viewportAndScissorCount,
+    const VkViewport*                           pViewports,
+    const VkRect2D*                             pScissors);
+
+void VKAPI vkCmdSetLineWidth(
+    VkCmdBuffer                                 cmdBuffer,
+    float                                       lineWidth);
+
+void VKAPI vkCmdSetDepthBias(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicViewportState                      dynamicViewportState);
+    float                                       depthBias,
+    float                                       depthBiasClamp,
+    float                                       slopeScaledDepthBias);
 
-void VKAPI vkCmdBindDynamicLineWidthState(
+void VKAPI vkCmdSetBlendConstants(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicLineWidthState                     dynamicLineWidthState);
+    const float                                 blendConst[4]);
 
-void VKAPI vkCmdBindDynamicDepthBiasState(
+void VKAPI vkCmdSetDepthBounds(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicDepthBiasState                     dynamicDepthBiasState);
+    float                                       minDepthBounds,
+    float                                       maxDepthBounds);
 
-void VKAPI vkCmdBindDynamicBlendState(
+void VKAPI vkCmdSetStencilCompareMask(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicBlendState                         dynamicBlendState);
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    stencilCompareMask);
 
-void VKAPI vkCmdBindDynamicDepthBoundsState(
+void VKAPI vkCmdSetStencilWriteMask(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicDepthBoundsState                   dynamicDepthBoundsState);
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    stencilWriteMask);
 
-void VKAPI vkCmdBindDynamicStencilState(
+void VKAPI vkCmdSetStencilReference(
     VkCmdBuffer                                 cmdBuffer,
-    VkDynamicStencilState                       dynamicStencilState);
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    stencilReference);
 
 void VKAPI vkCmdBindDescriptorSets(
     VkCmdBuffer                                 cmdBuffer,
index ab788ec7642dee95dda4ca011279d86ef2947524..33c4250eb4370776060ee5f663fcd8f86bf5003f 100644 (file)
@@ -297,6 +297,19 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(Vk
     return result;
 }
 
+VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(
+    VkCmdBuffer                         cmdBuffer,
+    uint32_t                            viewportAndScissorCount,
+    const VkViewport*                   pViewports,
+    const VkRect2D*                     pScissors)
+{
+    VkBool32 skipCall = VK_FALSE;
+    /* TODO: Verify viewportAndScissorCount < maxViewports from VkPhysicalDeviceLimits */
+    if (VK_FALSE == skipCall) {
+        get_dispatch_table(device_limits_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
+    }
+}
+
 static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device)
 {
     uint32_t i;
@@ -575,18 +588,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkDestroyDescriptorSetLayout;
     if (!strcmp(funcName, "vkDestroyDescriptorPool"))
         return (PFN_vkVoidFunction) vkDestroyDescriptorPool;
-    if (!strcmp(funcName, "vkDestroyDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicViewportState;
-    if (!strcmp(funcName, "vkDestroyDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicLineWidthState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkDestroyDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicBlendState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkDestroyDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicStencilState;
     if (!strcmp(funcName, "vkDestroyCommandBuffer"))
         return (PFN_vkVoidFunction) vkDestroyCommandBuffer;
     if (!strcmp(funcName, "vkDestroyFramebuffer"))
@@ -627,18 +628,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkAllocDescriptorSets;
     if (!strcmp(funcName, "vkUpdateDescriptorSets"))
         return (PFN_vkVoidFunction) vkUpdateDescriptorSets;
-    if (!strcmp(funcName, "vkCreateDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
-    if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCreateDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCreateDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
     if (!strcmp(funcName, "vkCreateCommandBuffer"))
         return (PFN_vkVoidFunction) vkCreateCommandBuffer;
     if (!strcmp(funcName, "vkBeginCommandBuffer"))
@@ -649,18 +638,8 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkResetCommandBuffer;
     if (!strcmp(funcName, "vkCmdBindPipeline"))
         return (PFN_vkVoidFunction) vkCmdBindPipeline;
-    if (!strcmp(funcName, "vkCmdBindDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicViewportState;
-    if (!strcmp(funcName, "vkCmdBindDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCmdBindDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicBlendState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCmdBindDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicStencilState;
+    if (!strcmp(funcName, "vkCmdSetViewport"))
+        return (PFN_vkVoidFunction) vkCmdSetViewport;
     if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
         return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
     if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
index abc7c41823bbe68edf5048cb1b61d5d5c3edaea2..b5035c0fd6a57b67a78487ca9a68eb77cc1264e6 100644 (file)
@@ -64,12 +64,6 @@ static unordered_map<uint64_t, SAMPLER_NODE*> sampleMap;
 static unordered_map<uint64_t, VkImageViewCreateInfo> imageMap;
 static unordered_map<uint64_t, VkImageViewCreateInfo> viewMap;
 static unordered_map<uint64_t, BUFFER_NODE*> bufferMap;
-static unordered_map<uint64_t, VkDynamicViewportStateCreateInfo> dynamicVpStateMap;
-static unordered_map<uint64_t, VkDynamicLineWidthStateCreateInfo> dynamicLineWidthStateMap;
-static unordered_map<uint64_t, VkDynamicDepthBiasStateCreateInfo> dynamicDepthBiasStateMap;
-static unordered_map<uint64_t, VkDynamicBlendStateCreateInfo> dynamicBlendStateMap;
-static unordered_map<uint64_t, VkDynamicDepthBoundsStateCreateInfo> dynamicDepthBoundsStateMap;
-static unordered_map<uint64_t, std::pair<VkDynamicStencilStateCreateInfo, VkDynamicStencilStateCreateInfo>> dynamicStencilStateMap;
 static unordered_map<uint64_t, PIPELINE_NODE*> pipelineMap;
 static unordered_map<uint64_t, POOL_NODE*> poolMap;
 static unordered_map<uint64_t, SET_NODE*> setMap;
@@ -140,18 +134,22 @@ static string cmdTypeToString(CMD_TYPE cmd)
             return "CMD_BINDPIPELINE";
         case CMD_BINDPIPELINEDELTA:
             return "CMD_BINDPIPELINEDELTA";
-        case CMD_BINDDYNAMICVIEWPORTSTATE:
-            return "CMD_BINDDYNAMICVIEWPORTSTATE";
-        case CMD_BINDDYNAMICLINEWIDTHSTATE:
-            return "CMD_BINDDYNAMICLINEWIDTHSTATE";
-        case CMD_BINDDYNAMICDEPTHBIASSTATE:
-            return "CMD_BINDDYNAMICDEPTHBIASSTATE";
-        case CMD_BINDDYNAMICBLENDSTATE:
-            return "CMD_BINDDYNAMICBLENDSTATE";
-        case CMD_BINDDYNAMICDEPTHBOUNDSSTATE:
-            return "CMD_BINDDYNAMICDEPTHBOUNDSSTATE";
-        case CMD_BINDDYNAMICSTENCILSTATE:
-            return "CMD_BINDDYNAMICSTENCILSTATE";
+        case CMD_SETVIEWPORTSTATE:
+            return "CMD_SETVIEWPORTSTATE";
+        case CMD_SETLINEWIDTHSTATE:
+            return "CMD_SETLINEWIDTHSTATE";
+        case CMD_SETDEPTHBIASSTATE:
+            return "CMD_SETDEPTHBIASSTATE";
+        case CMD_SETBLENDSTATE:
+            return "CMD_SETBLENDSTATE";
+        case CMD_SETDEPTHBOUNDSSTATE:
+            return "CMD_SETDEPTHBOUNDSSTATE";
+        case CMD_SETSTENCILREADMASKSTATE:
+            return "CMD_SETSTENCILREADMASKSTATE";
+        case CMD_SETSTENCILWRITEMASKSTATE:
+            return "CMD_SETSTENCILWRITEMASKSTATE";
+        case CMD_SETSTENCILREFERENCESTATE:
+            return "CMD_SETSTENCILREFERENCESTATE";
         case CMD_BINDDESCRIPTORSETS:
             return "CMD_BINDDESCRIPTORSETS";
         case CMD_BINDINDEXBUFFER:
@@ -249,26 +247,9 @@ static uint32_t        g_lastTouchedCBIndex = 0;
 // Track the last global DrawState of interest touched by any thread
 static GLOBAL_CB_NODE* g_lastGlobalCB = NULL;
 static PIPELINE_NODE*  g_lastBoundPipeline = NULL;
-static uint64_t        g_lastBoundDynamicState[VK_NUM_STATE_BIND_POINT] = {0};
 static VkDescriptorSet g_lastBoundDescriptorSet = VK_NULL_HANDLE;
 #define MAX_BINDING 0xFFFFFFFF // Default vtxBinding value in CB Node to identify if no vtxBinding set
 
-//static DYNAMIC_STATE_NODE* g_pDynamicStateHead[VK_NUM_STATE_BIND_POINT] = {0};
-
-// Free all allocated nodes for Dynamic State objs
-static void deleteDynamicState()
-{
-    for (auto ii=dynamicVpStateMap.begin(); ii!=dynamicVpStateMap.end(); ++ii) {
-        delete[] (*ii).second.pScissors;
-        delete[] (*ii).second.pViewports;
-    }
-    dynamicVpStateMap.clear();
-    dynamicLineWidthStateMap.clear();
-    dynamicDepthBiasStateMap.clear();
-    dynamicBlendStateMap.clear();
-    dynamicDepthBoundsStateMap.clear();
-    dynamicStencilStateMap.clear();
-}
 // Free all sampler nodes
 static void deleteSamplers()
 {
@@ -359,54 +340,6 @@ static VkBool32 validate_status(GLOBAL_CB_NODE* pNode, CBStatusFlags enable_mask
     }
     return VK_FALSE;
 }
-// For given dynamic state handle and type, return CreateInfo for that Dynamic State
-static void* getDynamicStateCreateInfo(const uint64_t handle, const DYNAMIC_STATE_BIND_POINT type)
-{
-    switch (type) {
-        case VK_STATE_BIND_POINT_VIEWPORT:
-            return (void*)&dynamicVpStateMap[handle];
-        case VK_STATE_BIND_POINT_LINE_WIDTH:
-            return (void*)&dynamicLineWidthStateMap[handle];
-        case VK_STATE_BIND_POINT_DEPTH_BIAS:
-            return (void*)&dynamicDepthBiasStateMap[handle];
-        case VK_STATE_BIND_POINT_BLEND:
-            return (void*)&dynamicBlendStateMap[handle];
-        case VK_STATE_BIND_POINT_DEPTH_BOUNDS:
-            return (void*)&dynamicDepthBoundsStateMap[handle];
-        case VK_STATE_BIND_POINT_STENCIL:
-            return (void*)&dynamicStencilStateMap[handle];
-        default:
-            return NULL;
-    }
-}
-// Print the last bound dynamic state
-static VkBool32 printDynamicState(const VkCmdBuffer cb)
-{
-    VkBool32 skipCall = VK_FALSE;
-    GLOBAL_CB_NODE* pCB = getCBNode(cb);
-    if (pCB) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        for (uint32_t i = 0; i < VK_NUM_STATE_BIND_POINT; i++) {
-            if (pCB->lastBoundDynamicState[i]) {
-                void* pDynStateCI = getDynamicStateCreateInfo(pCB->lastBoundDynamicState[i], (DYNAMIC_STATE_BIND_POINT)i);
-                if (pDynStateCI) {
-                    skipCall |= log_msg(mdd(cb), VK_DBG_REPORT_INFO_BIT, dynamicStateBindPointToObjType((DYNAMIC_STATE_BIND_POINT)i), pCB->lastBoundDynamicState[i], 0, DRAWSTATE_NONE, "DS",
-                            "Reporting CreateInfo for currently bound %s object %#" PRIxLEAST64, string_DYNAMIC_STATE_BIND_POINT((DYNAMIC_STATE_BIND_POINT)i).c_str(), pCB->lastBoundDynamicState[i]);
-                    skipCall |= log_msg(mdd(cb), VK_DBG_REPORT_INFO_BIT, dynamicStateBindPointToObjType((DYNAMIC_STATE_BIND_POINT)i), pCB->lastBoundDynamicState[i], 0, DRAWSTATE_NONE, "DS",
-                            dynamic_display(pDynStateCI, "  ").c_str());
-                } else {
-                    skipCall |= log_msg(mdd(cb), VK_DBG_REPORT_INFO_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NONE, "DS",
-                            "No dynamic state of type %s bound", string_DYNAMIC_STATE_BIND_POINT((DYNAMIC_STATE_BIND_POINT)i).c_str());
-                }
-            } else {
-                skipCall |= log_msg(mdd(cb), VK_DBG_REPORT_INFO_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NONE, "DS",
-                        "No dynamic state of type %s bound", string_DYNAMIC_STATE_BIND_POINT((DYNAMIC_STATE_BIND_POINT)i).c_str());
-            }
-        }
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return skipCall;
-}
 // Retrieve pipeline node ptr for given pipeline object
 static PIPELINE_NODE* getPipeline(VkPipeline pipeline)
 {
@@ -421,12 +354,14 @@ static PIPELINE_NODE* getPipeline(VkPipeline pipeline)
 // Validate state stored as flags at time of draw call
 static VkBool32 validate_draw_state_flags(GLOBAL_CB_NODE* pCB, VkBool32 indexedDraw) {
     VkBool32 result;
-    result = validate_status(pCB, CBSTATUS_NONE, CBSTATUS_VIEWPORT_BOUND, CBSTATUS_VIEWPORT_BOUND, VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_VIEWPORT_NOT_BOUND, "Viewport object not bound to this command buffer");
-    result |= validate_status(pCB, CBSTATUS_NONE, CBSTATUS_LINE_WIDTH_BOUND,   CBSTATUS_LINE_WIDTH_BOUND,   VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_LINE_WIDTH_NOT_BOUND,   "Line width object not bound to this command buffer");
-    result |= validate_status(pCB, CBSTATUS_NONE, CBSTATUS_DEPTH_BIAS_BOUND,   CBSTATUS_DEPTH_BIAS_BOUND,   VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_DEPTH_BIAS_NOT_BOUND,   "Depth bias object not bound to this command buffer");
-    result |= validate_status(pCB, CBSTATUS_COLOR_BLEND_WRITE_ENABLE, CBSTATUS_BLEND_BOUND,   CBSTATUS_BLEND_BOUND,   VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_BLEND_NOT_BOUND,   "Blend object not bound to this command buffer");
-    result |= validate_status(pCB, CBSTATUS_DEPTH_WRITE_ENABLE, CBSTATUS_DEPTH_BOUNDS_BOUND, CBSTATUS_DEPTH_BOUNDS_BOUND, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_DEPTH_BOUNDS_NOT_BOUND, "Depth bounds object not bound to this command buffer");
-    result |= validate_status(pCB, CBSTATUS_STENCIL_TEST_ENABLE, CBSTATUS_STENCIL_BOUND, CBSTATUS_STENCIL_BOUND, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_STENCIL_NOT_BOUND, "Stencil object not bound to this command buffer");
+    result = validate_status(pCB, CBSTATUS_NONE, CBSTATUS_VIEWPORT_SET, CBSTATUS_VIEWPORT_SET, VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_VIEWPORT_NOT_BOUND, "Viewport object not bound to this command buffer");
+    result |= validate_status(pCB, CBSTATUS_NONE, CBSTATUS_LINE_WIDTH_SET,   CBSTATUS_LINE_WIDTH_SET,   VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_LINE_WIDTH_NOT_BOUND,   "Line width object not bound to this command buffer");
+    result |= validate_status(pCB, CBSTATUS_NONE, CBSTATUS_DEPTH_BIAS_SET,   CBSTATUS_DEPTH_BIAS_SET,   VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_DEPTH_BIAS_NOT_BOUND,   "Depth bias object not bound to this command buffer");
+    result |= validate_status(pCB, CBSTATUS_COLOR_BLEND_WRITE_ENABLE, CBSTATUS_BLEND_SET,   CBSTATUS_BLEND_SET,   VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_BLEND_NOT_BOUND,   "Blend object not bound to this command buffer");
+    result |= validate_status(pCB, CBSTATUS_DEPTH_WRITE_ENABLE, CBSTATUS_DEPTH_BOUNDS_SET, CBSTATUS_DEPTH_BOUNDS_SET, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_DEPTH_BOUNDS_NOT_BOUND, "Depth bounds object not bound to this command buffer");
+    result |= validate_status(pCB, CBSTATUS_STENCIL_TEST_ENABLE, CBSTATUS_STENCIL_READ_MASK_SET, CBSTATUS_STENCIL_READ_MASK_SET, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_STENCIL_NOT_BOUND, "Stencil read mask not set on this command buffer");
+    result |= validate_status(pCB, CBSTATUS_STENCIL_TEST_ENABLE, CBSTATUS_STENCIL_WRITE_MASK_SET, CBSTATUS_STENCIL_WRITE_MASK_SET, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_STENCIL_NOT_BOUND, "Stencil write mask not set on this command buffer");
+    result |= validate_status(pCB, CBSTATUS_STENCIL_TEST_ENABLE, CBSTATUS_STENCIL_REFERENCE_SET, CBSTATUS_STENCIL_REFERENCE_SET, VK_DBG_REPORT_ERROR_BIT,  DRAWSTATE_STENCIL_NOT_BOUND, "Stencil reference not set on this command buffer");
     if (indexedDraw)
         result |= validate_status(pCB, CBSTATUS_NONE, CBSTATUS_INDEX_BUFFER_BOUND, CBSTATUS_INDEX_BUFFER_BOUND, VK_DBG_REPORT_ERROR_BIT, DRAWSTATE_INDEX_BUFFER_NOT_BOUND, "Index buffer object not bound to this command buffer when Index Draw attempted");
     return result;
@@ -1202,22 +1137,6 @@ static void set_cb_pso_status(GLOBAL_CB_NODE* pCB, const PIPELINE_NODE* pPipe)
         pCB->status |= CBSTATUS_STENCIL_TEST_ENABLE;
     }
 }
-// Set dyn-state related status bits for an object node
-static void set_cb_dyn_status(GLOBAL_CB_NODE* pNode, DYNAMIC_STATE_BIND_POINT stateBindPoint) {
-    if (stateBindPoint == VK_STATE_BIND_POINT_VIEWPORT) {
-        pNode->status |= CBSTATUS_VIEWPORT_BOUND;
-    } else if (stateBindPoint == VK_STATE_BIND_POINT_LINE_WIDTH) {
-        pNode->status |= CBSTATUS_LINE_WIDTH_BOUND;
-    } else if (stateBindPoint == VK_STATE_BIND_POINT_DEPTH_BIAS) {
-        pNode->status |= CBSTATUS_DEPTH_BIAS_BOUND;
-    } else if (stateBindPoint == VK_STATE_BIND_POINT_BLEND) {
-        pNode->status |= CBSTATUS_BLEND_BOUND;
-    } else if (stateBindPoint == VK_STATE_BIND_POINT_DEPTH_BOUNDS) {
-        pNode->status |= CBSTATUS_DEPTH_BOUNDS_BOUND;
-    } else if (stateBindPoint == VK_STATE_BIND_POINT_STENCIL) {
-        pNode->status |= CBSTATUS_STENCIL_BOUND;
-    }
-}
 // Print the last bound Gfx Pipeline
 static VkBool32 printPipeline(const VkCmdBuffer cb)
 {
@@ -1310,7 +1229,6 @@ static VkBool32 synchAndPrintDSConfig(const VkCmdBuffer cb)
     }
     skipCall |= printDSConfig(cb);
     skipCall |= printPipeline(cb);
-    skipCall |= printDynamicState(cb);
     return skipCall;
 }
 
@@ -1419,7 +1337,6 @@ VK_LAYER_EXPORT void VKAPI vkDestroyDevice(VkDevice device)
     deleteImages();
     deleteBuffers();
     deleteCmdBuffers();
-    deleteDynamicState();
     deletePools();
     deleteLayouts();
     loader_platform_thread_unlock_mutex(&globalLock);
@@ -1614,42 +1531,6 @@ VK_LAYER_EXPORT void VKAPI vkDestroyDescriptorPool(VkDevice device, VkDescriptor
     // TODO : Clean up any internal data structures using this obj.
 }
 
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicLineWidthState(VkDevice device, VkDynamicLineWidthState dynamicLineWidthState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicDepthBiasState(VkDevice device, VkDynamicDepthBiasState dynamicDepthBiasState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicBlendState(VkDevice device, VkDynamicBlendState dynamicBlendState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicDepthBoundsState(VkDevice device, VkDynamicDepthBoundsState dynamicDepthBoundsState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicStencilState(VkDevice device, VkDynamicStencilState dynamicStencilState)
-{
-    get_dispatch_table(draw_state_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
-    // TODO : Clean up any internal data structures using this obj.
-}
-
 VK_LAYER_EXPORT void VKAPI vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer commandBuffer)
 {
     get_dispatch_table(draw_state_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
@@ -1958,75 +1839,6 @@ VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writ
     }
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
-    VkDynamicViewportStateCreateInfo local_ci;
-    memcpy(&local_ci, pCreateInfo, sizeof(VkDynamicViewportStateCreateInfo));
-    local_ci.pViewports = new VkViewport[pCreateInfo->viewportAndScissorCount];
-    local_ci.pScissors = new VkRect2D[pCreateInfo->viewportAndScissorCount];
-    loader_platform_thread_lock_mutex(&globalLock);
-    dynamicVpStateMap[pState->handle] = local_ci;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(VkDevice device, const VkDynamicLineWidthStateCreateInfo* pCreateInfo, VkDynamicLineWidthState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
-    //insertDynamicState(*pState, (GENERIC_HEADER*)pCreateInfo, VK_STATE_BIND_POINT_LINE_WIDTH);
-    loader_platform_thread_lock_mutex(&globalLock);
-    dynamicLineWidthStateMap[pState->handle] = *pCreateInfo;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(VkDevice device, const VkDynamicDepthBiasStateCreateInfo* pCreateInfo, VkDynamicDepthBiasState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
-    //insertDynamicState(*pState, (GENERIC_HEADER*)pCreateInfo, VK_STATE_BIND_POINT_DEPTH_BIAS);
-    loader_platform_thread_lock_mutex(&globalLock);
-    dynamicDepthBiasStateMap[pState->handle] = *pCreateInfo;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(VkDevice device, const VkDynamicBlendStateCreateInfo* pCreateInfo, VkDynamicBlendState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
-    //insertDynamicState(*pState, (GENERIC_HEADER*)pCreateInfo, VK_STATE_BIND_POINT_BLEND);
-    loader_platform_thread_lock_mutex(&globalLock);
-    dynamicBlendStateMap[pState->handle] = *pCreateInfo;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(VkDevice device, const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo, VkDynamicDepthBoundsState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
-    //insertDynamicState(*pState, (GENERIC_HEADER*)pCreateInfo, VK_STATE_BIND_POINT_DEPTH_BOUNDS);
-    loader_platform_thread_lock_mutex(&globalLock);
-    dynamicDepthBoundsStateMap[pState->handle] = *pCreateInfo;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(VkDevice device, const VkDynamicStencilStateCreateInfo* pCreateInfoFront, const VkDynamicStencilStateCreateInfo* pCreateInfoBack, VkDynamicStencilState* pState)
-{
-    VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
-    //insertDynamicState(*pState, (GENERIC_HEADER*)pCreateInfo, VK_STATE_BIND_POINT_STENCIL);
-    loader_platform_thread_lock_mutex(&globalLock);
-
-    // Bug 14406 - If back is NULL or equal to front, then single sided.
-    // To support NULL case, simply track front twice
-    const VkDynamicStencilStateCreateInfo* pLocalCreateInfoBack = (pCreateInfoBack == NULL) ? pCreateInfoFront : pCreateInfoBack;
-
-    std::pair<VkDynamicStencilStateCreateInfo, VkDynamicStencilStateCreateInfo> infos(*pCreateInfoFront, *pLocalCreateInfoBack);
-    dynamicStencilStateMap[pState->handle] = infos;
-    loader_platform_thread_unlock_mutex(&globalLock);
-    return result;
-}
-
 VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
 {
     VkResult result = get_dispatch_table(draw_state_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
@@ -2155,180 +1967,230 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBi
         get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(
+    VkCmdBuffer                         cmdBuffer,
+    uint32_t                            viewportAndScissorCount,
+    const VkViewport*                   pViewports,
+    const VkRect2D*                     pScissors)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICVIEWPORTSTATE);
+            skipCall |= addCmd(pCB, CMD_SETVIEWPORTSTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicViewportState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetViewport() without an active RenderPass.");
             }
             loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_VIEWPORT_BOUND;
-            if (dynamicVpStateMap.find(dynamicViewportState.handle) == dynamicVpStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE, dynamicViewportState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicViewportState object %#" PRIxLEAST64 ", was it ever created?", dynamicViewportState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_VIEWPORT] = dynamicViewportState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_VIEWPORT] = dynamicViewportState.handle;
-            }
+            pCB->status |= CBSTATUS_VIEWPORT_SET;
+            pCB->viewports.resize(viewportAndScissorCount);
+            memcpy(pCB->viewports.data(), pViewports, viewportAndScissorCount);
+            pCB->scissors.resize(viewportAndScissorCount);
+            memcpy(pCB->scissors.data(), pScissors, viewportAndScissorCount);
             loader_platform_thread_unlock_mutex(&globalLock);
         } else {
-            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicViewportState()");
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetViewport()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
 }
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(VkCmdBuffer cmdBuffer, VkDynamicLineWidthState dynamicLineWidthState)
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICLINEWIDTHSTATE);
+            skipCall |= addCmd(pCB, CMD_SETLINEWIDTHSTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicLineWidthState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetLineWidth() without an active RenderPass.");
             }
+            /* TODO: Do we still need this lock? */
             loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_LINE_WIDTH_BOUND;
-            if (dynamicLineWidthStateMap.find(dynamicLineWidthState.handle) == dynamicLineWidthStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE, dynamicLineWidthState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicLineWidthState object %#" PRIxLEAST64 ", was it ever created?", dynamicLineWidthState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_LINE_WIDTH] = dynamicLineWidthState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_LINE_WIDTH] = dynamicLineWidthState.handle;
-            }
+            pCB->status |= CBSTATUS_LINE_WIDTH_SET;
+            pCB->lineWidth = lineWidth;
             loader_platform_thread_unlock_mutex(&globalLock);
         } else {
             skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicLineWidthState()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
 }
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(VkCmdBuffer cmdBuffer, VkDynamicDepthBiasState dynamicDepthBiasState)
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(
+    VkCmdBuffer                         cmdBuffer,
+    float                               depthBias,
+    float                               depthBiasClamp,
+    float                               slopeScaledDepthBias)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICDEPTHBIASSTATE);
+            skipCall |= addCmd(pCB, CMD_SETDEPTHBIASSTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicDepthBiasState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetDepthBias() without an active RenderPass.");
             }
-            loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_DEPTH_BIAS_BOUND;
-            if (dynamicDepthBiasStateMap.find(dynamicDepthBiasState.handle) == dynamicDepthBiasStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE, dynamicDepthBiasState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicDepthBiasState object %#" PRIxLEAST64 ", was it ever created?", dynamicDepthBiasState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BIAS] = dynamicDepthBiasState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BIAS] = dynamicDepthBiasState.handle;
+            pCB->status |= CBSTATUS_DEPTH_BIAS_SET;
+            pCB->depthBias = depthBias;
+            pCB->depthBiasClamp = depthBiasClamp;
+            pCB->slopeScaledDepthBias = slopeScaledDepthBias;
+        } else {
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetDepthBias()");
+        }
+    }
+    if (VK_FALSE == skipCall)
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
+}
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
+{
+    VkBool32 skipCall = VK_FALSE;
+    GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
+    if (pCB) {
+        if (pCB->state == CB_UPDATE_ACTIVE) {
+            updateCBTracking(cmdBuffer);
+            skipCall |= addCmd(pCB, CMD_SETBLENDSTATE);
+            if (!pCB->activeRenderPass) {
+                skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
+                        "Incorrect call to vkSetBlendConstants() without an active RenderPass.");
             }
-            loader_platform_thread_unlock_mutex(&globalLock);
+            pCB->status |= CBSTATUS_BLEND_SET;
+            memcpy(pCB->blendConst, blendConst, 4 * sizeof(float));
         } else {
-            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicDepthBiasState()");
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetBlendConstants()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
 }
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(VkCmdBuffer cmdBuffer, VkDynamicBlendState dynamicBlendState)
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(
+    VkCmdBuffer                         cmdBuffer,
+    float                               minDepthBounds,
+    float                               maxDepthBounds)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICBLENDSTATE);
+            skipCall |= addCmd(pCB, CMD_SETDEPTHBOUNDSSTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicBlendState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetDepthBounds() without an active RenderPass.");
             }
-            loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_BLEND_BOUND;
-            if (dynamicBlendStateMap.find(dynamicBlendState.handle) == dynamicBlendStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE, dynamicBlendState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicBlendState object %#" PRIxLEAST64 ", was it ever created?", dynamicBlendState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_BLEND] = dynamicBlendState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_BLEND] = dynamicBlendState.handle;
+            pCB->status |= CBSTATUS_DEPTH_BOUNDS_SET;
+            pCB->minDepthBounds = minDepthBounds;
+            pCB->maxDepthBounds = maxDepthBounds;
+        } else {
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetDepthBounds()");
+        }
+    }
+    if (VK_FALSE == skipCall)
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
+}
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilCompareMask)
+{
+    VkBool32 skipCall = VK_FALSE;
+    GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
+    if (pCB) {
+        if (pCB->state == CB_UPDATE_ACTIVE) {
+            updateCBTracking(cmdBuffer);
+            skipCall |= addCmd(pCB, CMD_SETSTENCILREADMASKSTATE);
+            if (!pCB->activeRenderPass) {
+                skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
+                        "Incorrect call to vkCmdSetStencilCompareMask() without an active RenderPass.");
             }
-            loader_platform_thread_unlock_mutex(&globalLock);
+            if (faceMask & VK_STENCIL_FACE_FRONT_BIT) {
+                pCB->front.stencilCompareMask = stencilCompareMask;
+            }
+            if (faceMask & VK_STENCIL_FACE_BACK_BIT) {
+                pCB->back.stencilCompareMask = stencilCompareMask;
+            }
+            /* TODO: Do we need to track front and back separately? */
+            /* TODO: We aren't capturing the faceMask, do we need to? */
+            pCB->status |= CBSTATUS_STENCIL_READ_MASK_SET;
         } else {
-            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicBlendState()");
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetStencilCompareMask()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
 }
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(VkCmdBuffer cmdBuffer, VkDynamicDepthBoundsState dynamicDepthBoundsState)
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilWriteMask)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICDEPTHBOUNDSSTATE);
+            skipCall |= addCmd(pCB, CMD_SETSTENCILWRITEMASKSTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicDepthBoundsState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetStencilWriteMask() without an active RenderPass.");
             }
-            loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_DEPTH_BOUNDS_BOUND;
-            if (dynamicDepthBoundsStateMap.find(dynamicDepthBoundsState.handle) == dynamicDepthBoundsStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE, dynamicDepthBoundsState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicDepthBoundsState object %#" PRIxLEAST64 ", was it ever created?", dynamicDepthBoundsState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BOUNDS] = dynamicDepthBoundsState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BOUNDS] = dynamicDepthBoundsState.handle;
+            if (faceMask & VK_STENCIL_FACE_FRONT_BIT) {
+                pCB->front.stencilWriteMask = stencilWriteMask;
             }
-            loader_platform_thread_unlock_mutex(&globalLock);
+            if (faceMask & VK_STENCIL_FACE_BACK_BIT) {
+                pCB->back.stencilWriteMask = stencilWriteMask;
+            }
+            pCB->status |= CBSTATUS_STENCIL_WRITE_MASK_SET;
         } else {
-            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicDepthBoundsState()");
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetStencilWriteMask()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
 }
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(VkCmdBuffer cmdBuffer, VkDynamicStencilState dynamicStencilState)
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilReference)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         if (pCB->state == CB_UPDATE_ACTIVE) {
             updateCBTracking(cmdBuffer);
-            skipCall |= addCmd(pCB, CMD_BINDDYNAMICSTENCILSTATE);
+            skipCall |= addCmd(pCB, CMD_SETSTENCILREFERENCESTATE);
             if (!pCB->activeRenderPass) {
                 skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
-                        "Incorrect call to vkCmdBindDynamicStencilState() without an active RenderPass.");
+                        "Incorrect call to vkCmdSetStencilReference() without an active RenderPass.");
             }
-            loader_platform_thread_lock_mutex(&globalLock);
-            pCB->status |= CBSTATUS_STENCIL_BOUND;
-            if (dynamicStencilStateMap.find(dynamicStencilState.handle) == dynamicStencilStateMap.end()) {
-                skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE, dynamicStencilState.handle, 0, DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT, "DS",
-                        "Unable to find VkDynamicStencilState object %#" PRIxLEAST64 ", was it ever created?", dynamicStencilState.handle);
-            } else {
-                pCB->lastBoundDynamicState[VK_STATE_BIND_POINT_STENCIL] = dynamicStencilState.handle;
-                g_lastBoundDynamicState[VK_STATE_BIND_POINT_STENCIL] = dynamicStencilState.handle;
+            if (faceMask & VK_STENCIL_FACE_FRONT_BIT) {
+                pCB->front.stencilReference = stencilReference;
             }
-            loader_platform_thread_unlock_mutex(&globalLock);
+            if (faceMask & VK_STENCIL_FACE_BACK_BIT) {
+                pCB->back.stencilReference = stencilReference;
+            }
+            pCB->status |= CBSTATUS_STENCIL_REFERENCE_SET;
         } else {
-            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdBindDynamicStencilState()");
+            skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetStencilReference()");
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
 }
+
 VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
 {
     VkBool32 skipCall = VK_FALSE;
@@ -3269,18 +3131,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkDestroyDescriptorSetLayout;
     if (!strcmp(funcName, "vkDestroyDescriptorPool"))
         return (PFN_vkVoidFunction) vkDestroyDescriptorPool;
-    if (!strcmp(funcName, "vkDestroyDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicViewportState;
-    if (!strcmp(funcName, "vkDestroyDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicLineWidthState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkDestroyDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicBlendState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkDestroyDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicStencilState;
     if (!strcmp(funcName, "vkDestroyCommandBuffer"))
         return (PFN_vkVoidFunction) vkDestroyCommandBuffer;
     if (!strcmp(funcName, "vkDestroyFramebuffer"))
@@ -3317,18 +3167,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkAllocDescriptorSets;
     if (!strcmp(funcName, "vkUpdateDescriptorSets"))
         return (PFN_vkVoidFunction) vkUpdateDescriptorSets;
-    if (!strcmp(funcName, "vkCreateDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
-    if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCreateDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCreateDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
     if (!strcmp(funcName, "vkCreateCommandBuffer"))
         return (PFN_vkVoidFunction) vkCreateCommandBuffer;
     if (!strcmp(funcName, "vkBeginCommandBuffer"))
@@ -3339,18 +3177,22 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
         return (PFN_vkVoidFunction) vkResetCommandBuffer;
     if (!strcmp(funcName, "vkCmdBindPipeline"))
         return (PFN_vkVoidFunction) vkCmdBindPipeline;
-    if (!strcmp(funcName, "vkCmdBindDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicViewportState;
-    if (!strcmp(funcName, "vkCmdBindDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCmdBindDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicBlendState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCmdBindDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicStencilState;
+    if (!strcmp(funcName, "vkCmdSetViewport"))
+        return (PFN_vkVoidFunction) vkCmdSetViewport;
+    if (!strcmp(funcName, "vkCmdSetLineWidth"))
+        return (PFN_vkVoidFunction) vkCmdSetLineWidth;
+    if (!strcmp(funcName, "vkCmdSetDepthBias"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBias;
+    if (!strcmp(funcName, "vkCmdSetBlendConstants"))
+        return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
+    if (!strcmp(funcName, "vkCmdSetDepthBounds"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
+    if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
+    if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
+    if (!strcmp(funcName, "vkCmdSetStencilReference"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilReference;
     if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
         return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
     if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
index 0b0ea2f1f1e68781d6696cbc27643cf4c654306f..4edea80f50ac56c8e8e920e568d744bd71d17ec4 100644 (file)
@@ -41,7 +41,6 @@ typedef enum _DRAW_STATE_ERROR
     DRAWSTATE_INVALID_CMD_BUFFER,               // Invalid CmdBuffer referenced
     DRAWSTATE_VTX_INDEX_OUT_OF_BOUNDS,          // binding in vkCmdBindVertexData() too large for PSO's pVertexBindingDescriptions array
     DRAWSTATE_VTX_INDEX_ALIGNMENT_ERROR,        // binding offset in vkCmdBindIndexBuffer() out of alignment based on indexType
-    DRAWSTATE_INVALID_DYNAMIC_STATE_OBJECT,     // Invalid dyn state object
     //DRAWSTATE_MISSING_DOT_PROGRAM,              // No "dot" program in order to generate png image
     DRAWSTATE_OUT_OF_MEMORY,                    // malloc failed
     DRAWSTATE_DESCRIPTOR_TYPE_MISMATCH,         // Type in layout vs. update are not the same
@@ -167,12 +166,14 @@ typedef enum _CMD_TYPE
 {
     CMD_BINDPIPELINE,
     CMD_BINDPIPELINEDELTA,
-    CMD_BINDDYNAMICVIEWPORTSTATE,
-    CMD_BINDDYNAMICLINEWIDTHSTATE,
-    CMD_BINDDYNAMICDEPTHBIASSTATE,
-    CMD_BINDDYNAMICBLENDSTATE,
-    CMD_BINDDYNAMICDEPTHBOUNDSSTATE,
-    CMD_BINDDYNAMICSTENCILSTATE,
+    CMD_SETVIEWPORTSTATE,
+    CMD_SETLINEWIDTHSTATE,
+    CMD_SETDEPTHBIASSTATE,
+    CMD_SETBLENDSTATE,
+    CMD_SETDEPTHBOUNDSSTATE,
+    CMD_SETSTENCILREADMASKSTATE,
+    CMD_SETSTENCILWRITEMASKSTATE,
+    CMD_SETSTENCILREFERENCESTATE,
     CMD_BINDDESCRIPTORSETS,
     CMD_BINDINDEXBUFFER,
     CMD_BINDVERTEXBUFFER,
@@ -230,18 +231,26 @@ typedef VkFlags CBStatusFlags;
 typedef enum _CBStatusFlagBits
 {
     CBSTATUS_NONE                              = 0x00000000, // No status is set
-    CBSTATUS_VIEWPORT_BOUND                    = 0x00000001, // Viewport state object has been bound
-    CBSTATUS_LINE_WIDTH_BOUND                  = 0x00000002, // Line width state object has been bound
-    CBSTATUS_DEPTH_BIAS_BOUND                  = 0x00000004, // Raster state object has been bound
-    CBSTATUS_COLOR_BLEND_WRITE_ENABLE          = 0x00000008, // PSO w/ CB Enable set has been bound
-    CBSTATUS_BLEND_BOUND                       = 0x00000010, // Blend state object has been bound
-    CBSTATUS_DEPTH_WRITE_ENABLE                = 0x00000020, // PSO w/ Depth Enable set has been bound
-    CBSTATUS_STENCIL_TEST_ENABLE               = 0x00000040, // PSO w/ Stencil Enable set has been bound
-    CBSTATUS_DEPTH_BOUNDS_BOUND                = 0x00000080, // Depth bounds state object has been bound
-    CBSTATUS_STENCIL_BOUND                     = 0x00000100, // Stencil state object has been bound
-    CBSTATUS_INDEX_BUFFER_BOUND                = 0x00000200, // Index buffer has been bound
+    CBSTATUS_VIEWPORT_SET                      = 0x00000001, // Viewport has been set
+    CBSTATUS_LINE_WIDTH_SET                    = 0x00000002, // Line width has been set
+    CBSTATUS_DEPTH_BIAS_SET                    = 0x00000004, // Depth bias has been set
+    CBSTATUS_COLOR_BLEND_WRITE_ENABLE          = 0x00000008, // PSO w/ CB Enable set has been set
+    CBSTATUS_BLEND_SET                         = 0x00000010, // Blend state object has been set
+    CBSTATUS_DEPTH_WRITE_ENABLE                = 0x00000020, // PSO w/ Depth Enable set has been set
+    CBSTATUS_STENCIL_TEST_ENABLE               = 0x00000040, // PSO w/ Stencil Enable set has been set
+    CBSTATUS_DEPTH_BOUNDS_SET                  = 0x00000080, // Depth bounds state object has been set
+    CBSTATUS_STENCIL_READ_MASK_SET             = 0x00000100, // Stencil read mask has been set
+    CBSTATUS_STENCIL_WRITE_MASK_SET            = 0x00000200, // Stencil write mask has been set
+    CBSTATUS_STENCIL_REFERENCE_SET             = 0x00000400, // Stencil reference has been set
+    CBSTATUS_INDEX_BUFFER_BOUND                = 0x00000800, // Index buffer has been set
 } CBStatusFlagBits;
 
+typedef struct stencil_data {
+    uint32_t                     stencilCompareMask;
+    uint32_t                     stencilWriteMask;
+    uint32_t                     stencilReference;
+} CBStencilData;
+
 // Cmd Buffer Wrapper Struct
 typedef struct _GLOBAL_CB_NODE {
     VkCmdBuffer                  cmdBuffer;
@@ -259,7 +268,17 @@ typedef struct _GLOBAL_CB_NODE {
     //  each individual CMD_NODE referencing its own "lastBound" state
     VkPipeline                   lastBoundPipeline;
     uint32_t                     lastVtxBinding;
-    uint64_t                     lastBoundDynamicState[VK_NUM_STATE_BIND_POINT];
+    vector<VkViewport>           viewports;
+    vector<VkRect2D>             scissors;
+    float                        lineWidth;
+    float                        depthBias;
+    float                        depthBiasClamp;
+    float                        slopeScaledDepthBias;
+    float                        blendConst[4];
+    float                        minDepthBounds;
+    float                        maxDepthBounds;
+    CBStencilData                front;
+    CBStencilData                back;
     VkDescriptorSet              lastBoundDescriptorSet;
     VkPipelineLayout             lastBoundPipelineLayout;
     VkRenderPass                 activeRenderPass;
index b5ce825779c87cad99cabbd6a4a08626f51e5adc..3e3e916b0294cddcf300f8750e4f301e7307f595 100644 (file)
  */
 #include "vk_debug_report_lunarg.h"
 
-typedef enum _DYNAMIC_STATE_BIND_POINT
-{
-    VK_STATE_BIND_POINT_VIEWPORT,
-    VK_STATE_BIND_POINT_LINE_WIDTH,
-    VK_STATE_BIND_POINT_DEPTH_BIAS,
-    VK_STATE_BIND_POINT_BLEND,
-    VK_STATE_BIND_POINT_DEPTH_BOUNDS,
-    VK_STATE_BIND_POINT_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_LINE_WIDTH:
-            return "LINE_WIDTH";
-        case VK_STATE_BIND_POINT_DEPTH_BIAS:
-            return "DEPTH_BIAS";
-        case VK_STATE_BIND_POINT_BLEND:
-            return "BLEND";
-        case VK_STATE_BIND_POINT_DEPTH_BOUNDS:
-            return "DEPTH_BOUNDS";
-        case VK_STATE_BIND_POINT_STENCIL:
-            return "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_VIEWPORT_STATE;
-        case VK_STATE_BIND_POINT_LINE_WIDTH:
-            return VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE;
-        case VK_STATE_BIND_POINT_DEPTH_BIAS:
-            return VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE;
-        case VK_STATE_BIND_POINT_BLEND:
-            return VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE;
-        case VK_STATE_BIND_POINT_DEPTH_BOUNDS:
-            return VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE;
-        case VK_STATE_BIND_POINT_STENCIL:
-            return VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE;
-        default:
-            return VK_OBJECT_TYPE_MAX_ENUM;
-    }
-}
index 29b10d44728447cd4640f6e86f5e15f1b65197cf..80df83876db7c4af4e4500f38a23427e495ab79d 100644 (file)
@@ -98,12 +98,6 @@ unordered_map<uint64_t, VkDescriptorPoolCreateInfo>      descriptorPoolMap;
 unordered_map<uint64_t, VkRenderPassCreateInfo>          renderPassMap;
 unordered_map<uint64_t, VkFramebufferCreateInfo>         framebufferMap;
 //unordered_map<uint64_t, VkDescriptorSetCreateInfo> descriptorSetMap;
-unordered_map<uint64_t, VkDynamicViewportStateCreateInfo>     dynamicViewportStateMap;
-unordered_map<uint64_t, VkDynamicLineWidthStateCreateInfo>   dynamicLineWidthStateMap;
-unordered_map<uint64_t, VkDynamicDepthBiasStateCreateInfo> dynamicDepthBiasStateMap;
-unordered_map<uint64_t, VkDynamicBlendStateCreateInfo>   dynamicBlendStateMap;
-unordered_map<uint64_t, VkDynamicDepthBoundsStateCreateInfo> dynamicDepthBoundsStateMap;
-unordered_map<uint64_t, VkDynamicStencilStateCreateInfo> dynamicStencilStateMap;
 
 // For a given handle and object type, return a ptr to its CreateInfo struct, or NULL if not found
 static void* get_object_create_info(uint64_t handle, VkDbgObjectType type)
@@ -223,48 +217,6 @@ static void* get_object_create_info(uint64_t handle, VkDbgObjectType type)
 //                return (void*)&(*it).second;
 //            break;
 //        }
-        case VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE:
-        {
-            auto it = dynamicViewportStateMap.find(handle);
-            if (it != dynamicViewportStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE:
-        {
-            auto it = dynamicLineWidthStateMap.find(handle);
-            if (it != dynamicLineWidthStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE:
-        {
-            auto it = dynamicDepthBiasStateMap.find(handle);
-            if (it != dynamicDepthBiasStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE:
-        {
-            auto it = dynamicBlendStateMap.find(handle);
-            if (it != dynamicBlendStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE:
-        {
-            auto it = dynamicDepthBoundsStateMap.find(handle);
-            if (it != dynamicDepthBoundsStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE:
-        {
-            auto it = dynamicStencilStateMap.find(handle);
-            if (it != dynamicStencilStateMap.end())
-                return (void*)&(*it).second;
-            break;
-        }
         case VK_OBJECT_TYPE_RENDER_PASS:
         {
             auto it = renderPassMap.find(handle);
@@ -528,42 +480,6 @@ static void add_object_create_info(const uint64_t handle, const VkDbgObjectType
             memcpy(pCI, pCreateInfo, sizeof(VkFramebufferCreateInfo));
             break;
         }
-        case VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE:
-        {
-            auto pCI = &dynamicViewportStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicViewportStateCreateInfo));
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE:
-        {
-            auto pCI = &dynamicLineWidthStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicLineWidthStateCreateInfo));
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE:
-        {
-            auto pCI = &dynamicDepthBiasStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicDepthBiasStateCreateInfo));
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE:
-        {
-            auto pCI = &dynamicBlendStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicBlendStateCreateInfo));
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE:
-        {
-            auto pCI = &dynamicDepthBoundsStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicDepthBoundsStateCreateInfo));
-            break;
-        }
-        case VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE:
-        {
-            auto pCI = &dynamicStencilStateMap[handle];
-            memcpy(pCI, pCreateInfo, sizeof(VkDynamicStencilStateCreateInfo));
-            break;
-        }
         default:
         {
             // NULL will be returned below by default
@@ -1162,12 +1078,6 @@ static void print_object_list(
     print_object_map_members(dispObj, descriptorPoolMap,           VK_OBJECT_TYPE_DESCRIPTOR_POOL,             "DescriptorPool");
     print_object_map_members(dispObj, renderPassMap,               VK_OBJECT_TYPE_RENDER_PASS,                 "RenderPass");
     print_object_map_members(dispObj, framebufferMap,              VK_OBJECT_TYPE_FRAMEBUFFER,                 "Framebuffer");
-    print_object_map_members(dispObj, dynamicViewportStateMap,     VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE,      "DynamicViewportState");
-    print_object_map_members(dispObj, dynamicLineWidthStateMap,    VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE,    "DynamicLineWidthState");
-    print_object_map_members(dispObj, dynamicDepthBiasStateMap,    VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE,    "DynamicDepthBiasState");
-    print_object_map_members(dispObj, dynamicBlendStateMap,        VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE,         "DynamicBlendState");
-    print_object_map_members(dispObj, dynamicDepthBoundsStateMap,  VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE,  "DynamicDepthBoundsState");
-    print_object_map_members(dispObj, dynamicStencilStateMap,      VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE,       "DynamicStencilState");
     log_msg(mdd(dispObj), VK_DBG_REPORT_INFO_BIT, VK_OBJECT_TYPE_DEVICE, 0, 0, MEMTRACK_NONE, "MEM", "*** End of Object lists ***");
 }
 
@@ -1820,72 +1730,6 @@ VK_LAYER_EXPORT void VKAPI vkDestroyFramebuffer(VkDevice device, VkFramebuffer f
     get_dispatch_table(mem_tracker_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
 }
 
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicViewportStateMap.find(dynamicViewportState.handle);
-    if (item != dynamicViewportStateMap.end()) {
-        dynamicViewportStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicLineWidthState(VkDevice device, VkDynamicLineWidthState dynamicLineWidthState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicLineWidthStateMap.find(dynamicLineWidthState.handle);
-    if (item != dynamicLineWidthStateMap.end()) {
-        dynamicLineWidthStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicDepthBiasState(VkDevice device, VkDynamicDepthBiasState dynamicDepthBiasState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicDepthBiasStateMap.find(dynamicDepthBiasState.handle);
-    if (item != dynamicDepthBiasStateMap.end()) {
-        dynamicDepthBiasStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicBlendState(VkDevice device, VkDynamicBlendState dynamicBlendState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicBlendStateMap.find(dynamicBlendState.handle);
-    if (item != dynamicBlendStateMap.end()) {
-        dynamicBlendStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicDepthBoundsState(VkDevice device, VkDynamicDepthBoundsState dynamicDepthBoundsState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicDepthBoundsStateMap.find(dynamicDepthBoundsState.handle);
-    if (item != dynamicDepthBoundsStateMap.end()) {
-        dynamicDepthBoundsStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
-}
-
-VK_LAYER_EXPORT void VKAPI vkDestroyDynamicStencilState(VkDevice device, VkDynamicStencilState dynamicStencilState)
-{
-    loader_platform_thread_lock_mutex(&globalLock);
-    auto item = dynamicStencilStateMap.find(dynamicStencilState.handle);
-    if (item != dynamicStencilStateMap.end()) {
-        dynamicStencilStateMap.erase(item);
-    }
-    loader_platform_thread_unlock_mutex(&globalLock);
-    get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
-}
-
 VkResult VKAPI vkBindBufferMemory(
     VkDevice                                    device,
     VkBuffer                                    buffer,
@@ -2293,96 +2137,6 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
     return result;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
-    VkDevice                          device,
-    const VkDynamicViewportStateCreateInfo *pCreateInfo,
-    VkDynamicViewportState           *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
-    if (result == VK_SUCCESS) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE, pCreateInfo);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
-    VkDevice                          device,
-    const VkDynamicLineWidthStateCreateInfo *pCreateInfo,
-    VkDynamicLineWidthState             *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
-    if (result == VK_SUCCESS) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE, pCreateInfo);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
-    VkDevice                          device,
-    const VkDynamicDepthBiasStateCreateInfo *pCreateInfo,
-    VkDynamicDepthBiasState             *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
-    if (result == VK_SUCCESS) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE, pCreateInfo);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
-    VkDevice                          device,
-    const VkDynamicBlendStateCreateInfo *pCreateInfo,
-    VkDynamicBlendState         *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
-    if (result == VK_SUCCESS) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE, pCreateInfo);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
-    VkDevice                          device,
-    const VkDynamicDepthBoundsStateCreateInfo *pCreateInfo,
-    VkDynamicDepthBoundsState       *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
-    if (result == VK_SUCCESS) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE, pCreateInfo);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
-    VkDevice                          device,
-    const VkDynamicStencilStateCreateInfo *pCreateInfoFront,
-    const VkDynamicStencilStateCreateInfo *pCreateInfoBack,
-    VkDynamicStencilState       *pState)
-{
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
-    if (result == VK_SUCCESS && pCreateInfoFront != nullptr) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE, pCreateInfoFront);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    if (result == VK_SUCCESS && pCreateInfoBack != nullptr && pCreateInfoBack != pCreateInfoFront) {
-        loader_platform_thread_lock_mutex(&globalLock);
-        add_object_create_info(pState->handle, VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE, pCreateInfoBack);
-        loader_platform_thread_unlock_mutex(&globalLock);
-    }
-    return result;
-}
-
 VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
     VkDevice                     device,
     const VkCmdBufferCreateInfo *pCreateInfo,
@@ -2481,153 +2235,145 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
     get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
 }
 
-void VKAPI vkCmdBindDynamicViewportState(
-     VkCmdBuffer                                 cmdBuffer,
-     VkDynamicViewportState                      dynamicViewportState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(
+    VkCmdBuffer                         cmdBuffer,
+    uint32_t                            viewportAndScissorCount,
+    const VkViewport*                   pViewports,
+    const VkRect2D*                     pScissors)
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicViewportStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicViewportStateCreateInfo*)get_object_create_info(dynamicViewportState.handle, VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE, dynamicViewportState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic viewport state object %#" PRIxLEAST64 ", was it ever created?", dynamicViewportState.handle);
-    }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_VIEWPORT] = dynamicViewportState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
     }
 }
 
-void VKAPI vkCmdBindDynamicLineWidthState(
-     VkCmdBuffer                                 cmdBuffer,
-     VkDynamicLineWidthState                     dynamicLineWidthState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicLineWidthStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicLineWidthStateCreateInfo*)get_object_create_info(dynamicLineWidthState.handle, VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE, dynamicLineWidthState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic line width state object %#" PRIxLEAST64 ", was it ever created?", dynamicLineWidthState.handle);
-    }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_LINE_WIDTH] = dynamicLineWidthState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
     }
 }
 
-void VKAPI vkCmdBindDynamicDepthBiasState(
-     VkCmdBuffer                                 cmdBuffer,
-     VkDynamicDepthBiasState                     dynamicDepthBiasState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(
+    VkCmdBuffer                         cmdBuffer,
+    float                               depthBias,
+    float                               depthBiasClamp,
+    float                               slopeScaledDepthBias)
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicDepthBiasStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicDepthBiasStateCreateInfo*)get_object_create_info(dynamicDepthBiasState.handle, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE, dynamicDepthBiasState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic depth bias state object %#" PRIxLEAST64 ", was it ever created?", dynamicDepthBiasState.handle);
-    }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BIAS] = dynamicDepthBiasState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
     }
 }
 
-void VKAPI vkCmdBindDynamicBlendState(
+VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(
      VkCmdBuffer                            cmdBuffer,
-     VkDynamicBlendState                    dynamicBlendState)
+     const float                            blendConst[4])
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicBlendStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicBlendStateCreateInfo*)get_object_create_info(dynamicBlendState.handle, VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE, dynamicBlendState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic blend state object %#" PRIxLEAST64 ", was it ever created?", dynamicBlendState.handle);
-    }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_BLEND] = dynamicBlendState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
     }
 }
 
-void VKAPI vkCmdBindDynamicDepthBoundsState(
-     VkCmdBuffer                                 cmdBuffer,
-     VkDynamicDepthBoundsState                   dynamicDepthBoundsState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(
+    VkCmdBuffer                         cmdBuffer,
+    float                               minDepthBounds,
+    float                               maxDepthBounds)
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicDepthBoundsStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicDepthBoundsStateCreateInfo*)get_object_create_info(dynamicDepthBoundsState.handle, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE, dynamicDepthBoundsState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic raster state object %#" PRIxLEAST64 ", was it ever created?", dynamicDepthBoundsState.handle);
+    loader_platform_thread_unlock_mutex(&globalLock);
+    if (VK_FALSE == skipCall) {
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
+    }
+}
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilCompareMask)
+{
+    VkBool32 skipCall = VK_FALSE;
+    loader_platform_thread_lock_mutex(&globalLock);
+    MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
+    if (!pCmdBuf) {
+        skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
+                       MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_DEPTH_BOUNDS] = dynamicDepthBoundsState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
     }
 }
 
-void VKAPI vkCmdBindDynamicStencilState(
-     VkCmdBuffer                                 cmdBuffer,
-     VkDynamicStencilState                       dynamicStencilState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilWriteMask)
 {
     VkBool32 skipCall = VK_FALSE;
-    VkDynamicStencilStateCreateInfo* pCI;
     loader_platform_thread_lock_mutex(&globalLock);
     MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
     if (!pCmdBuf) {
         skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
                        MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCI = (VkDynamicStencilStateCreateInfo*)get_object_create_info(dynamicStencilState.handle, VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE);
-    if (!pCI) {
-         skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE, dynamicStencilState.handle,
-                         0, MEMTRACK_INVALID_OBJECT, "MEM",
-                         "Unable to find dynamic raster state object %#" PRIxLEAST64 ", was it ever created?", dynamicStencilState.handle);
+    loader_platform_thread_unlock_mutex(&globalLock);
+    if (VK_FALSE == skipCall) {
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
+    }
+}
+
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(
+    VkCmdBuffer                         cmdBuffer,
+    VkStencilFaceFlags                  faceMask,
+    uint32_t                            stencilReference)
+{
+    VkBool32 skipCall = VK_FALSE;
+    loader_platform_thread_lock_mutex(&globalLock);
+    MT_CB_INFO *pCmdBuf = get_cmd_buf_info(cmdBuffer);
+    if (!pCmdBuf) {
+        skipCall = log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0,
+                       MEMTRACK_INVALID_CB, "MEM", "Unable to find command buffer object %p, was it ever created?", (void*)cmdBuffer);
     }
-    pCmdBuf->pLastBoundDynamicState[VK_STATE_BIND_POINT_STENCIL] = dynamicStencilState.handle;
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
-        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
+        get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
     }
 }
 
@@ -3145,18 +2891,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
         return (PFN_vkVoidFunction) vkDestroyRenderPass;
     if (!strcmp(funcName, "vkDestroyFramebuffer"))
         return (PFN_vkVoidFunction) vkDestroyFramebuffer;
-    if (!strcmp(funcName, "vkDestroyDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicViewportState;
-    if (!strcmp(funcName, "vkDestroyDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicLineWidthState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkDestroyDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicBlendState;
-    if (!strcmp(funcName, "vkDestroyDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkDestroyDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkDestroyDynamicStencilState;
     if (!strcmp(funcName, "vkBindBufferMemory"))
         return (PFN_vkVoidFunction) vkBindBufferMemory;
     if (!strcmp(funcName, "vkBindImageMemory"))
@@ -3203,18 +2937,6 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
         return (PFN_vkVoidFunction) vkCreateComputePipelines;
     if (!strcmp(funcName, "vkCreateSampler"))
         return (PFN_vkVoidFunction) vkCreateSampler;
-    if (!strcmp(funcName, "vkCreateDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
-    if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCreateDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCreateDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
     if (!strcmp(funcName, "vkCreateCommandBuffer"))
         return (PFN_vkVoidFunction) vkCreateCommandBuffer;
     if (!strcmp(funcName, "vkBeginCommandBuffer"))
@@ -3225,18 +2947,22 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
         return (PFN_vkVoidFunction) vkResetCommandBuffer;
     if (!strcmp(funcName, "vkCmdBindPipeline"))
         return (PFN_vkVoidFunction) vkCmdBindPipeline;
-    if (!strcmp(funcName, "vkCmdBindDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicViewportState;
-    if (!strcmp(funcName, "vkCmdBindDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCmdBindDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicBlendState;
-    if (!strcmp(funcName, "vkCmdBindDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCmdBindDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCmdBindDynamicStencilState;
+    if (!strcmp(funcName, "vkCmdSetViewport"))
+        return (PFN_vkVoidFunction) vkCmdSetViewport;
+    if (!strcmp(funcName, "vkCmdSetLineWidth"))
+        return (PFN_vkVoidFunction) vkCmdSetLineWidth;
+    if (!strcmp(funcName, "vkCmdSetDepthBias"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBias;
+    if (!strcmp(funcName, "vkCmdSetBlendConstants"))
+        return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
+    if (!strcmp(funcName, "vkCmdSetDepthBounds"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
+    if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
+    if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
+    if (!strcmp(funcName, "vkCmdSetStencilReference"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilReference;
     if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
         return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
     if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
index 4cb11a8e0f3be7ddd76f105a37b9fb066120f617..fec008a212e9bd3c9466c92c4721b82e7af5abf9 100644 (file)
@@ -108,7 +108,6 @@ struct MT_OBJ_BINDING_INFO {
 // Track all command buffers
 struct MT_CB_INFO {
     VkCmdBufferCreateInfo       createInfo;
-    uint64_t                    pLastBoundDynamicState[VK_NUM_STATE_BIND_POINT];
     VkPipeline                  pipelines[VK_PIPELINE_BIND_POINT_NUM];
     uint32_t                    attachmentCount;
     VkCmdBuffer                 cmdBuffer;
index 0ae9017e7532166881ff70944e694f026c7b75cf..dd266106088851092e69ac941e42046523a16810 100644 (file)
@@ -123,18 +123,6 @@ static inline const char* string_VkDbgObjectType(VkDbgObjectType input_value)
             return "VK_OBJECT_TYPE_DEVICE";
         case VK_OBJECT_TYPE_DEVICE_MEMORY:
             return "VK_OBJECT_TYPE_DEVICE_MEMORY";
-        case VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE";
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE";
-        case VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE";
-        case VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE";
-        case VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE";
-        case VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE:
-            return "VK_OBJECT_TYPE_DYNAMIC_VIEPORT_STATE";
         case VK_OBJECT_TYPE_EVENT:
             return "VK_OBJECT_TYPE_EVENT";
         case VK_OBJECT_TYPE_FENCE:
index 3b3cc0681ecfaea664a218f759b458918eab59f2..029d085f19a60ad685c50e3da6f13744752befba 100644 (file)
@@ -4962,330 +4962,6 @@ VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
     get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
 }
 
-bool PreCreateDynamicViewportState(
-    VkDevice device,
-    const VkDynamicViewportStateCreateInfo* pCreateInfo)
-{
-    if(pCreateInfo != nullptr)
-    {
-    if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
-        return false;
-    }
-    if(pCreateInfo->pViewports != nullptr)
-    {
-    }
-    if(pCreateInfo->pScissors != nullptr)
-    {
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicViewportState(
-    VkDevice device,
-    VkDynamicViewportState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
-    VkDevice device,
-    const VkDynamicViewportStateCreateInfo* pCreateInfo,
-    VkDynamicViewportState* pState)
-{
-    PreCreateDynamicViewportState(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
-
-    PostCreateDynamicViewportState(device, pState, result);
-
-    return result;
-}
-
-bool PreCreateDynamicLineWidthState(
-    VkDevice device,
-    const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
-{
-    if(pCreateInfo != nullptr)
-    {
-    if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicLineWidthState(
-    VkDevice device,
-    VkDynamicLineWidthState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
-    VkDevice device,
-    const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
-    VkDynamicLineWidthState* pState)
-{
-    PreCreateDynamicLineWidthState(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
-
-    PostCreateDynamicLineWidthState(device, pState, result);
-
-    return result;
-}
-
-bool PreCreateDynamicDepthBiasState(
-    VkDevice device,
-    const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
-{
-    if(pCreateInfo != nullptr)
-    {
-    if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicDepthBiasState(
-    VkDevice device,
-    VkDynamicDepthBiasState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
-    VkDevice device,
-    const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
-    VkDynamicDepthBiasState* pState)
-{
-    PreCreateDynamicDepthBiasState(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
-
-    PostCreateDynamicDepthBiasState(device, pState, result);
-
-    return result;
-}
-
-bool PreCreateDynamicBlendState(
-    VkDevice device,
-    const VkDynamicBlendStateCreateInfo* pCreateInfo)
-{
-    if(pCreateInfo != nullptr)
-    {
-    if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicBlendState(
-    VkDevice device,
-    VkDynamicBlendState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
-    VkDevice device,
-    const VkDynamicBlendStateCreateInfo* pCreateInfo,
-    VkDynamicBlendState* pState)
-{
-    PreCreateDynamicBlendState(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
-
-    PostCreateDynamicBlendState(device, pState, result);
-
-    return result;
-}
-
-bool PreCreateDynamicDepthBoundsState(
-    VkDevice device,
-    const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
-{
-    if(pCreateInfo != nullptr)
-    {
-    if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicDepthBoundsState(
-    VkDevice device,
-    VkDynamicDepthBoundsState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
-    VkDevice device,
-    const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
-    VkDynamicDepthBoundsState* pState)
-{
-    PreCreateDynamicDepthBoundsState(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
-
-    PostCreateDynamicDepthBoundsState(device, pState, result);
-
-    return result;
-}
-
-bool PreCreateDynamicStencilState(
-    VkDevice device,
-    const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
-    const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
-{
-    if(pCreateInfoFront != nullptr)
-    {
-    if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    if(pCreateInfoBack != nullptr)
-    {
-    if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
-        return false;
-    }
-    }
-
-    return true;
-}
-
-bool PostCreateDynamicStencilState(
-    VkDevice device,
-    VkDynamicStencilState* pState,
-    VkResult result)
-{
-
-    if(pState != nullptr)
-    {
-    }
-
-    if(result < VK_SUCCESS)
-    {
-        std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
-    VkDevice device,
-    const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
-    const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
-    VkDynamicStencilState* pState)
-{
-    PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
-
-    PostCreateDynamicStencilState(device, pState, result);
-
-    return result;
-}
-
 bool PreCreateFramebuffer(
     VkDevice device,
     const VkFramebufferCreateInfo* pCreateInfo)
@@ -5821,108 +5497,44 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
     PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
 }
 
-bool PostCmdBindDynamicViewportState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicViewportState dynamicViewportState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportAndScissorCount, const VkViewport* pViewports, const VkRect2D* pScissors)
 {
-
-
-    return true;
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicViewportState dynamicViewportState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
 {
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
-
-    PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
 }
 
-bool PostCmdBindDynamicLineWidthState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicLineWidthState dynamicLineWidthState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
 {
-
-
-    return true;
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicLineWidthState dynamicLineWidthState)
-{
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
-
-    PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
-}
-
-bool PostCmdBindDynamicDepthBiasState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicDepthBiasState dynamicDepthBiasState)
-{
-
-
-    return true;
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicDepthBiasState dynamicDepthBiasState)
-{
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
-
-    PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
-}
-
-bool PostCmdBindDynamicBlendState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicBlendState dynamicBlendState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
 {
-
-
-    return true;
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicBlendState dynamicBlendState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
 {
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
-
-    PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
 }
 
-bool PostCmdBindDynamicDepthBoundsState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicDepthBoundsState dynamicDepthBoundsState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
 {
-    return true;
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicDepthBoundsState dynamicDepthBoundsState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
 {
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
-
-    PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
-}
-
-bool PostCmdBindDynamicStencilState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicStencilState dynamicStencilState)
-{
-    return true;
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
-    VkCmdBuffer cmdBuffer,
-    VkDynamicStencilState dynamicStencilState)
+VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
 {
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
-
-    PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
 }
 
 bool PreCmdBindDescriptorSets(
@@ -7368,18 +6980,22 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, co
         return (PFN_vkVoidFunction) vkResetDescriptorPool;
     if (!strcmp(funcName, "vkAllocDescriptorSets"))
         return (PFN_vkVoidFunction) vkAllocDescriptorSets;
-    if (!strcmp(funcName, "vkCreateDynamicViewportState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
-    if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
-    if (!strcmp(funcName, "vkCreateDynamicBlendState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
-    if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
-    if (!strcmp(funcName, "vkCreateDynamicStencilState"))
-        return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
+    if (!strcmp(funcName, "vkCmdSetViewport"))
+        return (PFN_vkVoidFunction) vkCmdSetViewport;
+    if (!strcmp(funcName, "vkCmdSetLineWidth"))
+        return (PFN_vkVoidFunction) vkCmdSetLineWidth;
+    if (!strcmp(funcName, "vkCmdSetDepthBias"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBias;
+    if (!strcmp(funcName, "vkCmdSetBlendConstants"))
+        return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
+    if (!strcmp(funcName, "vkCmdSetDepthBounds"))
+        return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
+    if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
+    if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
+    if (!strcmp(funcName, "vkCmdSetStencilReference"))
+        return (PFN_vkVoidFunction) vkCmdSetStencilReference;
     if (!strcmp(funcName, "vkCreateCommandBuffer"))
         return (PFN_vkVoidFunction) vkCreateCommandBuffer;
     if (!strcmp(funcName, "vkBeginCommandBuffer"))
index 4ac8f211bbf27ef083e80b427103860b89d8ce40..ef7571ea685465ddfda03dcfdfbb7c7ab4c27a7f 100644 (file)
@@ -21,12 +21,11 @@ The DrawState layer tracks state leading into Draw cmds. This includes the Pipel
 | Valid DescriptorSetLayout | Flag DescriptorSetLayout object that was not properly created | INVALID_LAYOUT | vkAllocDescriptorSets | None | Anywhere else to check this? |
 | Valid Pipeline | Flag VkPipeline object that was not properly created | INVALID_PIPELINE | vkCmdBindPipeline | InvalidPipeline | NA |
 | Valid Pipeline Create Info | Tests for the following: That compute shaders are not specified for the graphics pipeline, tess evaluation and tess control shaders are included or excluded as a pair, that VK_PRIMITIVE_TOPOLOGY_PATCH is set as IA topology for tessellation pipelines, that VK_PRIMITIVE_TOPOLOGY_PATCH primitive topology is only set for tessellation pipelines, and that Vtx Shader specified | INVALID_PIPELINE_CREATE_STATE | vkCreateGraphicsPipelines | InvalidPipelineCreateState | NA |
-| Valid CmdBuffer | Validates that the command buffer object was properly created and is currently valid | INVALID_CMD_BUFFER | vkQueueSubmit vkBeginCommandBuffer vkEndCommandBuffer vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdBeginRenderPass vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands vkCmdDbgMarkerBegin vkCmdDbgMarkerEnd vkCreateCommandBuffer | None | NA |
-| Valid Dynamic State | Validates that each of the 4 DSOs are valid, properly constructed objects of the correct type | INVALID_DYNAMIC_STATE_OBJECT | vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState | None | NA |
+| Valid CmdBuffer | Validates that the command buffer object was properly created and is currently valid | INVALID_CMD_BUFFER | vkQueueSubmit vkBeginCommandBuffer vkEndCommandBuffer vkCmdBindPipeline vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdBeginRenderPass vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands vkCmdDbgMarkerBegin vkCmdDbgMarkerEnd vkCreateCommandBuffer | None | NA |
 | Vtx Buffer Bounds | Check if VBO index too large for PSO Vtx binding count, and that at least one vertex buffer is attached to pipeline object | VTX_INDEX_OUT_OF_BOUNDS | vkCmdBindDescriptorSets vkCmdBindVertexBuffers | VtxBufferBadIndex | NA |
 | Idx Buffer Alignment | Verify that offset of Index buffer falls on an alignment boundary as defined by IdxBufferAlignmentError param | VTX_INDEX_ALIGNMENT_ERROR | vkCmdBindIndexBuffer | IdxBufferAlignmentError | NA |
 | Cmd Buffer End | Verifies that EndCommandBuffer was called for this cmdBuffer at QueueSubmit time | NO_END_CMD_BUFFER | vkQueueSubmit | NoEndCmdBuffer | NA |
-| Cmd Buffer Begin | Check that BeginCommandBuffer was called for this command buffer when binding commands or calling end | NO_BEGIN_CMD_BUFFER | vkEndCommandBuffer vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp | NoBeginCmdBuffer | NA |
+| Cmd Buffer Begin | Check that BeginCommandBuffer was called for this command buffer when binding commands or calling end | NO_BEGIN_CMD_BUFFER | vkEndCommandBuffer vkCmdBindPipeline vkCmdSetViewport vkCmdSetLineWidth vkCmdSetDepthBias vkCmdSetBlendConstants vkCmdSetDepthBounds vkCmdSetStencilCompareMask vkCmdSetStencilWriteMask vkCmdSetStencilReference vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp | NoBeginCmdBuffer | NA |
 | Cmd Buffer Submit Count | Verify that ONE_TIME submit cmdbuffer is not submitted multiple times | CMD_BUFFER_SINGLE_SUBMIT_VIOLATION | vkBeginCommandBuffer, vkQueueSubmit | CmdBufferTwoSubmits | NA |
 | Valid Secondary CmdBuffer | Validates that no primary command buffers are sent to vkCmdExecuteCommands() are | INVALID_SECONDARY_CMD_BUFFER | vkCmdExecuteCommands | ExecuteCommandsPrimaryCB | NA |
 | Descriptor Type | Verify Descriptor type in bound descriptor set layout matches descriptor type specified in update | DESCRIPTOR_TYPE_MISMATCH | vkUpdateDescriptorSets | DSTypeMismatch | With various DS API updates, need to revisit this code |
@@ -41,7 +40,7 @@ The DrawState layer tracks state leading into Draw cmds. This includes the Pipel
 | Dynamic Depth Bounds State Binding | Verify that depth bounds dynamic state bound when depth enabled | DEPTH_BOUNDS_NOT_BOUND |vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect | TODO | Verify this check and Write targeted test |
 | Dynamic Stencil State Binding | Verify that stencil dynamic state bound when depth enabled | STENCIL_NOT_BOUND |vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect | TODO | Verify this check and Write targeted test |
 | RenderPass misuse | Tests for the following: that BeginRenderPass, ResolveImage, ClearColorImage, ClearDepthStencilImage are not called during an active Renderpass, and that binding compute descriptior sets or pipelines does not take place during an active  | INVALID_RENDERPASS_CMD | vkCmdBindPipeline vkCmdBindDescriptorSets vkCmdBlitImage vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdBeginRenderPass | RenderPassWithinRenderPass | NA |
-| Correct use of RenderPass | Validates that rendering commands are issued inside an active RenderPass | NO_ACTIVE_RENDERPASS | vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect | BindPipelineNoRenderPass VtxBufferNoRenderPass | NA |
+| Correct use of RenderPass | Validates that rendering commands are issued inside an active RenderPass | NO_ACTIVE_RENDERPASS | vkCmdBindPipeline vkCmdSetViewport vkCmdSetLineWidth vkCmdSetDepthBias vkCmdSetBlendConstants vkCmdSetDepthBounds vkCmdSetStencilCompareMask vkCmdSetStencilWriteMask vkCmdSetStencilReference vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect | BindPipelineNoRenderPass VtxBufferNoRenderPass | NA |
 | Valid RenderPass | Flag error if attempt made to Begin/End/Continue a NULL or otherwise invalid RenderPass object | INVALID_RENDERPASS | vkCmdBeginRenderPass vkCmdEndRenderPass vkBeginCommandBuffer | NullRenderPass | NA |
 | DescriptorSet Updated | Warn user if DescriptorSet bound that was never updated | DESCRIPTOR_SET_NOT_UPDATED | vkCmdBindDescriptorSets | DescriptorSetNotUpdated | NA |
 | Correct Clear Use | Warn user if CmdClear for Color or DepthStencil issued to Cmd Buffer prior to a Draw Cmd. RenderPass LOAD_OP_CLEAR is preferred in this case. | CLEAR_CMD_BEFORE_DRAW | vkCmdClearColorImage vkCmdClearDepthStencilImage | ClearCmdNoDraw | NA |
@@ -87,8 +86,8 @@ The ParamChecker layer validates parameter values and flags errors for any value
 
 | Check | Overview | ENUM | Relevant API | Testname | Notes/TODO |
 | ----- | -------- | ---------------- | ------------ | -------- | ---------- |
-| Input Parameters | Pointers in structures are recursively validated to be non-null. Enumerated types are validated against min and max enum values. Structure Types are verified to be correct. | NA | vkQueueSubmit vkAllocMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkCreateFence vkResetFences vkWaitForFences vkCreateSemaphore vkCreateEvent vkCreateQueryPool vkCreateBuffer vkCreateBufferView vkCreateImage vkGetImageSubresourceLayout vkCreateImageView vkCreateShader vkCreatePipelineCache vkMergePipelineCaches vkCreateGraphicsPipelines vkCreateComputePipelines vkCreatePipelineLayout vkCreateSampler vkCreateDescriptorSetLayout( vkCreateDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkUpdateDescriptorSets vkCreateDynamicViewportState vkCreateDynamicLineWidthState vkCreateDynamicDepthBiasState vkCreateDynamicBlendState vkCreateDynamicDepthBoundsState vkCreateDynamicStencilState vkCreateFramebuffer vkCreateRenderPass vkCreateCommandPool vkCreateCommandBuffer vkBeginCommandBuffer vkCmdBindDescriptorSets vkCmdBindVertexBuffers vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdWaitEvents vkCmdPipelineBarrier vkCmdPushConstants vkCmdBeginRenderPass vkCmdExecuteCommands | TBD | NA |
-| Call results, Output Parameters | Return values are checked for VK_SUCCESS, returned pointers are checked to be NON-NULL, enumerated types of return values are checked to be within the defined range. | NA | vkEnumeratePhysicalDevices vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceLimits vkGetPhysicalDeviceProperties vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceMemoryProperties vkGetDeviceQueue vkQueueSubmit vkQueueWaitIdle vkDeviceWaitIdle vkAllocMemory vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkGetDeviceMemoryCommitment vkBindBufferMemory vkBindImageMemory vkGetBufferMemoryRequirements vkGetImageMemoryRequirements vkGetImageSparseMemoryRequirements vkGetPhysicalDeviceSparseImageFormatProperties vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkCreateFence vkDestroyFence vkResetFences vkGetFenceStatus vkWaitForFences vkCreateSemaphore vkDestroySemaphore vkQueueSignalSemaphore vkQueueWaitSemaphore vkCreateEvent vkDestroyEvent vkGetEventStatus vkSetEvent vkResetEvent vkCreateQueryPool vkDestroyQueryPool vkGetQueryPoolResults vkCreateBuffer vkDestroyBuffer vkCreateBufferView vkDestroyBufferView vkCreateImage vkDestroyImage vkGetImageSubresourceLayout vkCreateImageView vkDestroyImageView vkDestroyShaderModule vkCreateShader vkDestroyShader vkCreatePipelineCache vkDestroyPipelineCache vkGetPipelineCacheSize vkGetPipelineCacheData vkMergePipelineCaches vkCreateGraphicsPipelines vkCreateComputePipelines vkDestroyPipeline vkCreatePipelineLayout vkDestroyPipelineLayout vkCreateSampler vkDestroySampler vkCreateDescriptorSetLayout vkDestroyDescriptorSetLayout vkCreateDescriptorPool vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkUpdateDescriptorSets vkCreateDynamicViewportState vkDestroyDynamicViewportState vkCreateDynamicLineWidthState vkDestroyDynamicLineWidthState vkCreateDynamicDepthBiasState vkDestroyDynamicDepthBiasState vkCreateDynamicBlendState vkDestroyDynamicBlendState vkCreateDynamicDepthBiasState vkDestroyDynamicDepthBiasState vkCreateDynamicStencilState vkDestroyDynamicStencilState  vkCreateFramebuffer vkDestroyFramebuffer vkCreateRenderPass vkDestroyRenderPass vkGetRenderAreaGranularity vkCreateCommandPool vkDestroyCommandPool vkResetCommandPool vkCreateCommandBuffer vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicBlendState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdPushConstants vkCmdBeginRenderPass vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands | TBD | NA |
+| Input Parameters | Pointers in structures are recursively validated to be non-null. Enumerated types are validated against min and max enum values. Structure Types are verified to be correct. | NA | vkQueueSubmit vkAllocMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkCreateFence vkResetFences vkWaitForFences vkCreateSemaphore vkCreateEvent vkCreateQueryPool vkCreateBuffer vkCreateBufferView vkCreateImage vkGetImageSubresourceLayout vkCreateImageView vkCreateShader vkCreatePipelineCache vkMergePipelineCaches vkCreateGraphicsPipelines vkCreateComputePipelines vkCreatePipelineLayout vkCreateSampler vkCreateDescriptorSetLayout( vkCreateDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkUpdateDescriptorSets vkCreateFramebuffer vkCreateRenderPass vkCreateCommandPool vkCreateCommandBuffer vkBeginCommandBuffer vkCmdBindDescriptorSets vkCmdBindVertexBuffers vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdWaitEvents vkCmdPipelineBarrier vkCmdPushConstants vkCmdBeginRenderPass vkCmdExecuteCommands | TBD | NA |
+| Call results, Output Parameters | Return values are checked for VK_SUCCESS, returned pointers are checked to be NON-NULL, enumerated types of return values are checked to be within the defined range. | NA | vkEnumeratePhysicalDevices vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceLimits vkGetPhysicalDeviceProperties vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceMemoryProperties vkGetDeviceQueue vkQueueSubmit vkQueueWaitIdle vkDeviceWaitIdle vkAllocMemory vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkGetDeviceMemoryCommitment vkBindBufferMemory vkBindImageMemory vkGetBufferMemoryRequirements vkGetImageMemoryRequirements vkGetImageSparseMemoryRequirements vkGetPhysicalDeviceSparseImageFormatProperties vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkCreateFence vkDestroyFence vkResetFences vkGetFenceStatus vkWaitForFences vkCreateSemaphore vkDestroySemaphore vkQueueSignalSemaphore vkQueueWaitSemaphore vkCreateEvent vkDestroyEvent vkGetEventStatus vkSetEvent vkResetEvent vkCreateQueryPool vkDestroyQueryPool vkGetQueryPoolResults vkCreateBuffer vkDestroyBuffer vkCreateBufferView vkDestroyBufferView vkCreateImage vkDestroyImage vkGetImageSubresourceLayout vkCreateImageView vkDestroyImageView vkDestroyShaderModule vkCreateShader vkDestroyShader vkCreatePipelineCache vkDestroyPipelineCache vkGetPipelineCacheSize vkGetPipelineCacheData vkMergePipelineCaches vkCreateGraphicsPipelines vkCreateComputePipelines vkDestroyPipeline vkCreatePipelineLayout vkDestroyPipelineLayout vkCreateSampler vkDestroySampler vkCreateDescriptorSetLayout vkDestroyDescriptorSetLayout vkCreateDescriptorPool vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkUpdateDescriptorSets vkCreateFramebuffer vkDestroyFramebuffer vkCreateRenderPass vkDestroyRenderPass vkGetRenderAreaGranularity vkCreateCommandPool vkDestroyCommandPool vkResetCommandPool vkCreateCommandBuffer vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdPushConstants vkCmdBeginRenderPass vkCmdNextSubpass vkCmdEndRenderPass vkCmdExecuteCommands | TBD | NA |
 | NA | Enum used for informational messages | NONE | | NA | None |
 
 ### ParamChecker Pending Work
@@ -132,11 +131,11 @@ The MemTracker layer tracks memory objects and references and validates that the
 
 | Check | Overview | ENUM MEMTRACK_* | Relevant API | Testname | Notes/TODO |
 | ----- | -------- | ---------------- | ------------ | -------- | ---------- |
-| Valid Command Buffer | Verifies that the command buffer was properly created and is currently valid | INVALID_CB | vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkBeginCommandBuffer vkResetCommandBuffer vkDestroyDevice vkFreeMemory | NA | NA |
+| Valid Command Buffer | Verifies that the command buffer was properly created and is currently valid | INVALID_CB | vkCmdBindPipeline vkCmdSetViewport vkCmdSetLineWidth vkCmdSetDepthBias vkCmdSetBlendConstants vkCmdSetDepthBounds vkCmdSetStencilCompareMask vkCmdSetStencilWriteMask vkCmdSetStencilReference vkBeginCommandBuffer vkResetCommandBuffer vkDestroyDevice vkFreeMemory | NA | NA |
 | Valid Memory Object | Verifies that the memory object was properly created and is currently valid | INVALID_MEM_OBJ | vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkFreeMemory vkBindBufferMemory vkBindImageMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkQueueBindSparseBufferMemory | NA | NA |
 | Free Referenced Memory | Checks to see if memory being freed still has current references | FREED_MEM_REF | vmFreeMemory | FreeBoundMemory | NA |
 | Memory Properly Bound | Validate that the memory object referenced in the call was properly created, is currently valid, and is properly bound to the object | MISSING_MEM_BINDINGS | vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | NA |
-| Valid Object | Verifies that the specified Vulkan object was created properly and is currently valid | INVALID_OBJECT | vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | NA |
+| Valid Object | Verifies that the specified Vulkan object was created properly and is currently valid | INVALID_OBJECT | vkCmdBindPipeline vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | NA |
 | Bind Invalid Memory | Validate that memory object was correctly created, that the command buffer object was correctly created, and that both are currently valid objects. | MEMORY_BINDING_ERROR | vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkQueueBindSparseBufferMemory vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | The valid Object checks are primarily the responsibilty of ObjectTracker layer, so these checks are more of a backup in case ObjectTracker is not enabled | 
 | Objects Not Destroyed | Verify all objects destroyed at DestroyDevice time | MEMORY_LEAK | vkDestroyDevice | NA | NA |
 | Memory Mapping State | Verifies that mapped memory is CPU-visible | INVALID_STATE | vkMapMemory | MapMemWithoutHostVisibleBit | NA |
@@ -204,11 +203,11 @@ The ObjectTracker layer maintains a record of all Vulkan objects. It flags error
 
 | Check | Overview | ENUM OBJTRACK_* | Relevant API | Testname | Notes/TODO |
 | ----- | -------- | ---------------- | ------------ | -------- | ---------- |
-| Valid Object | Validates that referenced object was properly created and is currently valid. | INVALID_OBJECT | vkAcquireNextImageKHR vkAllocDescriptorSets vkAllocMemory vkBeginCommandBuffer vkBindBufferMemory vkBindImageMemory vkCmdBeginQuery vkCmdBeginRenderPass vkCmdBindDescriptorSets vkCmdBindDynamicViewportState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicBlendState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindIndexBuffer vkCmdBindPipeline vkCmdBindVertexBuffers vkCmdBlitImage vkCmdClearColorAttachment vkCmdClearColorImage vkCmdClearDepthStencilAttachment vkCmdClearDepthStencilImage vkCmdCopyBuffer vkCmdCopyBufferToImage vkCmdCopyImage vkCmdCopyImageToBuffer vkCmdCopyQueryPoolResults vkCmdDispatch vkCmdDispatchIndirect vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndexedIndirect vkCmdDrawIndirect vkCmdEndQuery vkCmdEndRenderPass vkCmdExecuteCommands vkCmdFillBuffer vkCmdNextSubpass vkCmdPipelineBarrier vkCmdPushConstants vkCmdResetEvent vkCmdResetQueryPool vkCmdResolveImage vkCmdSetEvent vkCmdUpdateBuffer vkCmdWaitEvents vkCmdWriteTimestamp vkCreateBuffer vkCreateBufferView vkCreateCommandBuffer vkCreateCommandPool vkCreateComputePipelines vkCreateDescriptorPool vkCreateDescriptorSetLayout vkCreateDynamicViewportState vkCreateDynamicLineWidthState vkCreateDynamicDepthBiasState vkCreateDynamicBlendState vkCreateDynamicDepthBoundsState vkCreateDynamicStencilState vkCreateEvent vkCreateFence vkCreateFramebuffer vkCreateGraphicsPipelines vkCreateImage vkCreateImageView vkCreatePipelineCache vkCreatePipelineLayout vkCreateQueryPool vkCreateRenderPass vkCreateSampler vkCreateSemaphore vkCreateShader vkCreateShaderModule vkCreateSwapchainKHR vkDestroyBuffer vkDestroyBufferView vkDestroyCommandBuffer vkDestroyCommandPool vkDestroyDescriptorPool vkDestroyDescriptorSetLayout vkDestroyDynamicBlendState vkDestroyDynamicLineWidthState vkDestroyDynamicDepthBiasState vkDestroyDynamicDepthBoundsState vkDestroyDynamicStencilState vkDestroyDynamicViewportState vkDestroyEvent vkDestroyFence vkDestroyFramebuffer vkDestroyImage vkDestroyImageView vkDestroyPipeline vkDestroyPipelineCache vkDestroyPipelineLayout vkDestroyQueryPool vkDestroyRenderPass vkDestroySampler vkDestroySemaphore vkDestroyShader vkDestroyShaderModule vkDestroySwapchainKHR vkDeviceWaitIdle vkEndCommandBuffer vkEnumeratePhysicalDevices vkFreeDescriptorSets vkFreeMemory vkFreeMemory vkGetBufferMemoryRequirements vkGetDeviceMemoryCommitment vkGetDeviceQueue vkGetEventStatus vkGetFenceStatus vkGetImageMemoryRequirements vkGetImageSparseMemoryRequirements vkGetImageSubresourceLayout vkGetPhysicalDeviceSurfaceSupportKHR vkGetPipelineCacheData vkGetPipelineCacheSize vkGetQueryPoolResults vkGetRenderAreaGranularity vkInvalidateMappedMemoryRanges vkMapMemory vkMergePipelineCaches vkQueueBindSparseBufferMemory vkQueueSignalSemaphore vkQueueWaitSemaphore vkResetCommandBuffer vkResetCommandPool vkResetDescriptorPool vkResetEvent vkResetFences vkSetEvent vkUnmapMemory vkUpdateDescriptorSets vkWaitForFences | BindInvalidMemory BindMemoryToDestroyedObject | Every VkObject class of parameter will be run through this check. This check may ultimately supersede UNKNOWN_OBJECT |
+| Valid Object | Validates that referenced object was properly created and is currently valid. | INVALID_OBJECT | vkAcquireNextImageKHR vkAllocDescriptorSets vkAllocMemory vkBeginCommandBuffer vkBindBufferMemory vkBindImageMemory vkCmdBeginQuery vkCmdBeginRenderPass vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindPipeline vkCmdBindVertexBuffers vkCmdBlitImage vkCmdClearColorAttachment vkCmdClearColorImage vkCmdClearDepthStencilAttachment vkCmdClearDepthStencilImage vkCmdCopyBuffer vkCmdCopyBufferToImage vkCmdCopyImage vkCmdCopyImageToBuffer vkCmdCopyQueryPoolResults vkCmdDispatch vkCmdDispatchIndirect vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndexedIndirect vkCmdDrawIndirect vkCmdEndQuery vkCmdEndRenderPass vkCmdExecuteCommands vkCmdFillBuffer vkCmdNextSubpass vkCmdPipelineBarrier vkCmdPushConstants vkCmdResetEvent vkCmdResetQueryPool vkCmdResolveImage vkCmdSetEvent vkCmdUpdateBuffer vkCmdWaitEvents vkCmdWriteTimestamp vkCreateBuffer vkCreateBufferView vkCreateCommandBuffer vkCreateCommandPool vkCreateComputePipelines vkCreateDescriptorPool vkCreateDescriptorSetLayout vkCreateEvent vkCreateFence vkCreateFramebuffer vkCreateGraphicsPipelines vkCreateImage vkCreateImageView vkCreatePipelineCache vkCreatePipelineLayout vkCreateQueryPool vkCreateRenderPass vkCreateSampler vkCreateSemaphore vkCreateShader vkCreateShaderModule vkCreateSwapchainKHR vkDestroyBuffer vkDestroyBufferView vkDestroyCommandBuffer vkDestroyCommandPool vkDestroyDescriptorPool vkDestroyDescriptorSetLayout vkDestroyEvent vkDestroyFence vkDestroyFramebuffer vkDestroyImage vkDestroyImageView vkDestroyPipeline vkDestroyPipelineCache vkDestroyPipelineLayout vkDestroyQueryPool vkDestroyRenderPass vkDestroySampler vkDestroySemaphore vkDestroyShader vkDestroyShaderModule vkDestroySwapchainKHR vkDeviceWaitIdle vkEndCommandBuffer vkEnumeratePhysicalDevices vkFreeDescriptorSets vkFreeMemory vkFreeMemory vkGetBufferMemoryRequirements vkGetDeviceMemoryCommitment vkGetDeviceQueue vkGetEventStatus vkGetFenceStatus vkGetImageMemoryRequirements vkGetImageSparseMemoryRequirements vkGetImageSubresourceLayout vkGetPhysicalDeviceSurfaceSupportKHR vkGetPipelineCacheData vkGetPipelineCacheSize vkGetQueryPoolResults vkGetRenderAreaGranularity vkInvalidateMappedMemoryRanges vkMapMemory vkMergePipelineCaches vkQueueBindSparseBufferMemory vkQueueSignalSemaphore vkQueueWaitSemaphore vkResetCommandBuffer vkResetCommandPool vkResetDescriptorPool vkResetEvent vkResetFences vkSetEvent vkUnmapMemory vkUpdateDescriptorSets vkWaitForFences | BindInvalidMemory BindMemoryToDestroyedObject | Every VkObject class of parameter will be run through this check. This check may ultimately supersede UNKNOWN_OBJECT |
 | Object Cleanup | Verify that object properly destroyed | DESTROY_OBJECT_FAILED | vkDestroyInstance, vkDestroyDevice, vkFreeMemory | ? | NA |
 | Objects Leak | When an Instance or Device object is destroyed, validates that all objects belonging to that device/instance have previously been destroyed | OBJECT_LEAK | vkDestroyDevice vkDestroyInstance | ? | NA |
 | Object Count | Flag error if number of objects requested from extenstion functions exceeds max number of actual objects | OBJCOUNT_MAX_EXCEEDED | objTrackGetObjects objTrackGetObjectsOfType | ? | NA |
-| Valid Destroy Object | Validates that an object pass into a destroy function was properly created and is currently valid | NONE | vkDestroyInstance vkDestroyDevice vkDestroyFence vkDestroySemaphore vkDestroyEvent vkDestroyQueryPool vkDestroyBuffer vkDestroyBufferView vkDestroyImage vkDestroyImageView vkDestroyShaderModule vkDestroyShader vkDestroyPipelineCache vkDestroyPipeline vkDestroyPipelineLayout vkDestroySampler vkDestroyDescriptorSetLayout vkDestroyDescriptorPool vkDestroyDynamicViewportState vkDestroyDynamicBlendState vkDestroyDynamicLineWidthState vkDestroyDynamicDepthBiasState vkDestroyDynamicDepthBoundsState vkDestroyDynamicStencilState vkDestroyCommandPool vkDestroyCommandBuffer vkDestroyFramebuffer vkDestroyRenderPass vkDestroySwapchainKHR | TBD | These cases need to be moved to a more appropriate error enum |
+| Valid Destroy Object | Validates that an object pass into a destroy function was properly created and is currently valid | NONE | vkDestroyInstance vkDestroyDevice vkDestroyFence vkDestroySemaphore vkDestroyEvent vkDestroyQueryPool vkDestroyBuffer vkDestroyBufferView vkDestroyImage vkDestroyImageView vkDestroyShaderModule vkDestroyShader vkDestroyPipelineCache vkDestroyPipeline vkDestroyPipelineLayout vkDestroySampler vkDestroyDescriptorSetLayout vkDestroyDescriptorPool vkDestroyCommandPool vkDestroyCommandBuffer vkDestroyFramebuffer vkDestroyRenderPass vkDestroySwapchainKHR | TBD | These cases need to be moved to a more appropriate error enum |
 | Unknown object  | Internal layer errors when it attempts to update use count for an object that's not in its internal tracking datastructures. | UNKNOWN_OBJECT | | NA | This may be irrelevant due to INVALID_OBJECT error, need to look closely and merge this with that error as appropriate. |
 | NA | Enum used for informational messages | NONE | | NA | None |
 | NA | Enum used for errors in the layer itself. This does not indicate an app issue, but instead a bug in the layer. | INTERNAL_ERROR | | NA | None |
@@ -248,8 +247,8 @@ It cannot insure that there is no latent race condition.
 
 | Check | Overview | ENUM THREADING_CHECKER_* | Relevant API | Testname | Notes/TODO |
 | ----- | -------- | ---------------- | ---------------- | -------- | ---------- |
-| Thread Collision | Detects and notifies user if multiple threads are modifying thes same object | MULTIPLE_THREADS | vkQueueSubmit vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkBindBufferMemory vkBindImageMemory vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkDestroySemaphore vkQueueSignalSemaphore vkDestroyBuffer vkDestroyImage vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicBlendState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdBeginRenderPass vkCmdNextSubpass vkCmdPushConstants vkCmdEndRenderPass vkCmdExecuteCommands | ??? | NA |
-| Thread Reentrancy | Detects cases of a single thread calling Vulkan reentrantly | SINGLE_THREAD_REUSE | vkQueueSubmit vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkBindBufferMemory vkBindImageMemory vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkDestroySemaphore vkQueueSignalSemaphore vkDestroyBuffer vkDestroyImage vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdBindDynamicViewportState vkCmdBindDynamicBlendState vkCmdBindDynamicLineWidthState vkCmdBindDynamicDepthBiasState vkCmdBindDynamicDepthBoundsState vkCmdBindDynamicStencilState vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdBeginRenderPass vkCmdNextSubpass vkCmdPushConstants vkCmdEndRenderPass vkCmdExecuteCommands | ??? | NA |
+| Thread Collision | Detects and notifies user if multiple threads are modifying thes same object | MULTIPLE_THREADS | vkQueueSubmit vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkBindBufferMemory vkBindImageMemory vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkDestroySemaphore vkQueueSignalSemaphore vkDestroyBuffer vkDestroyImage vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdBeginRenderPass vkCmdNextSubpass vkCmdPushConstants vkCmdEndRenderPass vkCmdExecuteCommands | ??? | NA |
+| Thread Reentrancy | Detects cases of a single thread calling Vulkan reentrantly | SINGLE_THREAD_REUSE | vkQueueSubmit vkFreeMemory vkMapMemory vkUnmapMemory vkFlushMappedMemoryRanges vkInvalidateMappedMemoryRanges vkBindBufferMemory vkBindImageMemory vkQueueBindSparseBufferMemory vkQueueBindSparseImageOpaqueMemory vkQueueBindSparseImageMemory vkDestroySemaphore vkQueueSignalSemaphore vkDestroyBuffer vkDestroyImage vkDestroyDescriptorPool vkResetDescriptorPool vkAllocDescriptorSets vkFreeDescriptorSets vkDestroyCommandBuffer vkBeginCommandBuffer vkEndCommandBuffer vkResetCommandBuffer vkCmdBindPipeline vkCmdSetViewport vkCmdSetBlendConstants vkCmdSetLineWidth vkCmdSetDepthBias vkCmdSetDepthBounds vkCmdSetStencilCompareMask vkCmdSetStencilWriteMask vkCmdSetStencilReference vkCmdBindDescriptorSets vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDraw vkCmdDrawIndexed vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatch vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdClearColorAttachment vkCmdClearDepthStencilAttachment vkCmdResolveImage vkCmdSetEvent vkCmdResetEvent vkCmdWaitEvents vkCmdPipelineBarrier vkCmdBeginQuery vkCmdEndQuery vkCmdResetQueryPool vkCmdWriteTimestamp vkCmdCopyQueryPoolResults vkCmdBeginRenderPass vkCmdNextSubpass vkCmdPushConstants vkCmdEndRenderPass vkCmdExecuteCommands | ??? | NA |
 | NA | Enum used for informational messages | NONE | | NA | None |
 
 ### Threading Pending Work
index 1581d8172c201f3c6d2266cade85e461d8fdd94c..212e93eaca27a5e077b94a2610cbc44195ddc436 100644 (file)
@@ -205,30 +205,6 @@ static inline void* globalGetProcAddr(const char *name)
         return (void*) vkFreeDescriptorSets;
     if (!strcmp(name, "UpdateDescriptorSets"))
         return (void*) vkUpdateDescriptorSets;
-    if (!strcmp(name, "CreateDynamicViewportState"))
-        return (void*) vkCreateDynamicViewportState;
-    if (!strcmp(name, "DestroyDynamicViewportState"))
-        return (void*) vkDestroyDynamicViewportState;
-    if (!strcmp(name, "CreateDynamicLineWidthState"))
-        return (void*) vkCreateDynamicLineWidthState;
-    if (!strcmp(name, "DestroyDynamicLineWidthState"))
-        return (void*) vkDestroyDynamicLineWidthState;
-    if (!strcmp(name, "CreateDynamicDepthBiasState"))
-        return (void*) vkCreateDynamicDepthBiasState;
-    if (!strcmp(name, "DestroyDynamicDepthBiasState"))
-        return (void*) vkDestroyDynamicDepthBiasState;
-    if (!strcmp(name, "CreateDynamicBlendState"))
-        return (void*) vkCreateDynamicBlendState;
-    if (!strcmp(name, "DestroyDynamicBlendState"))
-        return (void*) vkDestroyDynamicBlendState;
-    if (!strcmp(name, "CreateDynamicDepthBoundsState"))
-        return (void*) vkCreateDynamicDepthBoundsState;
-    if (!strcmp(name, "DestroyDynamicDepthBoundsState"))
-        return (void*) vkDestroyDynamicDepthBoundsState;
-    if (!strcmp(name, "CreateDynamicStencilState"))
-        return (void*) vkCreateDynamicStencilState;
-    if (!strcmp(name, "DestroyDynamicStencilState"))
-        return (void*) vkDestroyDynamicStencilState;
     if (!strcmp(name, "CreateFramebuffer"))
         return (void*) vkCreateFramebuffer;
     if (!strcmp(name, "DestroyFramebuffer"))
@@ -257,20 +233,22 @@ static inline void* globalGetProcAddr(const char *name)
         return (void*) vkResetCommandBuffer;
     if (!strcmp(name, "CmdBindPipeline"))
         return (void*) vkCmdBindPipeline;
-    if (!strcmp(name, "CmdBindDynamicViewportState"))
-        return (void*) vkCmdBindDynamicViewportState;
-    if (!strcmp(name, "CmdBindDynamicLineWidthState"))
-        return (void*) vkCmdBindDynamicLineWidthState;
-    if (!strcmp(name, "CmdBindDynamicDepthBiasState"))
-        return (void*) vkCmdBindDynamicDepthBiasState;
-    if (!strcmp(name, "CmdBindDynamicBlendState"))
-        return (void*) vkCmdBindDynamicBlendState;
-    if (!strcmp(name, "CmdBindDynamicDepthBoundsState"))
-        return (void*) vkCmdBindDynamicDepthBoundsState;
-    if (!strcmp(name, "CmdBindDynamicStencilState"))
-        return (void*) vkCmdBindDynamicStencilState;
-    if (!strcmp(name, "CmdBindDescriptorSets"))
-        return (void*) vkCmdBindDescriptorSets;
+    if (!strcmp(name, "CmdSetViewport"))
+        return (void*) vkCmdSetViewport;
+    if (!strcmp(name, "CmdSetLineWidth"))
+        return (void*) vkCmdSetLineWidth;
+    if (!strcmp(name, "CmdSetDepthBias"))
+        return (void*) vkCmdSetDepthBias;
+    if (!strcmp(name, "CmdSetBlendConstants"))
+        return (void*) vkCmdSetBlendConstants;
+    if (!strcmp(name, "CmdSetDepthBounds"))
+        return (void*) vkCmdSetDepthBounds;
+    if (!strcmp(name, "CmdSetStencilCompareMask"))
+        return (void*) vkCmdSetStencilCompareMask;
+    if (!strcmp(name, "CmdSetStencilWriteMask"))
+        return (void*) vkCmdSetStencilWriteMask;
+    if (!strcmp(name, "CmdSetStencilReference"))
+        return (void*) vkCmdSetStencilReference;
     if (!strcmp(name, "CmdBindIndexBuffer"))
         return (void*) vkCmdBindIndexBuffer;
     if (!strcmp(name, "CmdBindVertexBuffers"))
index c27cd4ae3ea5ddbe5000ea339b19f3af0f5848e3..7024532f647e2776e5bdfb057027feddb3ad249f 100644 (file)
@@ -108,18 +108,6 @@ static inline void loader_init_device_dispatch_table(VkLayerDispatchTable *table
     table->AllocDescriptorSets = (PFN_vkAllocDescriptorSets) gpa(dev, "vkAllocDescriptorSets");
     table->FreeDescriptorSets = (PFN_vkFreeDescriptorSets) gpa(dev, "vkFreeDescriptorSets");
     table->UpdateDescriptorSets = (PFN_vkUpdateDescriptorSets) gpa(dev, "vkUpdateDescriptorSets");
-    table->CreateDynamicViewportState = (PFN_vkCreateDynamicViewportState) gpa(dev, "vkCreateDynamicViewportState");
-    table->DestroyDynamicViewportState = (PFN_vkDestroyDynamicViewportState) gpa(dev, "vkDestroyDynamicViewportState");
-    table->CreateDynamicLineWidthState = (PFN_vkCreateDynamicLineWidthState) gpa(dev, "vkCreateDynamicLineWidthState");
-    table->DestroyDynamicLineWidthState = (PFN_vkDestroyDynamicLineWidthState) gpa(dev, "vkDestroyDynamicLineWidthState");
-    table->CreateDynamicDepthBiasState = (PFN_vkCreateDynamicDepthBiasState) gpa(dev, "vkCreateDynamicDepthBiasState");
-    table->DestroyDynamicDepthBiasState = (PFN_vkDestroyDynamicDepthBiasState) gpa(dev, "vkDestroyDynamicDepthBiasState");
-    table->CreateDynamicBlendState = (PFN_vkCreateDynamicBlendState) gpa(dev, "vkCreateDynamicBlendState");
-    table->DestroyDynamicBlendState = (PFN_vkDestroyDynamicBlendState) gpa(dev, "vkDestroyDynamicBlendState");
-    table->CreateDynamicDepthBoundsState = (PFN_vkCreateDynamicDepthBoundsState) gpa(dev, "vkCreateDynamicDepthBoundsState");
-    table->DestroyDynamicDepthBoundsState = (PFN_vkDestroyDynamicDepthBoundsState) gpa(dev, "vkDestroyDynamicDepthBoundsState");
-    table->CreateDynamicStencilState = (PFN_vkCreateDynamicStencilState) gpa(dev, "vkCreateDynamicStencilState");
-    table->DestroyDynamicStencilState = (PFN_vkDestroyDynamicStencilState) gpa(dev, "vkDestroyDynamicStencilState");
     table->CreateFramebuffer = (PFN_vkCreateFramebuffer) gpa(dev, "vkCreateFramebuffer");
     table->DestroyFramebuffer = (PFN_vkDestroyFramebuffer) gpa(dev, "vkDestroyFramebuffer");
     table->CreateRenderPass = (PFN_vkCreateRenderPass) gpa(dev, "vkCreateRenderPass");
@@ -134,12 +122,14 @@ static inline void loader_init_device_dispatch_table(VkLayerDispatchTable *table
     table->EndCommandBuffer = (PFN_vkEndCommandBuffer) gpa(dev, "vkEndCommandBuffer");
     table->ResetCommandBuffer = (PFN_vkResetCommandBuffer) gpa(dev, "vkResetCommandBuffer");
     table->CmdBindPipeline = (PFN_vkCmdBindPipeline) gpa(dev, "vkCmdBindPipeline");
-    table->CmdBindDynamicViewportState = (PFN_vkCmdBindDynamicViewportState) gpa(dev, "vkCmdBindDynamicViewportState");
-    table->CmdBindDynamicLineWidthState = (PFN_vkCmdBindDynamicLineWidthState) gpa(dev, "vkCmdBindDynamicLineWidthState");
-    table->CmdBindDynamicDepthBiasState = (PFN_vkCmdBindDynamicDepthBiasState) gpa(dev, "vkCmdBindDynamicDepthBiasState");
-    table->CmdBindDynamicBlendState = (PFN_vkCmdBindDynamicBlendState) gpa(dev, "vkCmdBindDynamicBlendState");
-    table->CmdBindDynamicDepthBoundsState = (PFN_vkCmdBindDynamicDepthBoundsState) gpa(dev, "vkCmdBindDynamicDepthBoundsState");
-    table->CmdBindDynamicStencilState = (PFN_vkCmdBindDynamicStencilState) gpa(dev, "vkCmdBindDynamicStencilState");
+    table->CmdSetViewport = (PFN_vkCmdSetViewport) gpa(dev, "vkCmdSetViewport");
+    table->CmdSetLineWidth = (PFN_vkCmdSetLineWidth) gpa(dev, "vkCmdSetLineWidth");
+    table->CmdSetDepthBias = (PFN_vkCmdSetDepthBias) gpa(dev, "vkCmdSetDepthBias");
+    table->CmdSetBlendConstants = (PFN_vkCmdSetBlendConstants) gpa(dev, "vkCmdSetBlendConstants");
+    table->CmdSetDepthBounds = (PFN_vkCmdSetDepthBounds) gpa(dev, "vkCmdSetDepthBounds");
+    table->CmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask) gpa(dev, "vkCmdSetStencilCompareMask");
+    table->CmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask) gpa(dev, "vkCmdSetStencilWriteMask");
+    table->CmdSetStencilReference = (PFN_vkCmdSetStencilReference) gpa(dev, "vkCmdSetStencilReference");
     table->CmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets) gpa(dev, "vkCmdBindDescriptorSets");
     table->CmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers) gpa(dev, "vkCmdBindVertexBuffers");
     table->CmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer) gpa(dev, "vkCmdBindIndexBuffer");
@@ -340,30 +330,6 @@ static inline void *loader_lookup_device_dispatch_table(
         return (void *) table->FreeDescriptorSets;
     if (!strcmp(name, "UpdateDescriptorSets"))
         return (void *) table->UpdateDescriptorSets;
-    if (!strcmp(name, "CreateDynamicViewportState"))
-        return (void *) table->CreateDynamicViewportState;
-    if (!strcmp(name, "DestroyDynamicViewportState"))
-        return (void *) table->DestroyDynamicViewportState;
-    if (!strcmp(name, "CreateDynamicLineWidthState"))
-        return (void *) table->CreateDynamicLineWidthState;
-    if (!strcmp(name, "DestroyDynamicLineWidthState"))
-        return (void *) table->DestroyDynamicLineWidthState;
-    if (!strcmp(name, "CreateDynamicDepthBiasState"))
-        return (void *) table->CreateDynamicDepthBiasState;
-    if (!strcmp(name, "DestroyDynamicDepthBiasState"))
-        return (void *) table->DestroyDynamicDepthBiasState;
-    if (!strcmp(name, "CreateDynamicBlendState"))
-        return (void *) table->CreateDynamicBlendState;
-    if (!strcmp(name, "DestroyDynamicBlendState"))
-        return (void *) table->DestroyDynamicBlendState;
-    if (!strcmp(name, "CreateDynamicDepthBoundsState"))
-        return (void *) table->CreateDynamicDepthBoundsState;
-    if (!strcmp(name, "DestroyDynamicDepthBoundsState"))
-        return (void *) table->DestroyDynamicDepthBoundsState;
-    if (!strcmp(name, "CreateDynamicStencilState"))
-        return (void *) table->CreateDynamicStencilState;
-    if (!strcmp(name, "DestroyDynamicStencilState"))
-        return (void *) table->DestroyDynamicStencilState;
     if (!strcmp(name, "CreateFramebuffer"))
         return (void *) table->CreateFramebuffer;
     if (!strcmp(name, "DestroyFramebuffer"))
@@ -392,18 +358,22 @@ static inline void *loader_lookup_device_dispatch_table(
         return (void *) table->ResetCommandBuffer;
     if (!strcmp(name, "CmdBindPipeline"))
         return (void *) table->CmdBindPipeline;
-    if (!strcmp(name, "CmdBindDynamicViewportState"))
-        return (void *) table->CmdBindDynamicViewportState;
-    if (!strcmp(name, "CmdBindDynamicLineWidthState"))
-        return (void *) table->CmdBindDynamicLineWidthState;
-    if (!strcmp(name, "CmdBindDynamicDepthBiasState"))
-        return (void *) table->CmdBindDynamicDepthBiasState;
-    if (!strcmp(name, "CmdBindDynamicBlendState"))
-        return (void *) table->CmdBindDynamicBlendState;
-    if (!strcmp(name, "CmdBindDynamicDepthBoundsState"))
-        return (void *) table->CmdBindDynamicDepthBoundsState;
-    if (!strcmp(name, "CmdBindDynamicStencilState"))
-        return (void *) table->CmdBindDynamicStencilState;
+    if (!strcmp(name, "CmdSetViewport"))
+        return (void *) table->CmdSetViewport;
+    if (!strcmp(name, "CmdSetLineWidth"))
+        return (void *) table->CmdSetLineWidth;
+    if (!strcmp(name, "CmdSetDepthBias"))
+        return (void *) table->CmdSetDepthBias;
+    if (!strcmp(name, "CmdSetBlendConstants"))
+        return (void *) table->CmdSetBlendConstants;
+    if (!strcmp(name, "CmdSetDepthBounds"))
+        return (void *) table->CmdSetDepthBounds;
+    if (!strcmp(name, "CmdSetStencilCompareMask"))
+        return (void *) table->CmdSetStencilCompareMask;
+    if (!strcmp(name, "CmdSetStencilwriteMask"))
+        return (void *) table->CmdSetStencilWriteMask;
+    if (!strcmp(name, "CmdSetStencilReference"))
+        return (void *) table->CmdSetStencilReference;
     if (!strcmp(name, "CmdBindDescriptorSets"))
         return (void *) table->CmdBindDescriptorSets;
     if (!strcmp(name, "CmdBindVertexBuffers"))
index ee0a46951b0240d73c585fa0a19c549c1b29e73d..bd6f43b8d203ed921591b2b68c731a6470f14b17 100644 (file)
@@ -980,114 +980,6 @@ LOADER_EXPORT void VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeC
     disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
 }
 
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicViewportState(device, dynamicViewportState);
-}
-
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(VkDevice device, const VkDynamicLineWidthStateCreateInfo* pCreateInfo, VkDynamicLineWidthState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicLineWidthState(device, pCreateInfo, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicLineWidthState(VkDevice device, VkDynamicLineWidthState dynamicLineWidthState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
-}
-
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(VkDevice device, const VkDynamicDepthBiasStateCreateInfo* pCreateInfo, VkDynamicDepthBiasState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicDepthBiasState(VkDevice device, VkDynamicDepthBiasState dynamicDepthBiasState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
-}
-
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(VkDevice device, const VkDynamicBlendStateCreateInfo* pCreateInfo, VkDynamicBlendState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicBlendState(device, pCreateInfo, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicBlendState(VkDevice device, VkDynamicBlendState dynamicBlendState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicBlendState(device, dynamicBlendState);
-}
-
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(VkDevice device, const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo, VkDynamicDepthBoundsState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicDepthBoundsState(VkDevice device, VkDynamicDepthBoundsState dynamicDepthBoundsState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
-}
-
-LOADER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(VkDevice device, const VkDynamicStencilStateCreateInfo* pCreateInfoFront, const VkDynamicStencilStateCreateInfo* pCreateInfoBack, VkDynamicStencilState* pState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    return disp->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
-}
-
-LOADER_EXPORT void VKAPI vkDestroyDynamicStencilState(VkDevice device, VkDynamicStencilState dynamicStencilState)
-{
-    const VkLayerDispatchTable *disp;
-
-    disp = loader_get_dispatch(device);
-
-    disp->DestroyDynamicStencilState(device, dynamicStencilState);
-}
-
 LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
 {
     const VkLayerDispatchTable *disp;
@@ -1220,58 +1112,76 @@ LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBind
     disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState state)
+LOADER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportAndScissorCount, const VkViewport* pViewports, const VkRect2D* pScissors)
+{
+    const VkLayerDispatchTable *disp;
+
+    disp = loader_get_dispatch(cmdBuffer);
+
+    disp->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
+}
+
+LOADER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
+{
+    const VkLayerDispatchTable *disp;
+
+    disp = loader_get_dispatch(cmdBuffer);
+
+    disp->CmdSetLineWidth(cmdBuffer, lineWidth);
+}
+
+LOADER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicViewportState(cmdBuffer, state);
+    disp->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(VkCmdBuffer cmdBuffer, VkDynamicLineWidthState state)
+LOADER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicLineWidthState(cmdBuffer, state);
+    disp->CmdSetBlendConstants(cmdBuffer, blendConst);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(VkCmdBuffer cmdBuffer, VkDynamicDepthBiasState state)
+LOADER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicDepthBiasState(cmdBuffer, state);
+    disp->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicBlendState(VkCmdBuffer cmdBuffer, VkDynamicBlendState state)
+LOADER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicBlendState(cmdBuffer, state);
+    disp->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(VkCmdBuffer cmdBuffer, VkDynamicDepthBoundsState state)
+LOADER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicDepthBoundsState(cmdBuffer, state);
+    disp->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
 }
 
-LOADER_EXPORT void VKAPI vkCmdBindDynamicStencilState(VkCmdBuffer cmdBuffer, VkDynamicStencilState state)
+LOADER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdBindDynamicStencilState(cmdBuffer, state);
+    disp->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
 }
 
 LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
index 0d020b92251fca45e7a6e36327e8687f438cfc8c..a4409bbd66d19604198afecdaa7b8fc36a372e3c 100755 (executable)
@@ -1443,7 +1443,7 @@ class ObjectTrackerSubcommand(Subcommand):
     def generate_command_buffer_validates(self):
         cbv_txt = []
         cbv_txt.append('%s' % self.lineinfo.get())
-        for o in ['VkPipeline', 'VkDynamicViewportState', 'VkDynamicLineWidthState', 'VkDynamicDepthBiasState', 'VkDynamicBlendState', 'VkDynamicDepthBoundsState', 'VkDynamicStencilState',
+        for o in ['VkPipeline',
                   'VkPipelineLayout', 'VkBuffer', 'VkEvent', 'VkQueryPool', 'VkRenderPass', 'VkFramebuffer']:
             cbv_txt.append('static VkBool32 validate_object(VkCmdBuffer dispatchable_object, %s object)' % (o))
             cbv_txt.append('{')
@@ -1682,12 +1682,6 @@ class ThreadingSubcommand(Subcommand):
         'VkSampler' : 'VK_OBJECT_TYPE_SAMPLER',
         'VkDescriptorPool' : 'VK_OBJECT_TYPE_DESCRIPTOR_POOL',
         'VkDescriptorSet' : 'VK_OBJECT_TYPE_DESCRIPTOR_SET',
-        'VkDynamicViewportState' : 'VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE',
-        'VkDynamicLineWidthState' : 'VK_OBJECT_TYPE_DYNAMIC_LINE_WIDTH_STATE',
-        'VkDynamicDepthBiasState' : 'VK_OBJECT_TYPE_DYNAMIC_DEPTH_BIAS_STATE',
-        'VkDynamicBlendState' : 'VK_OBJECT_TYPE_DYNAMIC_BLEND_STATE',
-        'VkDynamicDepthBoundsState' : 'VK_OBJECT_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE',
-        'VkDynamicStencilState' : 'VK_OBJECT_TYPE_DYNAMIC_STENCIL_STATE',
         'VkFramebuffer' : 'VK_OBJECT_TYPE_FRAMEBUFFER',
         'VkCmdPool' : 'VK_OBJECT_TYPE_CMD_POOL',
     }
index 0e5292e2097df72b7ffaa167bccc2db199130dfe..e508d01afbb4da25260ad35ede225cefaaa749c7 100755 (executable)
--- a/vulkan.py
+++ b/vulkan.py
@@ -207,12 +207,6 @@ core = Extension(
         "VkSampler",
         "VkDescriptorPool",
         "VkDescriptorSet",
-        "VkDynamicViewportState",
-        "VkDynamicLineWidthState",
-        "VkDynamicDepthBiasState",
-        "VkDynamicBlendState",
-        "VkDynamicDepthBoundsState",
-        "VkDynamicStencilState",
         "VkRenderPass",
         "VkFramebuffer",
     ],
@@ -650,61 +644,6 @@ core = Extension(
              Param("uint32_t", "copyCount"),
              Param("const VkCopyDescriptorSet*", "pDescriptorCopies")]),
 
-        Proto("VkResult", "CreateDynamicViewportState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicViewportStateCreateInfo*", "pCreateInfo"),
-             Param("VkDynamicViewportState*", "pState")]),
-
-        Proto("void", "DestroyDynamicViewportState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicViewportState", "dynamicViewportState")]),
-
-        Proto("VkResult", "CreateDynamicLineWidthState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicLineWidthStateCreateInfo*", "pCreateInfo"),
-             Param("VkDynamicLineWidthState*", "pState")]),
-
-        Proto("void", "DestroyDynamicLineWidthState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicLineWidthState", "dynamicLineWidthState")]),
-
-        Proto("VkResult", "CreateDynamicDepthBiasState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicDepthBiasStateCreateInfo*", "pCreateInfo"),
-             Param("VkDynamicDepthBiasState*", "pState")]),
-
-        Proto("void", "DestroyDynamicDepthBiasState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicDepthBiasState", "dynamicDepthBiasState")]),
-
-        Proto("VkResult", "CreateDynamicBlendState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicBlendStateCreateInfo*", "pCreateInfo"),
-             Param("VkDynamicBlendState*", "pState")]),
-
-        Proto("void", "DestroyDynamicBlendState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicBlendState", "DynamicBlendState")]),
-
-        Proto("VkResult", "CreateDynamicDepthBoundsState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicDepthBoundsStateCreateInfo*", "pCreateInfo"),
-             Param("VkDynamicDepthBoundsState*", "pState")]),
-
-        Proto("void", "DestroyDynamicDepthBoundsState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicDepthBoundsState", "dynamicDepthBoundsState")]),
-
-        Proto("VkResult", "CreateDynamicStencilState",
-            [Param("VkDevice", "device"),
-             Param("const VkDynamicStencilStateCreateInfo*", "pCreateInfoFront"),
-             Param("const VkDynamicStencilStateCreateInfo*", "pCreateInfoBack"),
-             Param("VkDynamicStencilState*", "pState")]),
-
-        Proto("void", "DestroyDynamicStencilState",
-            [Param("VkDevice", "device"),
-             Param("VkDynamicStencilState", "dynamicStencilState")]),
-
         Proto("VkResult", "CreateCommandPool",
             [Param("VkDevice", "device"),
              Param("const VkCmdPoolCreateInfo*", "pCreateInfo"),
@@ -744,30 +683,6 @@ core = Extension(
              Param("VkPipelineBindPoint", "pipelineBindPoint"),
              Param("VkPipeline", "pipeline")]),
 
-        Proto("void", "CmdBindDynamicViewportState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicViewportState", "dynamicViewportState")]),
-
-        Proto("void", "CmdBindDynamicLineWidthState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicLineWidthState", "dynamicLineWidthState")]),
-
-        Proto("void", "CmdBindDynamicDepthBiasState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicDepthBiasState", "dynamicDepthBiasState")]),
-
-        Proto("void", "CmdBindDynamicBlendState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicBlendState", "DynamicBlendState")]),
-
-        Proto("void", "CmdBindDynamicDepthBoundsState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicDepthBoundsState", "dynamicDepthBoundsState")]),
-
-        Proto("void", "CmdBindDynamicStencilState",
-            [Param("VkCmdBuffer", "cmdBuffer"),
-             Param("VkDynamicStencilState", "dynamicStencilState")]),
-
         Proto("void", "CmdBindDescriptorSets",
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkPipelineBindPoint", "pipelineBindPoint"),
@@ -1035,6 +950,46 @@ core = Extension(
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("uint32_t", "cmdBuffersCount"),
              Param("const VkCmdBuffer*", "pCmdBuffers")]),
+
+        Proto("void", "CmdSetViewport",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("uint32_t", "viewportAndScissorCount"),
+             Param("const VkViewport*", "pViewports"),
+             Param("const VkRect2D*", "pScissors")]),
+
+        Proto("void", "CmdSetLineWidth",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("float", "lineWidth")]),
+
+        Proto("void", "CmdSetDepthBias",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("float", "depthBias"),
+             Param("float", "depthBiasClamp"),
+             Param("float", "slopeScaledDepthBias")]),
+
+        Proto("void", "CmdSetBlendConstants",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("const float*", "blendConst")]),
+
+        Proto("void", "CmdSetDepthBounds",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("float", "minDepthBounds"),
+             Param("float", "maxDepthBounds")]),
+
+        Proto("void", "CmdSetStencilCompareMask",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("VkStencilFaceFlags", "faceMask"),
+             Param("uint32_t", "stencilCompareMask")]),
+
+        Proto("void", "CmdSetStencilWriteMask",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("VkStencilFaceFlags", "faceMask"),
+             Param("uint32_t", "stencilWriteMask")]),
+
+        Proto("void", "CmdSetStencilReference",
+            [Param("VkCmdBuffer", "cmdBuffer"),
+             Param("VkStencilFaceFlags", "faceMask"),
+             Param("uint32_t", "stencilReference")]),
     ],
 )
 
@@ -1176,12 +1131,6 @@ object_non_dispatch_list = [
     "VkSampler",
     "VkDescriptorPool",
     "VkDescriptorSet",
-    "VkDynamicViewportState",
-    "VkDynamicLineWidthState",
-    "VkDynamicDepthBiasState",
-    "VkDynamicBlendState",
-    "VkDynamicDepthBoundsState",
-    "VkDynamicStencilState",
     "VkRenderPass",
     "VkFramebuffer",
     "VkSwapchainKHR",