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;
}
Example #2
0
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");
	}
}
Example #3
0
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");
		}
	}
}
Example #4
0
std::string ExtensionSetToString(const ExtensionSet& extensions) {
  std::stringstream ss;
  extensions.ForEach(
      [&ss](Extension ext) { ss << ExtensionToString(ext) << " "; });
  return ss.str();
}
Example #5
0
void swap (ExtensionSet& set1, ExtensionSet& set2)
{
  set1.Swap (set2);
}