tests: Add utility function to compile GLSL to BIL

This requires glslang + BIL to be in a peer folder (glslang) to XGL.
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 791b62e..fec406d 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -205,7 +205,7 @@
     void GenerateBindStateAndPipelineCmds(XGL_PIPELINE* pipeline);
 
     XGL_DEVICE device() {return m_device->device();}
-    void CreateShader(XGL_PIPELINE_SHADER_STAGE stage, XGL_SHADER *pshader);
+    void CreateShader(XGL_PIPELINE_SHADER_STAGE stage, const char *shader_code, XGL_SHADER *pshader);
     void InitPipeline();
     void InitMesh( XGL_UINT32 numVertices, XGL_GPU_SIZE vbStride, const void* vertices );
     void InitConstantBuffer( int constantCount, int constantSize, const void* data );
@@ -317,52 +317,26 @@
     ASSERT_XGL_SUCCESS(xglDestroyObject(pool));
 }
 
-void XglRenderTest::CreateShader(XGL_PIPELINE_SHADER_STAGE stage, XGL_SHADER *pshader)
+void XglRenderTest::CreateShader(XGL_PIPELINE_SHADER_STAGE stage,
+                                 const char *shader_code,
+                                 XGL_SHADER *pshader)
 {
     struct icd_bil_header *pBIL;
     char * memblock;
     const char *kernel;
     size_t kernel_size;
     XGL_RESULT err;
+    std::vector<unsigned int> bil;
 
-    const XGL_PHYSICAL_GPU_PROPERTIES *props = &m_device->props;
-    const int gen = (strstr((const char *) props->gpuName, "Sandybridge")) ? 6 : 7;
-
-    if (stage == XGL_SHADER_STAGE_VERTEX) {
-        if (gen == 6) {
-            kernel = (const char *) gen6_vs;
-            kernel_size = sizeof(gen6_vs);
-        } else {
-            kernel = (const char *) gen7_vs;
-            kernel_size = sizeof(gen7_vs);
-        }
-    } else {
-        if (gen == 6) {
-            kernel = (const char *) gen6_fs;
-            kernel_size = sizeof(gen6_fs);
-        } else {
-            kernel = (const char *) gen7_fs;
-            kernel_size = sizeof(gen7_fs);
-        }
-    }
-
-    memblock = new char [sizeof(*pBIL) + kernel_size];
-    ASSERT_TRUE(memblock != NULL) << "memory allocation failed";
-
-    pBIL = (struct icd_bil_header *) memblock;
-    pBIL->magic = ICD_BIL_MAGIC;
-    pBIL->version = ICD_BIL_VERSION;
-
-    pBIL->gen_magic = (stage == XGL_SHADER_STAGE_VERTEX) ? 'v' : 'w';
-    memcpy(pBIL + 1, kernel, kernel_size);
+    GLSLtoBIL(stage, shader_code, bil);
 
     XGL_SHADER_CREATE_INFO createInfo;
     XGL_SHADER shader;
 
     createInfo.sType = XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
     createInfo.pNext = NULL;
-    createInfo.pCode = memblock;
-    createInfo.codeSize = sizeof(*pBIL) + kernel_size;
+    createInfo.pCode = bil.data();
+    createInfo.codeSize = bil.size() * sizeof(unsigned int);
     createInfo.flags = 0;
     err = xglCreateShader(device(), &createInfo, &shader);
     ASSERT_XGL_SUCCESS(err);
@@ -592,7 +566,18 @@
     xglAttachMemoryViewDescriptors( m_rsrcDescSet, 0, 1, &m_constantBufferView );
     xglEndDescriptorSetUpdate( m_rsrcDescSet );
 
-    ASSERT_NO_FATAL_FAILURE(CreateShader(XGL_SHADER_STAGE_VERTEX, vs));
+    static const char *vertShaderText =
+            "#version 130\n"
+            "vec2 vertices[3];\n"
+            "void main() {\n"
+            "      vertices[0] = vec2(-1.0, -1.0);\n"
+            "      vertices[1] = vec2( 1.0, -1.0);\n"
+            "      vertices[2] = vec2( 0.0,  1.0);\n"
+            "   gl_Position = vec4(vertices[gl_VertexID % 3], 0.0, 1.0);\n"
+            "}\n";
+
+    ASSERT_NO_FATAL_FAILURE(CreateShader(XGL_SHADER_STAGE_VERTEX,
+                                         vertShaderText, vs));
 
     vs_stage.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
     vs_stage.pNext = XGL_NULL_HANDLE;
@@ -605,7 +590,15 @@
     vs_stage.shader.dynamicMemoryViewMapping.slotObjectType = XGL_SLOT_UNUSED;
     vs_stage.shader.dynamicMemoryViewMapping.shaderEntityIndex = 0;
 
-    ASSERT_NO_FATAL_FAILURE(CreateShader(XGL_SHADER_STAGE_FRAGMENT, ps));
+    static const char *fragShaderText =
+       "#version 130\n"
+       "uniform vec4 foo;\n"
+       "void main() {\n"
+       "   gl_FragColor = foo;\n"
+       "}\n";
+
+    ASSERT_NO_FATAL_FAILURE(CreateShader(XGL_SHADER_STAGE_FRAGMENT,
+                                         fragShaderText, ps));
 
     ps_stage.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
     ps_stage.pNext = &vs_stage;