From: Mikko Rasa Date: Sat, 1 Oct 2022 20:05:45 +0000 (+0300) Subject: Hack to work around an issue with the flat interpolation qualifier X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=0fdc229b8b43f1897de4611672ac65b4db954be0;p=libs%2Fgl.git Hack to work around an issue with the flat interpolation qualifier It appears that at least on my current system (GeForce 980 Ti, driver 460.91.03) vertex attributes somehow block the flat qualifier from working on the same location. It feels like a driver bug but that remains to be confirmed. --- diff --git a/source/glsl/finalize.cpp b/source/glsl/finalize.cpp index d840648b..469cb92d 100644 --- a/source/glsl/finalize.cpp +++ b/source/glsl/finalize.cpp @@ -91,6 +91,8 @@ void LocationAllocator::apply(Stage &stage) stage.content.visit(*this); allocate_locations("in"); + if(stage.type==Stage::VERTEX) + swap(used_locations["in"], used_vertex_attribs); allocate_locations("out"); } @@ -121,6 +123,8 @@ void LocationAllocator::allocate_locations(const string &iface) if(!alloc_new) continue; + bool flat = ((*i)->interpolation=="flat" || ((*i)->linked_declaration && (*i)->linked_declaration->interpolation=="flat")); + set &used = used_locations[(*i)->interface]; unsigned size = LocationCounter().apply(**i); @@ -128,7 +132,7 @@ void LocationAllocator::allocate_locations(const string &iface) { int blocking = -1; for(unsigned j=0; j unbound_textures; std::vector unbound_blocks; + /* Dirty hack to work around an issue where vertex attributes prevent the + flat qualifier from working on the same location. */ + std::set used_vertex_attribs; + public: void apply(Module &, const Features &, bool = true); private: