| /* | |
| * 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/GrD3DCommandSignature.h" | |
| #include "src/gpu/d3d/GrD3DGpu.h" | |
| sk_sp<GrD3DCommandSignature> GrD3DCommandSignature::Make(GrD3DGpu* gpu, ForIndexed forIndexed, | |
| unsigned int slot) { | |
| bool indexed = (forIndexed == ForIndexed::kYes); | |
| D3D12_INDIRECT_ARGUMENT_DESC argumentDesc = {}; | |
| argumentDesc.Type = indexed ? D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED | |
| : D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; | |
| argumentDesc.VertexBuffer.Slot = slot; | |
| D3D12_COMMAND_SIGNATURE_DESC commandSigDesc = {}; | |
| commandSigDesc.ByteStride = indexed ? sizeof(D3D12_DRAW_INDEXED_ARGUMENTS) | |
| : sizeof(D3D12_DRAW_ARGUMENTS); | |
| commandSigDesc.NumArgumentDescs = 1; | |
| commandSigDesc.pArgumentDescs = &argumentDesc; | |
| commandSigDesc.NodeMask = 0; | |
| gr_cp<ID3D12CommandSignature> commandSig; | |
| HRESULT hr = gpu->device()->CreateCommandSignature(&commandSigDesc, nullptr, | |
| IID_PPV_ARGS(&commandSig)); | |
| if (!SUCCEEDED(hr)) { | |
| SkDebugf("Failed to create command signature.\n"); | |
| return nullptr; | |
| } | |
| return sk_sp<GrD3DCommandSignature>(new GrD3DCommandSignature(std::move(commandSig), | |
| forIndexed, slot)); | |
| } |