Descriptorize ComputePipeline

Change-Id: Ic9d7014ba44d927d7f9ddf81a8870432c68941e8
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index 217cf43..57f22dc 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -123,8 +123,15 @@
     CommandBufferBuilder* DeviceBase::CreateCommandBufferBuilder() {
         return new CommandBufferBuilder(this);
     }
-    ComputePipelineBuilder* DeviceBase::CreateComputePipelineBuilder() {
-        return new ComputePipelineBuilder(this);
+    ComputePipelineBase* DeviceBase::CreateComputePipeline(
+        const ComputePipelineDescriptor* descriptor) {
+        ComputePipelineBase* result = nullptr;
+
+        if (ConsumedError(CreateComputePipelineInternal(&result, descriptor))) {
+            return nullptr;
+        }
+
+        return result;
     }
     DepthStencilStateBuilder* DeviceBase::CreateDepthStencilStateBuilder() {
         return new DepthStencilStateBuilder(this);
@@ -223,6 +230,14 @@
         return {};
     }
 
+    MaybeError DeviceBase::CreateComputePipelineInternal(
+        ComputePipelineBase** result,
+        const ComputePipelineDescriptor* descriptor) {
+        DAWN_TRY(ValidateComputePipelineDescriptor(this, descriptor));
+        DAWN_TRY_ASSIGN(*result, CreateComputePipelineImpl(descriptor));
+        return {};
+    }
+
     MaybeError DeviceBase::CreatePipelineLayoutInternal(
         PipelineLayoutBase** result,
         const PipelineLayoutDescriptor* descriptor) {