1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 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 "experimental/graphite/src/Recorder.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "experimental/graphite/include/Context.h" 11cb93a386Sopenharmony_ci#include "experimental/graphite/src/CommandBuffer.h" 12cb93a386Sopenharmony_ci#include "experimental/graphite/src/ContextPriv.h" 13cb93a386Sopenharmony_ci#include "experimental/graphite/src/DrawBufferManager.h" 14cb93a386Sopenharmony_ci#include "experimental/graphite/src/Gpu.h" 15cb93a386Sopenharmony_ci#include "experimental/graphite/src/ProgramCache.h" 16cb93a386Sopenharmony_ci#include "experimental/graphite/src/Recording.h" 17cb93a386Sopenharmony_ci#include "experimental/graphite/src/ResourceProvider.h" 18cb93a386Sopenharmony_ci#include "experimental/graphite/src/UniformCache.h" 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cinamespace skgpu { 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciRecorder::Recorder(sk_sp<Context> context) 23cb93a386Sopenharmony_ci : fContext(std::move(context)) 24cb93a386Sopenharmony_ci , fProgramCache(new ProgramCache) 25cb93a386Sopenharmony_ci , fUniformCache(new UniformCache) 26cb93a386Sopenharmony_ci // TODO: Is '4' the correct initial alignment? 27cb93a386Sopenharmony_ci , fDrawBufferManager(new DrawBufferManager(fContext->priv().gpu()->resourceProvider(), 4)) { 28cb93a386Sopenharmony_ci} 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ciRecorder::~Recorder() {} 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ciContext* Recorder::context() const { 33cb93a386Sopenharmony_ci return fContext.get(); 34cb93a386Sopenharmony_ci} 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ciProgramCache* Recorder::programCache() { 37cb93a386Sopenharmony_ci return fProgramCache.get(); 38cb93a386Sopenharmony_ci} 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ciUniformCache* Recorder::uniformCache() { 41cb93a386Sopenharmony_ci return fUniformCache.get(); 42cb93a386Sopenharmony_ci} 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ciDrawBufferManager* Recorder::drawBufferManager() { 45cb93a386Sopenharmony_ci return fDrawBufferManager.get(); 46cb93a386Sopenharmony_ci} 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_civoid Recorder::add(sk_sp<Task> task) { 49cb93a386Sopenharmony_ci fGraph.add(std::move(task)); 50cb93a386Sopenharmony_ci} 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_cistd::unique_ptr<Recording> Recorder::snap() { 53cb93a386Sopenharmony_ci auto gpu = fContext->priv().gpu(); 54cb93a386Sopenharmony_ci auto commandBuffer = gpu->resourceProvider()->createCommandBuffer(); 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ci fGraph.addCommands(gpu->resourceProvider(), commandBuffer.get()); 57cb93a386Sopenharmony_ci fDrawBufferManager->transferToCommandBuffer(commandBuffer.get()); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci fGraph.reset(); 60cb93a386Sopenharmony_ci return std::unique_ptr<Recording>(new Recording(std::move(commandBuffer))); 61cb93a386Sopenharmony_ci} 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ci} // namespace skgpu 64