std::string getHLSLSupportCode (TOperator op, ExtensionSet& extensions, bool vertexShader, bool gles) { assert (hlslSupportLibExtensions); assert (hlslSupportLibExtensionsESOverrides); // if we're using gles, attempt to find the ES version first bool found = false; if (gles) { CodeExtensionMap::iterator eit = hlslSupportLibExtensionsESOverrides->find(op); if (eit != hlslSupportLibExtensionsESOverrides->end()) { const std::string& ext = vertexShader ? eit->second.first : eit->second.second; if (!ext.empty()) extensions.insert(ext); found = true; } } if (!found) { CodeExtensionMap::iterator eit = hlslSupportLibExtensions->find(op); if (eit != hlslSupportLibExtensions->end()) { const std::string& ext = vertexShader ? eit->second.first : eit->second.second; if (!ext.empty()) extensions.insert(ext); } } assert (hlslSupportLib); assert (hlslSupportLibESOverrides); // same as above, search for a gles version first bool tex2DLodVSHack = false; if (vertexShader && op == EOpTex2DLod) tex2DLodVSHack = true; if (gles && !tex2DLodVSHack) { CodeMap::iterator it = hlslSupportLibESOverrides->find(op); if (it != hlslSupportLibESOverrides->end()) return it->second; } CodeMap::iterator it = hlslSupportLib->find(op); if (it == hlslSupportLib->end()) it = hlslSupportLib->find(EOpNull); // this always exists return it->second; }
static void add_extension_from_semantic(EAttribSemantic sem, ETargetVersion targetVersion, ExtensionSet& extensions) { if (targetVersion == ETargetGLSL_ES_300) { // \todo [2013-05-14 pyry] Not supported in any platform yet. if (sem == EAttrSemPrimitiveID) extensions.insert("GL_ARB_geometry_shader4"); } else { if (sem == EAttrSemPrimitiveID || sem == EAttrSemVertexID) extensions.insert("GL_EXT_gpu_shader4"); if (sem == EAttrSemInstanceID) extensions.insert("GL_ARB_draw_instanced"); } }
void GlslFunction::addNeededExtensions (ExtensionSet& extensions, ETargetVersion version) const { for (size_t i = 0; i < symbols.size(); ++i) { const GlslSymbol* s = symbols[i]; if (s->getType() == EgstSampler2DShadow && version == ETargetGLSL_ES_100) { extensions.insert("GL_EXT_shadow_samplers"); } if (s->getType() == EgstSampler2DArray) { if (version == ETargetGLSL_ES_100) extensions.insert("GL_NV_texture_array"); else if (version < ETargetGLSL_ES_300) extensions.insert("GL_EXT_texture_array"); } } }
std::string ExtensionSetToString(const ExtensionSet& extensions) { std::stringstream ss; extensions.ForEach( [&ss](Extension ext) { ss << ExtensionToString(ext) << " "; }); return ss.str(); }
void swap (ExtensionSet& set1, ExtensionSet& set2) { set1.Swap (set2); }