aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Forbes <chrisf@ijw.co.nz>2015-04-08 10:11:59 +1200
committerChris Forbes <chrisf@ijw.co.nz>2015-04-17 10:13:58 +1200
commit68edf5edbafeb681cf68ab12f143b2f7fd6ac8f5 (patch)
tree35dcdcdc4d0333bdce5bb6b8a7836ee4868368bf
parentd99a488c508460f934c2fb7fe264fd11f32b2a67 (diff)
downloadusermoji-68edf5edbafeb681cf68ab12f143b2f7fd6ac8f5.tar.xz
shader_checker: capture spir-v for every shader at vkCreateShader time
-rw-r--r--layers/shader_checker.cpp16
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;
}