diff --git a/src/dawn_native/Device.h b/src/dawn_native/Device.h
index dfa947a..59c0272 100644
--- a/src/dawn_native/Device.h
+++ b/src/dawn_native/Device.h
@@ -57,7 +57,6 @@
             RenderPassDescriptorBuilder* builder) = 0;
         virtual RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) = 0;
         virtual SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) = 0;
-        virtual TextureViewBase* CreateDefaultTextureView(TextureBase* texture) = 0;
 
         virtual void TickImpl() = 0;
 
diff --git a/src/dawn_native/Texture.cpp b/src/dawn_native/Texture.cpp
index eeb4aa2..23ceb75 100644
--- a/src/dawn_native/Texture.cpp
+++ b/src/dawn_native/Texture.cpp
@@ -79,6 +79,30 @@
             return {};
         }
 
+        TextureViewDescriptor MakeDefaultTextureViewDescriptor(const TextureBase* texture) {
+            TextureViewDescriptor descriptor;
+            descriptor.format = texture->GetFormat();
+            descriptor.baseArrayLayer = 0;
+            descriptor.layerCount = texture->GetArrayLayers();
+            descriptor.baseMipLevel = 0;
+            descriptor.levelCount = texture->GetNumMipLevels();
+
+            // TODO(jiawei.shao@intel.com): support all texture dimensions.
+            switch (texture->GetDimension()) {
+                case dawn::TextureDimension::e2D:
+                    if (texture->GetArrayLayers() == 1u) {
+                        descriptor.dimension = dawn::TextureViewDimension::e2D;
+                    } else {
+                        descriptor.dimension = dawn::TextureViewDimension::e2DArray;
+                    }
+                    break;
+                default:
+                    UNREACHABLE();
+            }
+
+            return descriptor;
+        }
+
     }  // anonymous namespace
 
     MaybeError ValidateTextureDescriptor(DeviceBase*, const TextureDescriptor* descriptor) {
@@ -209,10 +233,8 @@
     }
 
     TextureViewBase* TextureBase::CreateDefaultTextureView() {
-        // TODO(jiawei.shao@intel.com): remove Device->CreateDefaultTextureView in all back-ends
-        // and implement this function by creating a TextureViewDescriptor based on the texture
-        // and calling CreateTextureView(&descriptor) instead.
-        return GetDevice()->CreateDefaultTextureView(this);
+        TextureViewDescriptor descriptor = MakeDefaultTextureViewDescriptor(this);
+        return GetDevice()->CreateTextureView(this, &descriptor);
     }
 
     TextureViewBase* TextureBase::CreateTextureView(const TextureViewDescriptor* descriptor) {
@@ -221,7 +243,7 @@
 
     // TextureViewBase
 
-    TextureViewBase::TextureViewBase(TextureBase* texture)
+    TextureViewBase::TextureViewBase(TextureBase* texture, const TextureViewDescriptor* descriptor)
         : ObjectBase(texture->GetDevice()), mTexture(texture) {
     }
 
diff --git a/src/dawn_native/Texture.h b/src/dawn_native/Texture.h
index 337f1ba..1817bc1 100644
--- a/src/dawn_native/Texture.h
+++ b/src/dawn_native/Texture.h
@@ -67,7 +67,7 @@
 
     class TextureViewBase : public ObjectBase {
       public:
-        TextureViewBase(TextureBase* texture);
+        TextureViewBase(TextureBase* texture, const TextureViewDescriptor* descriptor);
 
         const TextureBase* GetTexture() const;
         TextureBase* GetTexture();
diff --git a/src/dawn_native/d3d12/DeviceD3D12.cpp b/src/dawn_native/d3d12/DeviceD3D12.cpp
index dad2bb7..231a4ee 100644
--- a/src/dawn_native/d3d12/DeviceD3D12.cpp
+++ b/src/dawn_native/d3d12/DeviceD3D12.cpp
@@ -334,14 +334,10 @@
     ResultOrError<TextureBase*> Device::CreateTextureImpl(const TextureDescriptor* descriptor) {
         return new Texture(this, descriptor);
     }
-    TextureViewBase* Device::CreateDefaultTextureView(TextureBase* texture) {
-        return new TextureView(texture);
-    }
-    // TODO(jiawei.shao@intel.com): implement creating texture view with TextureViewDescriptor
     ResultOrError<TextureViewBase*> Device::CreateTextureViewImpl(
         TextureBase* texture,
         const TextureViewDescriptor* descriptor) {
-        return DAWN_UNIMPLEMENTED_ERROR("Creating texture view with descriptor is unimplemented.");
+        return new TextureView(texture, descriptor);
     }
 
     void Device::CollectPCIInfo() {
diff --git a/src/dawn_native/d3d12/DeviceD3D12.h b/src/dawn_native/d3d12/DeviceD3D12.h
index 9ac0e1b..3717e24 100644
--- a/src/dawn_native/d3d12/DeviceD3D12.h
+++ b/src/dawn_native/d3d12/DeviceD3D12.h
@@ -51,7 +51,6 @@
             RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
-        TextureViewBase* CreateDefaultTextureView(TextureBase* texture) override;
 
         void TickImpl() override;
 
diff --git a/src/dawn_native/d3d12/TextureD3D12.cpp b/src/dawn_native/d3d12/TextureD3D12.cpp
index a7d0a78..0a52364 100644
--- a/src/dawn_native/d3d12/TextureD3D12.cpp
+++ b/src/dawn_native/d3d12/TextureD3D12.cpp
@@ -187,7 +187,9 @@
         mLastUsage = usage;
     }
 
-    TextureView::TextureView(TextureBase* texture) : TextureViewBase(texture) {
+    // TODO(jiawei.shao@intel.com): create texture view by TextureViewDescriptor
+    TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor)
+        : TextureViewBase(texture, descriptor) {
         mSrvDesc.Format = D3D12TextureFormat(GetTexture()->GetFormat());
         mSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
         switch (GetTexture()->GetDimension()) {
diff --git a/src/dawn_native/d3d12/TextureD3D12.h b/src/dawn_native/d3d12/TextureD3D12.h
index 58a2488..23a0d52 100644
--- a/src/dawn_native/d3d12/TextureD3D12.h
+++ b/src/dawn_native/d3d12/TextureD3D12.h
@@ -47,7 +47,7 @@
 
     class TextureView : public TextureViewBase {
       public:
-        TextureView(TextureBase* builder);
+        TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor);
 
         const D3D12_SHADER_RESOURCE_VIEW_DESC& GetSRVDescriptor() const;
         D3D12_RENDER_TARGET_VIEW_DESC GetRTVDescriptor();
diff --git a/src/dawn_native/metal/DeviceMTL.h b/src/dawn_native/metal/DeviceMTL.h
index 9d0998d..da586ee 100644
--- a/src/dawn_native/metal/DeviceMTL.h
+++ b/src/dawn_native/metal/DeviceMTL.h
@@ -47,7 +47,6 @@
             RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
-        TextureViewBase* CreateDefaultTextureView(TextureBase* texture) override;
 
         void TickImpl() override;
 
diff --git a/src/dawn_native/metal/DeviceMTL.mm b/src/dawn_native/metal/DeviceMTL.mm
index 7036830..4d62e5d 100644
--- a/src/dawn_native/metal/DeviceMTL.mm
+++ b/src/dawn_native/metal/DeviceMTL.mm
@@ -132,14 +132,10 @@
     ResultOrError<TextureBase*> Device::CreateTextureImpl(const TextureDescriptor* descriptor) {
         return new Texture(this, descriptor);
     }
-    TextureViewBase* Device::CreateDefaultTextureView(TextureBase* texture) {
-        return new TextureView(texture);
-    }
-    // TODO(jiawei.shao@intel.com): implement creating texture view with TextureViewDescriptor
     ResultOrError<TextureViewBase*> Device::CreateTextureViewImpl(
         TextureBase* texture,
         const TextureViewDescriptor* descriptor) {
-        return DAWN_UNIMPLEMENTED_ERROR("Creating texture view with descriptor is unimplemented.");
+        return new TextureView(texture, descriptor);
     }
 
     void Device::TickImpl() {
diff --git a/src/dawn_native/metal/TextureMTL.h b/src/dawn_native/metal/TextureMTL.h
index 6aca712..01efb21 100644
--- a/src/dawn_native/metal/TextureMTL.h
+++ b/src/dawn_native/metal/TextureMTL.h
@@ -39,7 +39,7 @@
 
     class TextureView : public TextureViewBase {
       public:
-        TextureView(TextureBase* texture);
+        TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor);
     };
 
 }}  // namespace dawn_native::metal
diff --git a/src/dawn_native/metal/TextureMTL.mm b/src/dawn_native/metal/TextureMTL.mm
index 213df8f..7d6d024 100644
--- a/src/dawn_native/metal/TextureMTL.mm
+++ b/src/dawn_native/metal/TextureMTL.mm
@@ -101,7 +101,9 @@
         return mMtlTexture;
     }
 
-    TextureView::TextureView(TextureBase* texture) : TextureViewBase(texture) {
+    // TODO(jiawei.shao@intel.com): create texture view by texture view descriptor
+    TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor)
+        : TextureViewBase(texture, descriptor) {
     }
 
 }}  // namespace dawn_native::metal
diff --git a/src/dawn_native/null/NullBackend.cpp b/src/dawn_native/null/NullBackend.cpp
index 10fda39..86fbca7 100644
--- a/src/dawn_native/null/NullBackend.cpp
+++ b/src/dawn_native/null/NullBackend.cpp
@@ -95,14 +95,10 @@
     ResultOrError<TextureBase*> Device::CreateTextureImpl(const TextureDescriptor* descriptor) {
         return new Texture(this, descriptor);
     }
-    TextureViewBase* Device::CreateDefaultTextureView(TextureBase* texture) {
-        return new TextureView(texture);
-    }
-    // TODO(jiawei.shao@intel.com): implement creating texture view by TextureViewDescriptor
     ResultOrError<TextureViewBase*> Device::CreateTextureViewImpl(
         TextureBase* texture,
         const TextureViewDescriptor* descriptor) {
-        return new TextureView(texture);
+        return new TextureView(texture, descriptor);
     }
 
     void Device::InitFakePCIInfo() {
diff --git a/src/dawn_native/null/NullBackend.h b/src/dawn_native/null/NullBackend.h
index 1fee911..0c50ae9 100644
--- a/src/dawn_native/null/NullBackend.h
+++ b/src/dawn_native/null/NullBackend.h
@@ -105,7 +105,6 @@
             RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
-        TextureViewBase* CreateDefaultTextureView(TextureBase* texture) override;
 
         void TickImpl() override;
 
diff --git a/src/dawn_native/opengl/DeviceGL.cpp b/src/dawn_native/opengl/DeviceGL.cpp
index 046a66e..f2dc8bc 100644
--- a/src/dawn_native/opengl/DeviceGL.cpp
+++ b/src/dawn_native/opengl/DeviceGL.cpp
@@ -106,14 +106,10 @@
     ResultOrError<TextureBase*> Device::CreateTextureImpl(const TextureDescriptor* descriptor) {
         return new Texture(this, descriptor);
     }
-    TextureViewBase* Device::CreateDefaultTextureView(TextureBase* texture) {
-        return new TextureView(texture);
-    }
-    // TODO(jiawei.shao@intel.com): implement creating texture view with TextureViewDescriptor
     ResultOrError<TextureViewBase*> Device::CreateTextureViewImpl(
         TextureBase* texture,
         const TextureViewDescriptor* descriptor) {
-        return DAWN_UNIMPLEMENTED_ERROR("Creating texture view with descriptor is unimplemented.");
+        return new TextureView(texture, descriptor);
     }
 
     void Device::TickImpl() {
diff --git a/src/dawn_native/opengl/DeviceGL.h b/src/dawn_native/opengl/DeviceGL.h
index b07398a..2b39db5 100644
--- a/src/dawn_native/opengl/DeviceGL.h
+++ b/src/dawn_native/opengl/DeviceGL.h
@@ -43,7 +43,6 @@
             RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
-        TextureViewBase* CreateDefaultTextureView(TextureBase* texture) override;
 
         void TickImpl() override;
 
diff --git a/src/dawn_native/opengl/TextureGL.cpp b/src/dawn_native/opengl/TextureGL.cpp
index b0bc81c..6b9d90c 100644
--- a/src/dawn_native/opengl/TextureGL.cpp
+++ b/src/dawn_native/opengl/TextureGL.cpp
@@ -129,7 +129,9 @@
 
     // TextureView
 
-    TextureView::TextureView(TextureBase* texture) : TextureViewBase(texture) {
+    // TODO(jiawei.shao@intel.com): create texture view by TextureViewDescriptor
+    TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor)
+        : TextureViewBase(texture, descriptor) {
     }
 
 }}  // namespace dawn_native::opengl
diff --git a/src/dawn_native/opengl/TextureGL.h b/src/dawn_native/opengl/TextureGL.h
index 2fd7ffe..be7d159 100644
--- a/src/dawn_native/opengl/TextureGL.h
+++ b/src/dawn_native/opengl/TextureGL.h
@@ -46,7 +46,7 @@
 
     class TextureView : public TextureViewBase {
       public:
-        TextureView(TextureBase* texture);
+        TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor);
     };
 
 }}  // namespace dawn_native::opengl
diff --git a/src/dawn_native/vulkan/DeviceVk.cpp b/src/dawn_native/vulkan/DeviceVk.cpp
index f898e61..5998674 100644
--- a/src/dawn_native/vulkan/DeviceVk.cpp
+++ b/src/dawn_native/vulkan/DeviceVk.cpp
@@ -270,15 +270,11 @@
     ResultOrError<TextureBase*> Device::CreateTextureImpl(const TextureDescriptor* descriptor) {
         return new Texture(this, descriptor);
     }
-    TextureViewBase* Device::CreateDefaultTextureView(TextureBase* texture) {
-        return new TextureView(texture);
-    }
 
-    // TODO(jiawei.shao@intel.com): implement creating texture view with TextureViewDescriptor
     ResultOrError<TextureViewBase*> Device::CreateTextureViewImpl(
         TextureBase* texture,
         const TextureViewDescriptor* descriptor) {
-        return DAWN_UNIMPLEMENTED_ERROR("Creating texture view with descriptor is unimplemented.");
+        return new TextureView(texture, descriptor);
     }
 
     void Device::TickImpl() {
diff --git a/src/dawn_native/vulkan/DeviceVk.h b/src/dawn_native/vulkan/DeviceVk.h
index 90cfcc6..c11427c 100644
--- a/src/dawn_native/vulkan/DeviceVk.h
+++ b/src/dawn_native/vulkan/DeviceVk.h
@@ -74,7 +74,6 @@
             RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
-        TextureViewBase* CreateDefaultTextureView(TextureBase* texture) override;
 
         void TickImpl() override;
 
diff --git a/src/dawn_native/vulkan/TextureVk.cpp b/src/dawn_native/vulkan/TextureVk.cpp
index 6826e19..0f523ad 100644
--- a/src/dawn_native/vulkan/TextureVk.cpp
+++ b/src/dawn_native/vulkan/TextureVk.cpp
@@ -346,7 +346,9 @@
         mLastUsage = usage;
     }
 
-    TextureView::TextureView(TextureBase* texture) : TextureViewBase(texture) {
+    // TODO(jiawei.shao@intel.com): create texture view by TextureViewDescriptor
+    TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor)
+        : TextureViewBase(texture, descriptor) {
         Device* device = ToBackend(texture->GetDevice());
 
         VkImageViewCreateInfo createInfo;
diff --git a/src/dawn_native/vulkan/TextureVk.h b/src/dawn_native/vulkan/TextureVk.h
index e1c4831..e17ebb2 100644
--- a/src/dawn_native/vulkan/TextureVk.h
+++ b/src/dawn_native/vulkan/TextureVk.h
@@ -50,7 +50,7 @@
 
     class TextureView : public TextureViewBase {
       public:
-        TextureView(TextureBase* texture);
+        TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor);
         ~TextureView();
 
         VkImageView GetHandle() const;
