# HG changeset patch # User John Tsiombikas # Date 1529670570 -10800 # Node ID dc85ded6ceee598dbe0a52114ef56fa2bb13e138 # Parent 8eb3126cc2f1a9f65745aae6a1c121b2157c1adb# Parent 5fbfd7f8fc24a63d0f128b8ab903d5972f5573ed merge sdr diff -r 8eb3126cc2f1 -r dc85ded6ceee src/vksdr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vksdr.c Fri Jun 22 15:29:30 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; + void *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 = 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 8eb3126cc2f1 -r dc85ded6ceee src/vksdr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vksdr.h Fri Jun 22 15:29:30 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_ */