1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci* Copyright 2016 Google Inc. 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/GrD3DPipelineStateDataManager.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "src/gpu/d3d/GrD3DGpu.h" 11cb93a386Sopenharmony_ci#include "src/gpu/d3d/GrD3DResourceProvider.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ciGrD3DPipelineStateDataManager::GrD3DPipelineStateDataManager(const UniformInfoArray& uniforms, 14cb93a386Sopenharmony_ci uint32_t uniformSize) 15cb93a386Sopenharmony_ci : INHERITED(uniforms.count(), uniformSize) { 16cb93a386Sopenharmony_ci // We must add uniforms in same order as the UniformInfoArray so that UniformHandles already 17cb93a386Sopenharmony_ci // owned by other objects will still match up here. 18cb93a386Sopenharmony_ci int i = 0; 19cb93a386Sopenharmony_ci for (const auto& uniformInfo : uniforms.items()) { 20cb93a386Sopenharmony_ci Uniform& uniform = fUniforms[i]; 21cb93a386Sopenharmony_ci SkASSERT(GrShaderVar::kNonArray == uniformInfo.fVariable.getArrayCount() || 22cb93a386Sopenharmony_ci uniformInfo.fVariable.getArrayCount() > 0); 23cb93a386Sopenharmony_ci SkDEBUGCODE( 24cb93a386Sopenharmony_ci uniform.fArrayCount = uniformInfo.fVariable.getArrayCount(); 25cb93a386Sopenharmony_ci uniform.fType = uniformInfo.fVariable.getType(); 26cb93a386Sopenharmony_ci ) 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci uniform.fOffset = uniformInfo.fUBOOffset; 29cb93a386Sopenharmony_ci ++i; 30cb93a386Sopenharmony_ci } 31cb93a386Sopenharmony_ci} 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ciD3D12_GPU_VIRTUAL_ADDRESS GrD3DPipelineStateDataManager::uploadConstants(GrD3DGpu* gpu) { 34cb93a386Sopenharmony_ci if (fUniformsDirty) { 35cb93a386Sopenharmony_ci fConstantBufferAddress = gpu->resourceProvider().uploadConstantData(fUniformData.get(), 36cb93a386Sopenharmony_ci fUniformSize); 37cb93a386Sopenharmony_ci fUniformsDirty = false; 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci return fConstantBufferAddress; 41cb93a386Sopenharmony_ci} 42