blob: 8393341269f3d6eec5d0662934bdc4aed7c6fec0 [file] [log] [blame]
ethannicholasb3058bd2016-07-01 08:22:01 -07001/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SKSL_PROGRAM
9#define SKSL_PROGRAM
10
11#include <vector>
12#include <memory>
13
ethannicholasdcfe6db2016-10-10 10:09:00 -070014#include "SkSLModifiers.h"
ethannicholasb3058bd2016-07-01 08:22:01 -070015#include "SkSLProgramElement.h"
ethannicholasd598f792016-07-25 10:08:54 -070016#include "SkSLSymbolTable.h"
ethannicholasb3058bd2016-07-01 08:22:01 -070017
18namespace SkSL {
19
20/**
21 * Represents a fully-digested program, ready for code generation.
22 */
23struct Program {
24 enum Kind {
25 kFragment_Kind,
26 kVertex_Kind
27 };
28
ethannicholasdcfe6db2016-10-10 10:09:00 -070029 Program(Kind kind,
30 Modifiers::Flag defaultPrecision,
31 std::vector<std::unique_ptr<ProgramElement>> elements,
ethannicholasd598f792016-07-25 10:08:54 -070032 std::shared_ptr<SymbolTable> symbols)
ethannicholasb3058bd2016-07-01 08:22:01 -070033 : fKind(kind)
ethannicholasdcfe6db2016-10-10 10:09:00 -070034 , fDefaultPrecision(defaultPrecision)
ethannicholasd598f792016-07-25 10:08:54 -070035 , fElements(std::move(elements))
36 , fSymbols(symbols) {}
ethannicholasb3058bd2016-07-01 08:22:01 -070037
38 Kind fKind;
ethannicholasdcfe6db2016-10-10 10:09:00 -070039 // FIXME handle different types; currently it assumes this is for floats
40 Modifiers::Flag fDefaultPrecision;
ethannicholasb3058bd2016-07-01 08:22:01 -070041 std::vector<std::unique_ptr<ProgramElement>> fElements;
ethannicholasd598f792016-07-25 10:08:54 -070042 std::shared_ptr<SymbolTable> fSymbols;
ethannicholasb3058bd2016-07-01 08:22:01 -070043};
44
45} // namespace
46
47#endif