diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 149e8cc548691e4ae6b6c4d7acbc314b7fe27e62..7cbf39096ec8fbbf9993e4fcd99e556037ee74ca 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -174,10 +174,12 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
 		mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
 	}
 
+#ifdef GL_INTERLEAVED_ATTRIBS
 	if (varying_count > 0 && varyings)
 	{
 		glTransformFeedbackVaryings(mProgramObject, varying_count, varyings, GL_INTERLEAVED_ATTRIBS);
 	}
+#endif
 
 	// Map attributes and uniforms
 	if (success)
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 2e7c8a0e8fc3c0504223ff20181a9f1877a19787..0092df6587d0dab275271570aa1bcf37f8f76b03 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -373,7 +373,9 @@ U32 LLVertexBuffer::getVAOName()
 	}
 	else
 	{
+#ifdef GL_ARB_vertex_array_object
 		glGenVertexArrays(1, &ret);
+#endif
 	}
 
 	return ret;		
@@ -2161,9 +2163,11 @@ void LLVertexBuffer::flush()
 // bind for transform feedback (quick 'n dirty)
 void LLVertexBuffer::bindForFeedback(U32 channel, U32 type, U32 index, U32 count)
 {
+#ifdef GL_TRANSFORM_FEEDBACK_BUFFER
 	U32 offset = mOffsets[type] + sTypeSize[type]*index;
 	U32 size= (sTypeSize[type]*count);
 	glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, channel, mGLBuffer, offset, size);
+#endif
 }
 
 // Set for rendering