diff --git a/base/vulkantools.cpp b/base/vulkantools.cpp index 1876230f..5d51013a 100644 --- a/base/vulkantools.cpp +++ b/base/vulkantools.cpp @@ -273,30 +273,6 @@ namespace vkTools return fileContent; } - // Load a binary file into a buffer (e.g. SPIR-V) - char *readBinaryFile(const char *filename, size_t *psize) - { - long int size; - size_t retval; - void *shader_code; - - FILE *fp = fopen(filename, "rb"); - if (!fp) return NULL; - - fseek(fp, 0L, SEEK_END); - size = ftell(fp); - - fseek(fp, 0L, SEEK_SET); - - shader_code = malloc(size); - retval = fread(shader_code, size, 1, fp); - assert(retval == 1); - - *psize = size; - - return (char*)shader_code; - } - #if defined(__ANDROID__) // Android shaders are stored as assets in the apk // So they need to be loaded via the asset manager @@ -314,38 +290,50 @@ namespace vkTools VkShaderModule shaderModule; VkShaderModuleCreateInfo moduleCreateInfo; - VkResult err; - moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; moduleCreateInfo.pNext = NULL; - moduleCreateInfo.codeSize = size; moduleCreateInfo.pCode = (uint32_t*)shaderCode; moduleCreateInfo.flags = 0; - err = vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule); - assert(!err); + + VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule)); + + delete[] shaderCode; return shaderModule; } #else VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage) { - size_t size = 0; - const char *shaderCode = readBinaryFile(fileName, &size); + size_t size; + + FILE *fp = fopen(fileName, "rb"); + assert(fp); + + fseek(fp, 0L, SEEK_END); + size = ftell(fp); + + fseek(fp, 0L, SEEK_SET); + + //shaderCode = malloc(size); + char *shaderCode = new char[size]; + size_t retval = fread(shaderCode, size, 1, fp); + assert(retval == 1); assert(size > 0); + fclose(fp); + VkShaderModule shaderModule; VkShaderModuleCreateInfo moduleCreateInfo; - VkResult err; - moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; moduleCreateInfo.pNext = NULL; - moduleCreateInfo.codeSize = size; moduleCreateInfo.pCode = (uint32_t*)shaderCode; moduleCreateInfo.flags = 0; - err = vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule); - assert(!err); + + VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule)); + + delete[] shaderCode; return shaderModule; } @@ -360,11 +348,8 @@ namespace vkTools VkShaderModule shaderModule; VkShaderModuleCreateInfo moduleCreateInfo; - VkResult err; - moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; moduleCreateInfo.pNext = NULL; - moduleCreateInfo.codeSize = 3 * sizeof(uint32_t) + size + 1; moduleCreateInfo.pCode = (uint32_t*)malloc(moduleCreateInfo.codeSize); moduleCreateInfo.flags = 0; @@ -375,8 +360,7 @@ namespace vkTools ((uint32_t *)moduleCreateInfo.pCode)[2] = stage; memcpy(((uint32_t *)moduleCreateInfo.pCode + 3), shaderCode, size + 1); - err = vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule); - assert(!err); + VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule)); return shaderModule; }