1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2020 Google LLC 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/gpu/d3d/GrD3DCommandSignature.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "src/gpu/d3d/GrD3DGpu.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_cisk_sp<GrD3DCommandSignature> GrD3DCommandSignature::Make(GrD3DGpu* gpu, ForIndexed forIndexed, 13cb93a386Sopenharmony_ci unsigned int slot) { 14cb93a386Sopenharmony_ci bool indexed = (forIndexed == ForIndexed::kYes); 15cb93a386Sopenharmony_ci D3D12_INDIRECT_ARGUMENT_DESC argumentDesc = {}; 16cb93a386Sopenharmony_ci argumentDesc.Type = indexed ? D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED 17cb93a386Sopenharmony_ci : D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; 18cb93a386Sopenharmony_ci argumentDesc.VertexBuffer.Slot = slot; 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci D3D12_COMMAND_SIGNATURE_DESC commandSigDesc = {}; 21cb93a386Sopenharmony_ci commandSigDesc.ByteStride = indexed ? sizeof(D3D12_DRAW_INDEXED_ARGUMENTS) 22cb93a386Sopenharmony_ci : sizeof(D3D12_DRAW_ARGUMENTS); 23cb93a386Sopenharmony_ci commandSigDesc.NumArgumentDescs = 1; 24cb93a386Sopenharmony_ci commandSigDesc.pArgumentDescs = &argumentDesc; 25cb93a386Sopenharmony_ci commandSigDesc.NodeMask = 0; 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci gr_cp<ID3D12CommandSignature> commandSig; 28cb93a386Sopenharmony_ci HRESULT hr = gpu->device()->CreateCommandSignature(&commandSigDesc, nullptr, 29cb93a386Sopenharmony_ci IID_PPV_ARGS(&commandSig)); 30cb93a386Sopenharmony_ci if (!SUCCEEDED(hr)) { 31cb93a386Sopenharmony_ci SkDebugf("Failed to create command signature.\n"); 32cb93a386Sopenharmony_ci return nullptr; 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci return sk_sp<GrD3DCommandSignature>(new GrD3DCommandSignature(std::move(commandSig), 36cb93a386Sopenharmony_ci forIndexed, slot)); 37cb93a386Sopenharmony_ci} 38