/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "src/gpu/d3d/GrD3DPipelineStateDataManager.h" #include "src/gpu/d3d/GrD3DGpu.h" #include "src/gpu/d3d/GrD3DResourceProvider.h" GrD3DPipelineStateDataManager::GrD3DPipelineStateDataManager(const UniformInfoArray& uniforms, uint32_t uniformSize) : INHERITED(uniforms.count(), uniformSize) { // We must add uniforms in same order as the UniformInfoArray so that UniformHandles already // owned by other objects will still match up here. int i = 0; for (const auto& uniformInfo : uniforms.items()) { Uniform& uniform = fUniforms[i]; SkASSERT(GrShaderVar::kNonArray == uniformInfo.fVariable.getArrayCount() || uniformInfo.fVariable.getArrayCount() > 0); SkDEBUGCODE( uniform.fArrayCount = uniformInfo.fVariable.getArrayCount(); uniform.fType = uniformInfo.fVariable.getType(); ) uniform.fOffset = uniformInfo.fUBOOffset; ++i; } } D3D12_GPU_VIRTUAL_ADDRESS GrD3DPipelineStateDataManager::uploadConstants(GrD3DGpu* gpu) { if (fUniformsDirty) { fConstantBufferAddress = gpu->resourceProvider().uploadConstantData(fUniformData.get(), fUniformSize); fUniformsDirty = false; } return fConstantBufferAddress; }