tests: derive XglShaderObj from xgl_testing::Shader
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index d1c5d10..8d59fd2 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -647,7 +647,7 @@
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO *stageInfo = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*) calloc( 1,sizeof(XGL_PIPELINE_SHADER_STAGE_CREATE_INFO) );
     stageInfo->sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
     stageInfo->shader.stage = m_stage;
-    stageInfo->shader.shader = m_shader;
+    stageInfo->shader.shader = obj();
     stageInfo->shader.descriptorSetMapping[0].descriptorCount = 0;
     stageInfo->shader.linkConstBufferCount = 0;
     stageInfo->shader.pLinkConstBufferInfo = XGL_NULL_HANDLE;
@@ -740,10 +740,7 @@
         ((uint32_t *) createInfo.pCode)[2] = stage;
         memcpy(((uint32_t *) createInfo.pCode + 3), shader_code, shader_len + 1);
 
-        err = xglCreateShader(m_device->device(), &createInfo, &m_shader);
-        if (err) {
-            free((void *) createInfo.pCode);
-        }
+        err = init_try(*m_device, createInfo);
     }
 
     if (framework->m_use_bil || err) {
@@ -755,14 +752,9 @@
         createInfo.pCode = bil.data();
         createInfo.codeSize = bil.size() * sizeof(unsigned int);
         createInfo.flags = 0;
-        err = xglCreateShader(m_device->device(), &createInfo, &m_shader);
-        assert(!err);
-    }
-}
 
-XglShaderObj::~XglShaderObj()
-{
-    if (m_shader != XGL_NULL_HANDLE) xglDestroyObject(m_shader);
+        init(*m_device, createInfo);
+    }
 }
 
 XglPipelineObj::XglPipelineObj(XglDevice *device)
diff --git a/tests/xglrenderframework.h b/tests/xglrenderframework.h
index 35a9013..79072d0 100644
--- a/tests/xglrenderframework.h
+++ b/tests/xglrenderframework.h
@@ -210,11 +210,10 @@
 };
 
 
-class XglShaderObj
+class XglShaderObj : public xgl_testing::Shader
 {
 public:
     XglShaderObj(XglDevice *device, const char * shaderText, XGL_PIPELINE_SHADER_STAGE stage, XglRenderFramework *framework);
-    ~XglShaderObj();
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* GetStageCreateInfo(XglDescriptorSetObj *descriptorSet);
     void BindShaderEntitySlotToMemory(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglConstantBufferObj *constantBuffer);
     void BindShaderEntitySlotToImage(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglTextureObj *texture);
@@ -222,7 +221,6 @@
 
 protected:
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO stage_info;
-    XGL_SHADER m_shader;
     XGL_PIPELINE_SHADER_STAGE m_stage;
     XglDevice *m_device;
     vector<int>    m_memSlots;