blob: 2a52e9f4721183fab97a5104ba2c2e7c4ba6b425 [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"
16
17namespace rx
18{
19
Brandon Jonesc9610c52014-08-25 17:02:59 -070020class Renderer;
21
22class ProgramImpl
23{
24public:
25 virtual ~ProgramImpl() { }
26
27 // TODO: Temporary interfaces to ease migration. Remove soon!
28 virtual Renderer *getRenderer() = 0;
Brandon Jones22502d52014-08-29 16:58:36 -070029 virtual const std::vector<rx::PixelShaderOutputVariable> &getPixelShaderKey() = 0;
30
Brandon Jones44151a92014-09-10 11:32:25 -070031 virtual bool usesPointSize() const = 0;
32 virtual bool usesGeometryShader() const = 0;
33 virtual int getShaderVersion() const = 0;
34
Brandon Jones22502d52014-08-29 16:58:36 -070035 virtual GLenum getBinaryFormat() = 0;
36 virtual bool load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) = 0;
37 virtual bool save(gl::BinaryOutputStream *stream) = 0;
38
39 virtual rx::ShaderExecutable *getPixelExecutableForOutputLayout(gl::InfoLog &infoLog, const std::vector<GLenum> &outputSignature,
40 const std::vector<gl::LinkedVarying> &transformFeedbackLinkedVaryings,
41 bool separatedOutputBuffers) = 0;
42 virtual rx::ShaderExecutable *getVertexExecutableForInputLayout(gl::InfoLog &infoLog,
43 const gl::VertexFormat inputLayout[gl::MAX_VERTEX_ATTRIBS],
44 const sh::Attribute shaderAttributes[],
45 const std::vector<gl::LinkedVarying> &transformFeedbackLinkedVaryings,
46 bool separatedOutputBuffers) = 0;
Brandon Jones44151a92014-09-10 11:32:25 -070047 virtual rx::ShaderExecutable *getGeometryExecutable(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
48 const std::vector<gl::LinkedVarying> &transformFeedbackLinkedVaryings,
49 bool separatedOutputBuffers, int registers) = 0;
Brandon Jones22502d52014-08-29 16:58:36 -070050
51 virtual bool link(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
52 const std::vector<std::string> &transformFeedbackVaryings, int *registers,
53 std::vector<gl::LinkedVarying> *linkedVaryings, std::map<int,
54 gl::VariableLocation> *outputVariables) = 0;
55
Brandon Jones44151a92014-09-10 11:32:25 -070056 virtual void getInputLayoutSignature(const gl::VertexFormat inputLayout[], GLenum signature[]) const = 0;
57
Brandon Jonesc9610c52014-08-25 17:02:59 -070058 virtual void initializeUniformStorage(const std::vector<gl::LinkedUniform*> &uniforms) = 0;
59
60 virtual void reset() = 0;
61};
62
63}
64
65#endif // LIBGLESV2_RENDERER_PROGRAMIMPL_H_