|
|
@@ -2380,6 +2380,12 @@ do_read_source(string &into, const Filename &fn, BamCacheRecord *record) {
|
|
|
_last_modified = max(_last_modified, vf->get_timestamp());
|
|
|
_source_files.push_back(vf->get_filename());
|
|
|
}
|
|
|
+
|
|
|
+ // Strip trailing whitespace.
|
|
|
+ while (isspace(into[into.size() - 1])) {
|
|
|
+ into.resize(into.size() - 1);
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -2521,6 +2527,11 @@ r_preprocess_source(ostream &out, const Filename &fn,
|
|
|
line += line2.substr(block_end + 2);
|
|
|
}
|
|
|
|
|
|
+ // Strip trailing whitespace.
|
|
|
+ while (isspace(line[line.size() - 1])) {
|
|
|
+ line.resize(line.size() - 1);
|
|
|
+ }
|
|
|
+
|
|
|
// Check if this line contains a #directive.
|
|
|
char directive[64];
|
|
|
if (line.size() < 8 || sscanf(line.c_str(), " # %63s", directive) != 1) {
|
|
|
@@ -2940,6 +2951,14 @@ load(const Filename &file, ShaderLanguage lang) {
|
|
|
}
|
|
|
|
|
|
_load_table[sfile] = shader;
|
|
|
+
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(shader->_text);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
+ _make_table[shader->_text] = shader;
|
|
|
+ }
|
|
|
return shader;
|
|
|
}
|
|
|
|
|
|
@@ -2970,6 +2989,14 @@ load(ShaderLanguage lang, const Filename &vertex,
|
|
|
}
|
|
|
|
|
|
_load_table[sfile] = shader;
|
|
|
+
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(shader->_text);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
+ _make_table[shader->_text] = shader;
|
|
|
+ }
|
|
|
return shader;
|
|
|
}
|
|
|
|
|
|
@@ -3025,14 +3052,21 @@ load_compute(ShaderLanguage lang, const Filename &fn) {
|
|
|
if (!shader->read(sfile, record)) {
|
|
|
return NULL;
|
|
|
}
|
|
|
+ _load_table[sfile] = shader;
|
|
|
+
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(shader->_text);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
+ _make_table[shader->_text] = shader;
|
|
|
+ }
|
|
|
|
|
|
// It makes little sense to cache the shader before compilation, so we keep
|
|
|
// the record for when we have the compiled the shader.
|
|
|
swap(shader->_record, record);
|
|
|
shader->_cache_compiled_shader = BamCache::get_global_ptr()->get_cache_compiled_shaders();
|
|
|
shader->_fullpath = shader->_source_files[0];
|
|
|
-
|
|
|
- _load_table[sfile] = shader;
|
|
|
return shader;
|
|
|
}
|
|
|
|
|
|
@@ -3166,7 +3200,6 @@ make_compute(ShaderLanguage lang, const string &body) {
|
|
|
sbody._separate = true;
|
|
|
sbody._compute = body;
|
|
|
|
|
|
-
|
|
|
if (cache_generated_shaders) {
|
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|