diff options
Diffstat (limited to 'layers/shader_checker.cpp')
| -rw-r--r-- | layers/shader_checker.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp index fcad389a..defd9d5a 100644 --- a/layers/shader_checker.cpp +++ b/layers/shader_checker.cpp @@ -826,9 +826,10 @@ validate_graphics_pipeline(VkGraphicsPipelineCreateInfo const *pCreateInfo) } -VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, - const VkGraphicsPipelineCreateInfo *pCreateInfo, - VkPipeline *pPipeline) +VK_LAYER_EXPORT VkResult VKAPI +vkCreateGraphicsPipeline(VkDevice device, + const VkGraphicsPipelineCreateInfo *pCreateInfo, + VkPipeline *pPipeline) { bool pass = validate_graphics_pipeline(pCreateInfo); @@ -845,6 +846,27 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, } +VK_LAYER_EXPORT VkResult VKAPI +vkCreateGraphicsPipelineDerivative(VkDevice device, + const VkGraphicsPipelineCreateInfo *pCreateInfo, + VkPipeline basePipeline, + VkPipeline *pPipeline) +{ + bool pass = validate_graphics_pipeline(pCreateInfo); + + if (pass) { + /* The driver is allowed to crash if passed junk. Only actually create the + * pipeline if we didn't run into any showstoppers above. + */ + VkLayerDispatchTable *pTable = tableMap[(VkBaseLayerObject *)device]; + return pTable->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline); + } + else { + return VK_ERROR_UNKNOWN; + } +} + + VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback( VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, @@ -918,6 +940,7 @@ VK_LAYER_EXPORT void * VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* pNa ADD_HOOK(vkCreateDevice); ADD_HOOK(vkCreateShader); ADD_HOOK(vkCreateGraphicsPipeline); + ADD_HOOK(vkCreateGraphicsPipelineDerivative); ADD_HOOK(vkDbgRegisterMsgCallback); ADD_HOOK(vkDbgUnregisterMsgCallback); |
