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...
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;
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);
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] = {
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);
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);
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;
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);
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 = {
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);
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);
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] );
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)
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;
}
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,
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),
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;
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;
((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)
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)
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),
} 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;
float maxSamplerLodBias;
float maxSamplerAnisotropy;
uint32_t maxViewports;
- uint32_t maxDynamicViewportStates;
uint32_t maxViewportDimensions[2];
float viewportBoundsRange[2];
uint32_t viewportSubPixelBits;
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;
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;
uint32_t stencil;
} VkClearDepthStencilValue;
+typedef union {
+ VkClearColorValue color;
+ VkClearDepthStencilValue depthStencil;
+} VkClearValue;
+
typedef struct {
VkOffset3D offset;
VkExtent3D extent;
VkExtent3D extent;
} VkImageResolve;
-typedef union {
- VkClearColorValue color;
- VkClearDepthStencilValue depthStencil;
-} VkClearValue;
-
typedef struct {
VkStructureType sType;
const void* pNext;
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);
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);
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,
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,
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;
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"))
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"))
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"))
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;
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:
// 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()
{
}
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)
{
// 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;
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)
{
}
skipCall |= printDSConfig(cb);
skipCall |= printPipeline(cb);
- skipCall |= printDynamicState(cb);
return skipCall;
}
deleteImages();
deleteBuffers();
deleteCmdBuffers();
- deleteDynamicState();
deletePools();
deleteLayouts();
loader_platform_thread_unlock_mutex(&globalLock);
// 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);
}
}
-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);
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;
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"))
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"))
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"))
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
{
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,
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;
// 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;
*/
#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;
- }
-}
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)
// 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);
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
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 ***");
}
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,
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,
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);
}
}
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"))
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"))
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"))
// 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;
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:
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)
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(
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"))
| 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 |
| 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 |
| 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
| 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 |
| 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 |
| 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
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"))
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"))
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");
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");
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"))
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"))
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;
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)
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('{')
'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',
}
"VkSampler",
"VkDescriptorPool",
"VkDescriptorSet",
- "VkDynamicViewportState",
- "VkDynamicLineWidthState",
- "VkDynamicDepthBiasState",
- "VkDynamicBlendState",
- "VkDynamicDepthBoundsState",
- "VkDynamicStencilState",
"VkRenderPass",
"VkFramebuffer",
],
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"),
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"),
[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")]),
],
)
"VkSampler",
"VkDescriptorPool",
"VkDescriptorSet",
- "VkDynamicViewportState",
- "VkDynamicLineWidthState",
- "VkDynamicDepthBiasState",
- "VkDynamicBlendState",
- "VkDynamicDepthBoundsState",
- "VkDynamicStencilState",
"VkRenderPass",
"VkFramebuffer",
"VkSwapchainKHR",