# HG changeset patch # User John Tsiombikas # Date 1529622486 -10800 # Node ID 633b522539a125a1163d18db00fa53454150495c # Parent 20eb42197ab85d7c45804659b5d00c20e0967d4b shaders diff -r 20eb42197ab8 -r 633b522539a1 src/vksdr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vksdr.c Fri Jun 22 02:08:06 2018 +0300 @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include "vksdr.h" +#include "vku.h" + +VkShaderModule vku_load_shader(const char *fname) +{ + int size; + VkShaderModuleCreateInfo inf; + VkShaderModule sdr; + FILE *fp; + char *buf = 0; + + if(!(fp = fopen(fname, "rb"))) { + fprintf(stderr, "vku_load_shader: failed to load %s: %s\n", fname, strerror(errno)); + return 0; + } + fseek(fp, 0, SEEK_END); + size = ftell(fp); + rewind(fp); + + if(!(buf = malloc(size + 1))) { + fprintf(stderr, "vku_load_shader: failed to allocate buffer\n"); + goto err; + } + if(fread(buf, 1, size, fp) < size) { + fprintf(stderr, "vku_load_shader: unexpected end of file while reading: %s\n", fname); + goto err; + } + + memset(&inf, 0, sizeof inf); + inf.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + inf.codeSize = size; + inf.pCode = (const uint32_t*)buf; + + if(vkCreateShaderModule(vkdev, &inf, 0, &sdr) != 0) { + fprintf(stderr, "vku_load_shader: failed to create shader: %s\n", fname); + goto err; + } + return sdr; + +err: + fclose(fp); + free(buf); + return 0; +} + +void vku_destroy_shader(VkShaderModule sdr) +{ + vkDestroyShaderModule(vkdev, sdr, 0); +} diff -r 20eb42197ab8 -r 633b522539a1 src/vksdr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vksdr.h Fri Jun 22 02:08:06 2018 +0300 @@ -0,0 +1,9 @@ +#ifndef VKSDR_H_ +#define VKSDR_H_ + +#include + +VkShaderModule vku_load_shader(const char *fname); +void vku_destroy_shader(VkShaderModule sdr); + +#endif /* VKSDR_H_ */