blob: 32f114af916ecd508b51bb90200a883e02e17eb8 [file] [log] [blame] [edit]
/*
* 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/GrGpuResourcePriv.h"
#include "src/gpu/d3d/GrD3DGpu.h"
#include "src/gpu/d3d/GrD3DResource.h"
void GrD3DResource::setResourceState(const GrD3DGpu* gpu,
D3D12_RESOURCE_STATES newResourceState) {
SkASSERT(fStateExplicitlySet);
/* TODO
* Something like:
D3D12_RESOURCE_STATES currentState = this->currentState();
gpu->addResourceTransitionBarrier(this->resource(), currentState, newResourceState);
*/
this->updateResourceState(newResourceState, true);
}
ID3D12Resource* GrD3DResource::CreateResource(GrD3DGpu* gpu, const D3D12_RESOURCE_DESC& desc,
D3D12_RESOURCE_STATES resourceState) {
ID3D12Resource* resource = nullptr;
// TODO: incorporate D3Dx12.h and use CD3DX12_HEAP_PROPERTIES instead?
D3D12_HEAP_PROPERTIES heapProperties = {
D3D12_HEAP_TYPE_DEFAULT,
D3D12_CPU_PAGE_PROPERTY_UNKNOWN,
D3D12_MEMORY_POOL_UNKNOWN,
1, // CreationNodeMask
1 // VisibleNodeMask
};
SkDEBUGCODE(HRESULT hr =) gpu->device()->CreateCommittedResource(
&heapProperties,
D3D12_HEAP_FLAG_NONE,
&desc,
resourceState,
nullptr,
IID_PPV_ARGS(&resource));
SkASSERT(SUCCEEDED(hr));
return resource;
}
GrD3DResource::~GrD3DResource() {
// should have been released first
SkASSERT(!fResource);
}
void GrD3DResource::releaseResource() {
if (fResource) {
fResource->Release();
fResource = nullptr;
}
}