diff options
| author | Chris Forbes <chrisf@ijw.co.nz> | 2015-04-08 10:11:59 +1200 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2015-04-17 10:13:58 +1200 |
| commit | 68edf5edbafeb681cf68ab12f143b2f7fd6ac8f5 (patch) | |
| tree | 35dcdcdc4d0333bdce5bb6b8a7836ee4868368bf | |
| parent | d99a488c508460f934c2fb7fe264fd11f32b2a67 (diff) | |
| download | usermoji-68edf5edbafeb681cf68ab12f143b2f7fd6ac8f5.tar.xz | |
shader_checker: capture spir-v for every shader at vkCreateShader time
| -rw-r--r-- | layers/shader_checker.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp index 8affef19..7eeb82cb 100644 --- a/layers/shader_checker.cpp +++ b/layers/shader_checker.cpp @@ -25,6 +25,7 @@ #include <stdlib.h> #include <assert.h> #include <unordered_map> +#include <vector> #include "loader_platform.h" #include "vk_dispatch_table_helper.h" #include "vkLayer.h" @@ -36,6 +37,19 @@ static std::unordered_map<void *, VkLayerDispatchTable *> tableMap; + +struct shader_source { + std::vector<uint32_t> words; + + shader_source(VkShaderCreateInfo const *pCreateInfo) : + words((uint32_t *)pCreateInfo->pCode, (uint32_t *)pCreateInfo->pCode + pCreateInfo->codeSize / sizeof(uint32_t)) { + } +}; + + +static std::unordered_map<void *, shader_source *> shader_map; + + static VkLayerDispatchTable * initLayerTable(const VkBaseLayerObject *gpuw) { VkLayerDispatchTable *pTable; @@ -139,6 +153,8 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCre { VkLayerDispatchTable* pTable = tableMap[(VkBaseLayerObject *)device]; VkResult res = pTable->CreateShader(device, pCreateInfo, pShader); + + shader_map[(VkBaseLayerObject *) *pShader] = new shader_source(pCreateInfo); return res; } |
