intel: make intel_ir opaque

It is just gl_shader_program in the end, and we want gl_shader_program to be
opaque.  This also forces the driver to correctly use intel_pipeline_shader
instead of intel_ir.

With the change, xglCreateShader() now asks the compiler to compile BIL into
intel_ir.  Later when the pipeline is created, the intel_ir is passed to the
compiler again to generate the binary kernel as well as metadata.
diff --git a/icd/intel/shader.c b/icd/intel/shader.c
index 0f94002..f6fb5a8 100644
--- a/icd/intel/shader.c
+++ b/icd/intel/shader.c
@@ -30,39 +30,12 @@
 #include "shader.h"
 #include "compiler/shader/compiler_interface.h"
 
-static XGL_RESULT shader_parse(struct intel_shader *sh,
-                                   const struct intel_gpu *gpu,
-                                   const struct icd_bil_header *bil,
-                                   XGL_SIZE size)
-{
-    struct intel_ir *ir;
-
-    ir = icd_alloc(sizeof(*ir), 0, XGL_SYSTEM_ALLOC_INTERNAL_SHADER);
-    if (!ir)
-        return XGL_ERROR_OUT_OF_MEMORY;
-
-    ir->size = size - sizeof(*bil);
-
-    // invoke our program creation as well
-    ir->shader_program = shader_create_program(sh, bil, size);
-    if (!ir->shader_program)
-        return XGL_ERROR_BAD_SHADER_CODE;
-
-    // TODO: set necessary shader information. This should really
-    // happen as result of create_program call.
-    sh->ir = ir;
-
-    return XGL_SUCCESS;
-}
-
 static void shader_destroy(struct intel_obj *obj)
 {
     struct intel_shader *sh = intel_shader_from_obj(obj);
 
-    if (sh->ir) {
-        shader_destroy_program(sh->ir->shader_program);
-    }
-    icd_free(sh->ir);
+    if (sh->ir)
+        shader_destroy_ir(sh->ir);
     intel_base_destroy(&sh->obj.base);
 }
 
@@ -73,7 +46,6 @@
     const struct icd_bil_header *bil =
         (const struct icd_bil_header *) info->pCode;
     struct intel_shader *sh;
-    XGL_RESULT ret;
 
     sh = (struct intel_shader *) intel_base_create(dev, sizeof(*sh),
             dev->base.dbg, XGL_DBG_OBJECT_SHADER, info, 0);
@@ -85,14 +57,12 @@
     if (bil->magic != ICD_BIL_MAGIC)
         return XGL_ERROR_BAD_SHADER_CODE;
 
-
-    ret = shader_parse(sh, dev->gpu, bil, info->codeSize);
-    if (ret != XGL_SUCCESS) {
+    sh->ir = shader_create_ir(dev->gpu, info->pCode, info->codeSize);
+    if (!sh->ir) {
         shader_destroy(&sh->obj);
-        return ret;
+        return XGL_ERROR_UNKNOWN;
     }
 
-
     sh->obj.destroy = shader_destroy;
 
     *sh_ret = sh;