diff --git a/include/xglIntelExt.h b/include/xglIntelExt.h
deleted file mode 100644
index 15c7f52..0000000
--- a/include/xglIntelExt.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* IN DEVELOPMENT.  DO NOT SHIP. */
-
-#ifndef __XGLINTELEXT_H__
-#define __XGLINTELEXT_H__
-
-#include <xcb/xcb.h>
-#include <xcb/randr.h>
-#include "xgl.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif // __cplusplus
-
-typedef enum _XGL_INTEL_STRUCTURE_TYPE
-{
-    XGL_INTEL_STRUCTURE_TYPE_SHADER_CREATE_INFO             = 1000,
-} XGL_INTEL_STRUCTURE_TYPE;
-
-typedef struct _XGL_INTEL_COMPILE_GLSL
-{
-    XGL_PIPELINE_SHADER_STAGE       stage;
-    const char                     *pCode;
-} XGL_INTEL_COMPILE_GLSL;
-
-#ifdef __cplusplus
-} // extern "C"
-#endif // __cplusplus
-
-#endif // __XGLINTELEXT_H__
diff --git a/tests/base_render_test.cpp b/tests/base_render_test.cpp
index 7bf9055..c40c38b 100644
--- a/tests/base_render_test.cpp
+++ b/tests/base_render_test.cpp
@@ -64,7 +64,6 @@
 using namespace std;
 
 #include <xgl.h>
-#include <xglIntelExt.h>
 #include "gtest-1.7.0/include/gtest/gtest.h"
 
 #include "xgldevice.h"
@@ -440,6 +439,7 @@
     std::vector<unsigned int> bil;
     XGL_SHADER_CREATE_INFO createInfo;
     XGL_SHADER shader;
+    size_t shader_len;
     XGL_IMAGE                    m_image;
     XGL_COLOR_ATTACHMENT_VIEW    m_targetView;
     XGL_IMAGE_VIEW_ATTACH_INFO   m_imageInfo;
@@ -563,46 +563,32 @@
             "      vertices[2] = vec2( 0.0,  1.0);\n"
             "   gl_Position = vec4(vertices[gl_VertexID % 3], 0.0, 1.0);\n"
             "}\n";
-    static const char *vertShader2 =
-            "#version 330\n"
-            "out vec4 color;\n"
-            "out vec4 scale;\n"
-            "void main() {\n"
-            "   vec2 vertices[3];"
-            "      vertices[0] = vec2(-0.5, -0.5);\n"
-            "      vertices[1] = vec2( 0.5, -0.5);\n"
-            "      vertices[2] = vec2( 0.5,  0.5);\n"
-            "   vec4 colors[3];\n"
-            "      colors[0] = vec4(1.0, 0.0, 0.0, 1.0);\n"
-            "      colors[1] = vec4(0.0, 1.0, 0.0, 1.0);\n"
-            "      colors[2] = vec4(0.0, 0.0, 1.0, 1.0);\n"
-            "   color = colors[int(mod(gl_VertexID, 3))];\n"
-            "   scale = vec4(1.0, 1.0, 1.0, 1.0);\n"
-            "   gl_Position = vec4(vertices[int(mod(gl_VertexID, 3))], 0.0, 1.0);\n"
-            "}\n";
 
     createInfo.sType = XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
     createInfo.pNext = NULL;
 
-    if (this->m_device->extension_exist("XGL_COMPILE_GLSL")) {
-        XGL_INTEL_COMPILE_GLSL glsl_header;
+    shader_len = strlen(vertShaderText);
+    createInfo.codeSize = 3 * sizeof(uint32_t) + shader_len + 1;
+    createInfo.pCode = malloc(createInfo.codeSize);
+    createInfo.flags = 0;
 
-        glsl_header.stage = XGL_SHADER_STAGE_VERTEX;
-        glsl_header.pCode = vertShader2;
-        // Driver has extended CreateShader to process GLSL
-        createInfo.sType = (XGL_STRUCTURE_TYPE) XGL_INTEL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
-        createInfo.pCode = &glsl_header;
-        createInfo.codeSize = strlen(vertShader2);
-        createInfo.flags = 0;
-    } else {
+    /* try version 0 first: XGL_PIPELINE_SHADER_STAGE followed by GLSL */
+    ((uint32_t *) createInfo.pCode)[0] = ICD_BIL_MAGIC;
+    ((uint32_t *) createInfo.pCode)[1] = 0;
+    ((uint32_t *) createInfo.pCode)[2] = XGL_SHADER_STAGE_VERTEX;
+    memcpy(((uint32_t *) createInfo.pCode + 3), vertShaderText, shader_len + 1);
+
+    err = xglCreateShader(device(), &createInfo, &shader);
+    if (err) {
+        free((void *) createInfo.pCode);
+
         // Use Reference GLSL to BIL compiler
-        GLSLtoBIL(XGL_SHADER_STAGE_VERTEX, vertShader2, bil);
+        GLSLtoBIL(XGL_SHADER_STAGE_VERTEX, vertShaderText, bil);
         createInfo.pCode = bil.data();
         createInfo.codeSize = bil.size() * sizeof(unsigned int);
         createInfo.flags = 0;
+        err = xglCreateShader(device(), &createInfo, &shader);
     }
-
-    err = xglCreateShader(device(), &createInfo, &vs);
     ASSERT_XGL_SUCCESS(err);
 
     vs_stage.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
@@ -621,37 +607,32 @@
        "void main() {\n"
        "   gl_FragColor = foo;\n"
        "}\n";
-    static const char *fragShader2 =
-            "#version 430\n"
-            "in vec4 color;\n"
-            "in vec4 scale;\n"
-            "layout(location = 0) uniform vec4 foo;\n"
-            "void main() {\n"
-            "   gl_FragColor = color * scale + foo;\n"
-            "}\n";
 
     createInfo.sType = XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
     createInfo.pNext = NULL;
 
-    if (this->m_device->extension_exist("XGL_COMPILE_GLSL")) {
-        XGL_INTEL_COMPILE_GLSL glsl_header;
+    shader_len = strlen(fragShaderText);
+    createInfo.codeSize = 3 * sizeof(uint32_t) + shader_len + 1;
+    createInfo.pCode = malloc(createInfo.codeSize);
+    createInfo.flags = 0;
 
-        glsl_header.stage = XGL_SHADER_STAGE_FRAGMENT;
-        glsl_header.pCode = fragShader2;
-        // Driver has extended CreateShader to process GLSL
-        createInfo.sType = (XGL_STRUCTURE_TYPE) XGL_INTEL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
-        createInfo.pCode = &glsl_header;
-        createInfo.codeSize = strlen(fragShader2);
-        createInfo.flags = 0;
-    } else {
+    /* try version 0 first: XGL_PIPELINE_SHADER_STAGE followed by GLSL */
+    ((uint32_t *) createInfo.pCode)[0] = ICD_BIL_MAGIC;
+    ((uint32_t *) createInfo.pCode)[1] = 0;
+    ((uint32_t *) createInfo.pCode)[2] = XGL_SHADER_STAGE_VERTEX;
+    memcpy(((uint32_t *) createInfo.pCode + 3), fragShaderText, shader_len + 1);
+
+    err = xglCreateShader(device(), &createInfo, &ps);
+    if (err) {
+        free((void *) createInfo.pCode);
+
         // Use Reference GLSL to BIL compiler
-        GLSLtoBIL(XGL_SHADER_STAGE_FRAGMENT, fragShader2, bil);
+        GLSLtoBIL(XGL_SHADER_STAGE_VERTEX, fragShaderText, bil);
         createInfo.pCode = bil.data();
         createInfo.codeSize = bil.size() * sizeof(unsigned int);
         createInfo.flags = 0;
+        err = xglCreateShader(device(), &createInfo, &ps);
     }
-
-    err = xglCreateShader(device(), &createInfo, &ps);
     ASSERT_XGL_SUCCESS(err);
 
     ps_stage.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 3b61d0b..d82951e 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -61,7 +61,6 @@
 using namespace std;
 
 #include <xgl.h>
-#include <xglIntelExt.h>
 #include "gtest-1.7.0/include/gtest/gtest.h"
 
 #include "xgldevice.h"
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index dcfb04f..547b580 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -26,7 +26,6 @@
  */
 
 #include "xglrenderframework.h"
-#include "xglIntelExt.h"
 
 XglRenderFramework::XglRenderFramework() :
     m_colorBlend( XGL_NULL_HANDLE ),
@@ -234,33 +233,43 @@
                                       const char *shader_code,
                                       XGL_SHADER *pshader)
 {
-    XGL_RESULT err;
+    XGL_RESULT err = XGL_SUCCESS;
     std::vector<unsigned int> bil;
     XGL_SHADER_CREATE_INFO createInfo;
+    size_t shader_len;
     XGL_SHADER shader;
 
     createInfo.sType = XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
     createInfo.pNext = NULL;
 
-    if (!this->m_use_bil && this->m_device->extension_exist("XGL_COMPILE_GLSL")) {
-        XGL_INTEL_COMPILE_GLSL glsl_header;
-
-        glsl_header.stage = stage;
-        glsl_header.pCode = shader_code;
-        // Driver has extended CreateShader to process GLSL
-        createInfo.sType = (XGL_STRUCTURE_TYPE) XGL_INTEL_STRUCTURE_TYPE_SHADER_CREATE_INFO;
-        createInfo.pCode = &glsl_header;
-        createInfo.codeSize = strlen(shader_code);
+    if (!this->m_use_bil) {
+        shader_len = strlen(shader_code);
+        createInfo.codeSize = 3 * sizeof(uint32_t) + shader_len + 1;
+        createInfo.pCode = malloc(createInfo.codeSize);
         createInfo.flags = 0;
-    } else {
+
+        /* try version 0 first: XGL_PIPELINE_SHADER_STAGE followed by GLSL */
+        ((uint32_t *) createInfo.pCode)[0] = ICD_BIL_MAGIC;
+        ((uint32_t *) createInfo.pCode)[1] = 0;
+        ((uint32_t *) createInfo.pCode)[2] = stage;
+        memcpy(((uint32_t *) createInfo.pCode + 3), shader_code, shader_len + 1);
+
+        err = xglCreateShader(device(), &createInfo, &shader);
+        if (err) {
+            free((void *) createInfo.pCode);
+        }
+    }
+
+    // Only use BIL if GLSL compile fails or it's requested via m_use_bil
+    if (this->m_use_bil || err) {
         // Use Reference GLSL to BIL compiler
         GLSLtoBIL(stage, shader_code, bil);
         createInfo.pCode = bil.data();
         createInfo.codeSize = bil.size() * sizeof(unsigned int);
         createInfo.flags = 0;
+        err = xglCreateShader(device(), &createInfo, &shader);
     }
 
-    err = xglCreateShader(device(), &createInfo, &shader);
     ASSERT_XGL_SUCCESS(err);
 
     *pshader = shader;
diff --git a/tests/xgltestframework.h b/tests/xgltestframework.h
index fe9cfd2..becf085 100644
--- a/tests/xgltestframework.h
+++ b/tests/xgltestframework.h
@@ -27,6 +27,7 @@
 #include "xglimage.h"
 #include "ShaderLang.h"
 #include "GLSL450Lib.h"
+#include "icd-bil.h"
 
 #include <stdlib.h>
 #include <stdio.h>
