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#ifndef skgpu_UniformManager_DEFINED 9cb93a386Sopenharmony_ci#define skgpu_UniformManager_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "experimental/graphite/src/DrawTypes.h" 12cb93a386Sopenharmony_ci#include "experimental/graphite/src/Uniform.h" 13cb93a386Sopenharmony_ci#include "include/core/SkSpan.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_cinamespace skgpu { 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_cienum class Layout { 18cb93a386Sopenharmony_ci kStd140, 19cb93a386Sopenharmony_ci kStd430, 20cb93a386Sopenharmony_ci kMetal, /** This is our own self-imposed layout we use for Metal. */ 21cb93a386Sopenharmony_ci}; 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ciclass UniformManager { 24cb93a386Sopenharmony_cipublic: 25cb93a386Sopenharmony_ci UniformManager(Layout layout); 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci /* 28cb93a386Sopenharmony_ci * Use the uniform 'definitions' to write the data in 'srcs' into 'dst' (if it is non-null). 29cb93a386Sopenharmony_ci * If non-null, 'offsets' is filled in with the offset of each uniform w/in 'dst'. The 30cb93a386Sopenharmony_ci * number of bytes that was written (or would've been written) to 'dst' is returned. 31cb93a386Sopenharmony_ci * In practice one should call: 32cb93a386Sopenharmony_ci * auto bytes = writeUniforms(definitions, nullptr, nullptr, nullptr); 33cb93a386Sopenharmony_ci * // allocate dst and offsets memory 34cb93a386Sopenharmony_ci * writeUniforms(definitions, src, offsets, dst); 35cb93a386Sopenharmony_ci */ 36cb93a386Sopenharmony_ci uint32_t writeUniforms(SkSpan<const Uniform> definitions, 37cb93a386Sopenharmony_ci void** srcs, 38cb93a386Sopenharmony_ci uint32_t* offsets, 39cb93a386Sopenharmony_ci void *dst); 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ciprivate: 42cb93a386Sopenharmony_ci SLType getUniformTypeForLayout(SLType type); 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci Layout fLayout; 45cb93a386Sopenharmony_ci}; 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci} // namespace skgpu 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci#endif // skgpu_UniformManager_DEFINED 50