Improve shader caching; cache result of preprocess if cache-generated-shaders is set
This commit is contained in:
parent
36f2eda9ec
commit
4b5c317160
|
|
@ -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)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue