Change D3DAttachmentViewManager to handle all CPU descriptors

Change-Id: I6af3673a9dedf0a5acfbd588bfbbb447b5c68013
Bug: skia:9935
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292576
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/gn/gpu.gni b/gn/gpu.gni
index c13461a..66868a1 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -747,14 +747,14 @@
   "$_include/gpu/d3d/GrD3DTypes.h",
   "$_include/gpu/d3d/GrD3DTypesMinimal.h",
   "$_include/private/GrD3DTypesPriv.h",
-  "$_src/gpu/d3d/GrD3DAttachmentViewManager.cpp",
-  "$_src/gpu/d3d/GrD3DAttachmentViewManager.h",
   "$_src/gpu/d3d/GrD3DBuffer.cpp",
   "$_src/gpu/d3d/GrD3DBuffer.h",
   "$_src/gpu/d3d/GrD3DCaps.cpp",
   "$_src/gpu/d3d/GrD3DCaps.h",
   "$_src/gpu/d3d/GrD3DCommandList.cpp",
   "$_src/gpu/d3d/GrD3DCommandList.h",
+  "$_src/gpu/d3d/GrD3DCpuDescriptorManager.cpp",
+  "$_src/gpu/d3d/GrD3DCpuDescriptorManager.h",
   "$_src/gpu/d3d/GrD3DDescriptorHeap.cpp",
   "$_src/gpu/d3d/GrD3DDescriptorHeap.h",
   "$_src/gpu/d3d/GrD3DGpu.cpp",
diff --git a/src/gpu/d3d/GrD3DAttachmentViewManager.cpp b/src/gpu/d3d/GrD3DAttachmentViewManager.cpp
deleted file mode 100644
index 7536f59..0000000
--- a/src/gpu/d3d/GrD3DAttachmentViewManager.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2020 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "src/gpu/d3d/GrD3DAttachmentViewManager.h"
-
-#include "src/gpu/d3d/GrD3DGpu.h"
-
-GrD3DAttachmentViewManager::GrD3DAttachmentViewManager(GrD3DGpu* gpu)
-    : fRTVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_RTV)
-    , fDSVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_DSV) {}
-
-D3D12_CPU_DESCRIPTOR_HANDLE GrD3DAttachmentViewManager::createRenderTargetView(
-        GrD3DGpu* gpu, ID3D12Resource* textureResource) {
-    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fRTVDescriptorPool.allocateHandle(gpu);
-    gpu->device()->CreateRenderTargetView(textureResource, nullptr, descriptor);
-    return descriptor;
-}
-
-void GrD3DAttachmentViewManager::recycleRenderTargetView(
-        D3D12_CPU_DESCRIPTOR_HANDLE* rtvDescriptor) {
-    fRTVDescriptorPool.releaseHandle(rtvDescriptor);
-}
-
-D3D12_CPU_DESCRIPTOR_HANDLE GrD3DAttachmentViewManager::createDepthStencilView(
-        GrD3DGpu* gpu, ID3D12Resource* textureResource) {
-    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fDSVDescriptorPool.allocateHandle(gpu);
-    gpu->device()->CreateDepthStencilView(textureResource, nullptr, descriptor);
-    return descriptor;
-}
-
-void GrD3DAttachmentViewManager::recycleDepthStencilView(
-        D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) {
-    fDSVDescriptorPool.releaseHandle(dsvDescriptor);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-
-std::unique_ptr<GrD3DAttachmentViewManager::Heap> GrD3DAttachmentViewManager::Heap::Make(
-        GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE type, unsigned int numDescriptors) {
-    std::unique_ptr<GrD3DDescriptorHeap> heap =
-            GrD3DDescriptorHeap::Make(gpu, type, numDescriptors, D3D12_DESCRIPTOR_HEAP_FLAG_NONE);
-    if (!heap) {
-        return nullptr;
-    }
-
-    return std::unique_ptr<Heap>(new Heap(heap, numDescriptors));
-
-}
-
-D3D12_CPU_DESCRIPTOR_HANDLE GrD3DAttachmentViewManager::Heap::allocateCPUHandle() {
-    SkBitSet::OptionalIndex freeBlock = fFreeBlocks.findFirst();
-    SkASSERT(freeBlock);
-    fFreeBlocks.reset(*freeBlock);
-    --fFreeCount;
-    return fHeap->getCPUHandle(*freeBlock);
-}
-
-bool GrD3DAttachmentViewManager::Heap::freeCPUHandle(D3D12_CPU_DESCRIPTOR_HANDLE* handle) {
-    size_t index;
-    if (!fHeap->getIndex(*handle, &index)) {
-        return false;
-    }
-    fFreeBlocks.set(index);
-    ++fFreeCount;
-    handle->ptr = 0;
-    return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-
-GrD3DAttachmentViewManager::HeapPool::HeapPool(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE heapType)
-    : fMaxAvailableDescriptors(32)
-    , fHeapType(heapType) {
-    std::unique_ptr<GrD3DAttachmentViewManager::Heap> heap =
-            GrD3DAttachmentViewManager::Heap::Make(gpu, fHeapType, fMaxAvailableDescriptors);
-    fDescriptorHeaps.push_back(std::move(heap));
-}
-
-D3D12_CPU_DESCRIPTOR_HANDLE GrD3DAttachmentViewManager::HeapPool::allocateHandle(GrD3DGpu* gpu) {
-    for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) {
-        if (fDescriptorHeaps[i]->canAllocate()) {
-            D3D12_CPU_DESCRIPTOR_HANDLE handle = fDescriptorHeaps[i]->allocateCPUHandle();
-            return handle;
-        }
-    }
-
-    // need to allocate more space
-    std::unique_ptr<GrD3DAttachmentViewManager::Heap> heap =
-        GrD3DAttachmentViewManager::Heap::Make(gpu, fHeapType, fMaxAvailableDescriptors);
-
-    fDescriptorHeaps.push_back(std::move(heap));
-    fMaxAvailableDescriptors *= 2;
-    D3D12_CPU_DESCRIPTOR_HANDLE handle =
-            fDescriptorHeaps[fDescriptorHeaps.size() - 1]->allocateCPUHandle();
-    return handle;
-}
-
-void GrD3DAttachmentViewManager::HeapPool::releaseHandle(
-        D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) {
-    for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) {
-        if (fDescriptorHeaps[i]->freeCPUHandle(dsvDescriptor)) {
-            return;
-        }
-    }
-    SkASSERT(false);
-}
diff --git a/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp b/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp
new file mode 100644
index 0000000..202d432
--- /dev/null
+++ b/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/gpu/d3d/GrD3DCpuDescriptorManager.h"
+
+#include "src/gpu/d3d/GrD3DGpu.h"
+
+GrD3DCpuDescriptorManager::GrD3DCpuDescriptorManager(GrD3DGpu* gpu)
+    : fRTVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_RTV)
+    , fDSVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_DSV)
+    , fCBVSRVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV)
+    , fSamplerDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) {}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createRenderTargetView(
+        GrD3DGpu* gpu, ID3D12Resource* textureResource) {
+    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fRTVDescriptorPool.allocateHandle(gpu);
+    gpu->device()->CreateRenderTargetView(textureResource, nullptr, descriptor);
+    return descriptor;
+}
+
+void GrD3DCpuDescriptorManager::recycleRenderTargetView(
+        D3D12_CPU_DESCRIPTOR_HANDLE* rtvDescriptor) {
+    fRTVDescriptorPool.releaseHandle(rtvDescriptor);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createDepthStencilView(
+        GrD3DGpu* gpu, ID3D12Resource* textureResource) {
+    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fDSVDescriptorPool.allocateHandle(gpu);
+    gpu->device()->CreateDepthStencilView(textureResource, nullptr, descriptor);
+    return descriptor;
+}
+
+void GrD3DCpuDescriptorManager::recycleDepthStencilView(
+        D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) {
+    fDSVDescriptorPool.releaseHandle(dsvDescriptor);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createConstantBufferView(
+        GrD3DGpu* gpu, ID3D12Resource* bufferResource, size_t offset, size_t size) {
+    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu);
+    D3D12_CONSTANT_BUFFER_VIEW_DESC desc = {};
+    desc.BufferLocation = bufferResource->GetGPUVirtualAddress() + offset;
+    desc.SizeInBytes = size;
+    gpu->device()->CreateConstantBufferView(&desc, descriptor);
+    return descriptor;
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createShaderResourceView(
+        GrD3DGpu* gpu, ID3D12Resource* resource) {
+    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu);
+    // TODO: for 4:2:0 YUV formats we'll need to map two different views, one for Y and one for UV.
+    // For now map the entire resource.
+    gpu->device()->CreateShaderResourceView(resource, nullptr, descriptor);
+    return descriptor;
+}
+
+void GrD3DCpuDescriptorManager::recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE* view) {
+    fCBVSRVDescriptorPool.releaseHandle(view);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createSampler(
+        GrD3DGpu* gpu, D3D12_FILTER filter, D3D12_TEXTURE_ADDRESS_MODE addressModeU,
+        D3D12_TEXTURE_ADDRESS_MODE addressModeV) {
+    D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fSamplerDescriptorPool.allocateHandle(gpu);
+    D3D12_SAMPLER_DESC desc = {};
+    desc.Filter = filter;
+    desc.AddressU = addressModeU;
+    desc.AddressV = addressModeV;
+    desc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
+    desc.MipLODBias = 0;
+    desc.MaxAnisotropy = 1;
+    desc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
+    // desc.BorderColor initialized to { 0, 0, 0, 0 } by default initializer, above.
+    desc.MinLOD = 0;
+    desc.MaxLOD = SK_ScalarMax;
+
+    gpu->device()->CreateSampler(&desc, descriptor);
+    return descriptor;
+}
+
+void GrD3DCpuDescriptorManager::recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE* samplerDescriptor) {
+    fSamplerDescriptorPool.releaseHandle(samplerDescriptor);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+
+std::unique_ptr<GrD3DCpuDescriptorManager::Heap> GrD3DCpuDescriptorManager::Heap::Make(
+        GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE type, unsigned int numDescriptors) {
+    std::unique_ptr<GrD3DDescriptorHeap> heap =
+            GrD3DDescriptorHeap::Make(gpu, type, numDescriptors, D3D12_DESCRIPTOR_HEAP_FLAG_NONE);
+    if (!heap) {
+        return nullptr;
+    }
+
+    return std::unique_ptr<Heap>(new Heap(heap, numDescriptors));
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::Heap::allocateCPUHandle() {
+    SkBitSet::OptionalIndex freeBlock = fFreeBlocks.findFirst();
+    SkASSERT(freeBlock);
+    fFreeBlocks.reset(*freeBlock);
+    --fFreeCount;
+    return fHeap->getCPUHandle(*freeBlock);
+}
+
+bool GrD3DCpuDescriptorManager::Heap::freeCPUHandle(D3D12_CPU_DESCRIPTOR_HANDLE* handle) {
+    size_t index;
+    if (!fHeap->getIndex(*handle, &index)) {
+        return false;
+    }
+    fFreeBlocks.set(index);
+    ++fFreeCount;
+    handle->ptr = 0;
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+
+GrD3DCpuDescriptorManager::HeapPool::HeapPool(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE heapType)
+    : fMaxAvailableDescriptors(32)
+    , fHeapType(heapType) {
+    std::unique_ptr<GrD3DCpuDescriptorManager::Heap> heap =
+            GrD3DCpuDescriptorManager::Heap::Make(gpu, fHeapType, fMaxAvailableDescriptors);
+    fDescriptorHeaps.push_back(std::move(heap));
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::HeapPool::allocateHandle(GrD3DGpu* gpu) {
+    for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) {
+        if (fDescriptorHeaps[i]->canAllocate()) {
+            D3D12_CPU_DESCRIPTOR_HANDLE handle = fDescriptorHeaps[i]->allocateCPUHandle();
+            return handle;
+        }
+    }
+
+    // need to allocate more space
+    std::unique_ptr<GrD3DCpuDescriptorManager::Heap> heap =
+        GrD3DCpuDescriptorManager::Heap::Make(gpu, fHeapType, fMaxAvailableDescriptors);
+
+    fDescriptorHeaps.push_back(std::move(heap));
+    fMaxAvailableDescriptors *= 2;
+    D3D12_CPU_DESCRIPTOR_HANDLE handle =
+            fDescriptorHeaps[fDescriptorHeaps.size() - 1]->allocateCPUHandle();
+    return handle;
+}
+
+void GrD3DCpuDescriptorManager::HeapPool::releaseHandle(
+        D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) {
+    for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) {
+        if (fDescriptorHeaps[i]->freeCPUHandle(dsvDescriptor)) {
+            return;
+        }
+    }
+    SkASSERT(false);
+}
diff --git a/src/gpu/d3d/GrD3DAttachmentViewManager.h b/src/gpu/d3d/GrD3DCpuDescriptorManager.h
similarity index 63%
rename from src/gpu/d3d/GrD3DAttachmentViewManager.h
rename to src/gpu/d3d/GrD3DCpuDescriptorManager.h
index 3424ba3..4cb926e 100644
--- a/src/gpu/d3d/GrD3DAttachmentViewManager.h
+++ b/src/gpu/d3d/GrD3DCpuDescriptorManager.h
@@ -5,16 +5,16 @@
  * found in the LICENSE file.
  */
 
-#ifndef GrD3DAttachmentViewManager_DEFINED
-#define GrD3DAttachmentViewManager_DEFINED
+#ifndef GrD3DCpuDescriptorManager_DEFINED
+#define GrD3DCpuDescriptorManager_DEFINED
 
 #include "src/gpu/d3d/GrD3DDescriptorHeap.h"
 
 class GrD3DGpu;
 
-class GrD3DAttachmentViewManager {
+class GrD3DCpuDescriptorManager {
 public:
-    GrD3DAttachmentViewManager(GrD3DGpu*);
+    GrD3DCpuDescriptorManager(GrD3DGpu*);
 
     D3D12_CPU_DESCRIPTOR_HANDLE createRenderTargetView(GrD3DGpu*, ID3D12Resource* textureResource);
     void recycleRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE*);
@@ -22,6 +22,19 @@
     D3D12_CPU_DESCRIPTOR_HANDLE createDepthStencilView(GrD3DGpu*, ID3D12Resource* textureResource);
     void recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE*);
 
+    D3D12_CPU_DESCRIPTOR_HANDLE createConstantBufferView(GrD3DGpu*,
+                                                         ID3D12Resource* bufferResource,
+                                                         size_t offset,
+                                                         size_t size);
+    D3D12_CPU_DESCRIPTOR_HANDLE createShaderResourceView(GrD3DGpu*,
+                                                         ID3D12Resource* resource);
+    void recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE*);
+
+    D3D12_CPU_DESCRIPTOR_HANDLE createSampler(GrD3DGpu*, D3D12_FILTER filter,
+                                              D3D12_TEXTURE_ADDRESS_MODE addressModeU,
+                                              D3D12_TEXTURE_ADDRESS_MODE addressModeV);
+    void recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE*);
+
 private:
     class Heap {
     public:
@@ -63,6 +76,8 @@
 
     HeapPool fRTVDescriptorPool;
     HeapPool fDSVDescriptorPool;
+    HeapPool fCBVSRVDescriptorPool;
+    HeapPool fSamplerDescriptorPool;
 };
 
 #endif
diff --git a/src/gpu/d3d/GrD3DResourceProvider.cpp b/src/gpu/d3d/GrD3DResourceProvider.cpp
index f93b36c..f7b5543 100644
--- a/src/gpu/d3d/GrD3DResourceProvider.cpp
+++ b/src/gpu/d3d/GrD3DResourceProvider.cpp
@@ -16,7 +16,7 @@
 
 GrD3DResourceProvider::GrD3DResourceProvider(GrD3DGpu* gpu)
         : fGpu(gpu)
-        , fAttachmentViewManager(gpu)
+        , fCpuDescriptorManager(gpu)
         , fPipelineStateCache(new PipelineStateCache(gpu)) {
 }
 
@@ -54,20 +54,44 @@
 
 D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createRenderTargetView(
         ID3D12Resource* textureResource) {
-    return fAttachmentViewManager.createRenderTargetView(fGpu, textureResource);
+    return fCpuDescriptorManager.createRenderTargetView(fGpu, textureResource);
 }
 
 void GrD3DResourceProvider::recycleRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE* rtvDescriptor) {
-    fAttachmentViewManager.recycleRenderTargetView(rtvDescriptor);
+    fCpuDescriptorManager.recycleRenderTargetView(rtvDescriptor);
 }
 
 D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createDepthStencilView(
         ID3D12Resource* textureResource) {
-    return fAttachmentViewManager.createDepthStencilView(fGpu, textureResource);
+    return fCpuDescriptorManager.createDepthStencilView(fGpu, textureResource);
 }
 
 void GrD3DResourceProvider::recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) {
-    fAttachmentViewManager.recycleDepthStencilView(dsvDescriptor);
+    fCpuDescriptorManager.recycleDepthStencilView(dsvDescriptor);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createConstantBufferView(
+        ID3D12Resource* bufferResource, size_t offset, size_t size) {
+    return fCpuDescriptorManager.createConstantBufferView(fGpu, bufferResource, offset, size);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createShaderResourceView(
+        ID3D12Resource* resource) {
+    return fCpuDescriptorManager.createShaderResourceView(fGpu, resource);
+}
+
+void GrD3DResourceProvider::recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE* view) {
+    fCpuDescriptorManager.recycleConstantOrShaderView(view);
+}
+
+D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createSampler(
+        D3D12_FILTER filter, D3D12_TEXTURE_ADDRESS_MODE addressModeU,
+        D3D12_TEXTURE_ADDRESS_MODE addressModeV) {
+    return fCpuDescriptorManager.createSampler(fGpu, filter, addressModeU, addressModeV);
+}
+
+void GrD3DResourceProvider::recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE* sampler) {
+    fCpuDescriptorManager.recycleSampler(sampler);
 }
 
 sk_sp<GrD3DPipelineState> GrD3DResourceProvider::findOrCreateCompatiblePipelineState(
diff --git a/src/gpu/d3d/GrD3DResourceProvider.h b/src/gpu/d3d/GrD3DResourceProvider.h
index 4e244cb..5e7db62 100644
--- a/src/gpu/d3d/GrD3DResourceProvider.h
+++ b/src/gpu/d3d/GrD3DResourceProvider.h
@@ -12,7 +12,7 @@
 #include "include/private/SkTArray.h"
 #include "src/core/SkLRUCache.h"
 #include "src/gpu/GrProgramDesc.h"
-#include "src/gpu/d3d/GrD3DAttachmentViewManager.h"
+#include "src/gpu/d3d/GrD3DCpuDescriptorManager.h"
 #include "src/gpu/d3d/GrD3DRootSignature.h"
 
 #include <memory>
@@ -37,6 +37,17 @@
     D3D12_CPU_DESCRIPTOR_HANDLE createDepthStencilView(ID3D12Resource* textureResource);
     void recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE*);
 
+    D3D12_CPU_DESCRIPTOR_HANDLE createConstantBufferView(ID3D12Resource* bufferResource,
+                                                         size_t offset,
+                                                         size_t size);
+    D3D12_CPU_DESCRIPTOR_HANDLE createShaderResourceView(ID3D12Resource* resource);
+    void recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE*);
+
+    D3D12_CPU_DESCRIPTOR_HANDLE createSampler(D3D12_FILTER filter,
+                                              D3D12_TEXTURE_ADDRESS_MODE addressModeU,
+                                              D3D12_TEXTURE_ADDRESS_MODE addressModeV);
+    void recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE*);
+
    sk_sp<GrD3DPipelineState> findOrCreateCompatiblePipelineState(GrRenderTarget*,
                                                                  const GrProgramInfo&);
 
@@ -76,7 +87,7 @@
     SkSTArray<4, std::unique_ptr<GrD3DDirectCommandList>> fAvailableDirectCommandLists;
     SkSTArray<4, sk_sp<GrD3DRootSignature>> fRootSignatures;
 
-    GrD3DAttachmentViewManager fAttachmentViewManager;
+    GrD3DCpuDescriptorManager fCpuDescriptorManager;
 
     std::unique_ptr<PipelineStateCache> fPipelineStateCache;
 };