blob: ede5c5769010ecffc2a4a4b733248eb458ef3662 [file] [log] [blame]
Brandon Jonesc9610c52014-08-25 17:02:59 -07001//
2// Copyright 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// ProgramImpl.h: Defines the abstract rx::ProgramImpl class.
8
9#ifndef LIBGLESV2_RENDERER_PROGRAMIMPL_H_
10#define LIBGLESV2_RENDERER_PROGRAMIMPL_H_
11
12#include "common/angleutils.h"
Brandon Jones22502d52014-08-29 16:58:36 -070013#include "libGLESv2/BinaryStream.h"
Brandon Jonesc9610c52014-08-25 17:02:59 -070014#include "libGLESv2/Constants.h"
15#include "libGLESv2/ProgramBinary.h"
Brandon Jones18bd4102014-09-22 14:21:44 -070016#include "libGLESv2/renderer/Renderer.h"
Brandon Jonesc9610c52014-08-25 17:02:59 -070017
18namespace rx
19{
20
Brandon Jonesc9610c52014-08-25 17:02:59 -070021class Renderer;
22
23class ProgramImpl
24{
25public:
26 virtual ~ProgramImpl() { }
27
Brandon Jones44151a92014-09-10 11:32:25 -070028 virtual bool usesPointSize() const = 0;
Brandon Jones44151a92014-09-10 11:32:25 -070029 virtual int getShaderVersion() const = 0;
Brandon Joneseb994362014-09-24 10:27:28 -070030 virtual GLenum getTransformFeedbackBufferMode() const = 0;
31 virtual std::vector<gl::LinkedVarying> &getTransformFeedbackLinkedVaryings() = 0;
32 virtual sh::Attribute *getShaderAttributes() = 0;
Brandon Jones44151a92014-09-10 11:32:25 -070033
Brandon Jones22502d52014-08-29 16:58:36 -070034 virtual GLenum getBinaryFormat() = 0;
35 virtual bool load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) = 0;
36 virtual bool save(gl::BinaryOutputStream *stream) = 0;
37
Brandon Joneseb994362014-09-24 10:27:28 -070038 virtual bool compileProgramExecutables(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
39 int registers) = 0;
Brandon Jones22502d52014-08-29 16:58:36 -070040
41 virtual bool link(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
Brandon Joneseb994362014-09-24 10:27:28 -070042 const std::vector<std::string> &transformFeedbackVaryings, GLenum transformFeedbackBufferMode,
43 int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
44 std::map<int, gl::VariableLocation> *outputVariables, const gl::Caps &caps) = 0;
Brandon Jones44151a92014-09-10 11:32:25 -070045
Brandon Jonesc9610c52014-08-25 17:02:59 -070046 virtual void initializeUniformStorage(const std::vector<gl::LinkedUniform*> &uniforms) = 0;
47
Brandon Jones18bd4102014-09-22 14:21:44 -070048 virtual gl::Error applyUniforms(const std::vector<gl::LinkedUniform*> &uniforms) = 0;
49 virtual gl::Error applyUniformBuffers(const std::vector<gl::UniformBlock*> uniformBlocks, const std::vector<gl::Buffer*> boundBuffers,
50 const gl::Caps &caps) = 0;
51 virtual bool assignUniformBlockRegister(gl::InfoLog &infoLog, gl::UniformBlock *uniformBlock, GLenum shader,
52 unsigned int registerIndex, const gl::Caps &caps) = 0;
53 virtual unsigned int getReservedUniformVectors(GLenum shader) = 0;
54
Brandon Jonesc9610c52014-08-25 17:02:59 -070055 virtual void reset() = 0;
56};
57
58}
59
60#endif // LIBGLESV2_RENDERER_PROGRAMIMPL_H_