@@ -239,7 +239,7 @@ std::stringstream make_generic_stringstream() {
239239 return ss;
240240}
241241
242- std::vector< unsigned char > read_binary_file (const std::string& path, bool may_not_exist = false ) {
242+ std::string read_binary_file (const std::string& path, bool may_not_exist = false ) {
243243 FILE* f = fopen (path.c_str (), " rb" );
244244 if (!f) {
245245 if (!may_not_exist) {
@@ -252,7 +252,7 @@ std::vector<unsigned char> read_binary_file(const std::string& path, bool may_no
252252 size_t size = ftell (f);
253253 fseek (f, 0 , SEEK_SET);
254254
255- std::vector< unsigned char > data (size);
255+ std::string data (size, ' \0 ' );
256256 size_t read_size = fread (data.data (), 1 , size, f);
257257 fclose (f);
258258 if (read_size != size) {
@@ -279,8 +279,8 @@ void write_binary_file(const std::string& path, const std::string& content) {
279279}
280280
281281void write_file_if_changed (const std::string& path, const std::string& content) {
282- std::vector< unsigned char > existing = read_binary_file (path, true );
283- if (existing. size () != content. size () || memcmp (existing. data (), content. data (), content. size ()) != 0 ) {
282+ std::string existing = read_binary_file (path, true );
283+ if (existing != content) {
284284 write_binary_file (path, content);
285285 }
286286}
@@ -359,6 +359,18 @@ void string_to_spv_func(std::string name, std::string in_path, std::string out_p
359359 return ;
360360 }
361361
362+ if (dep_file) {
363+ // replace .spv output path with the embed .cpp path which is used as output in CMakeLists.txt
364+ std::string dep = read_binary_file (target_cpp + " .d" , true );
365+ if (!dep.empty ()) {
366+ size_t pos = dep.find (out_path);
367+ if (pos != std::string::npos) {
368+ dep.replace (pos, out_path.length (), target_cpp);
369+ }
370+ write_binary_file (target_cpp + " .d" , dep);
371+ }
372+ }
373+
362374 std::lock_guard<std::mutex> guard (lock);
363375 shader_fnames.push_back (std::make_pair (name, out_path));
364376 } catch (const std::exception& e) {
@@ -934,15 +946,16 @@ void write_output_files() {
934946 hdr << " extern const unsigned char " << name << " _data[];\n\n " ;
935947
936948 if (input_filepath != " " ) {
937- std::vector< unsigned char > data = read_binary_file (path);
949+ std::string data = read_binary_file (path);
938950 if (data.empty ()) {
939951 continue ;
940952 }
941953
942954 src << " const uint64_t " << name << " _len = " << data.size () << " ;\n " ;
943955 src << " const unsigned char " << name << " _data[" << data.size () << " ] = {\n " << std::hex;
956+ auto bytes = reinterpret_cast <const uint8_t *>(data.data ());
944957 for (size_t i = 0 ; i < data.size (); ++i) {
945- src << " 0x" << static_cast <int >(data [i]) << " ," ;
958+ src << " 0x" << static_cast <int >(bytes [i]) << " ," ;
946959 if ((i + 1 ) % 12 == 0 ) src << " \n " ;
947960 }
948961 src << std::dec << " \n };\n\n " ;
0 commit comments