1 //
2 // Copyright (c) 2012-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 // ShaderExecutable11.h: Defines a D3D11-specific class to contain shader
8 // executable implementation details.
9 
10 #ifndef LIBANGLE_RENDERER_D3D_D3D11_SHADEREXECUTABLE11_H_
11 #define LIBANGLE_RENDERER_D3D_D3D11_SHADEREXECUTABLE11_H_
12 
13 #include "libANGLE/renderer/d3d/ShaderExecutableD3D.h"
14 #include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
15 
16 namespace rx
17 {
18 class Renderer11;
19 class UniformStorage11;
20 
21 class ShaderExecutable11 : public ShaderExecutableD3D
22 {
23   public:
24     ShaderExecutable11(const void *function, size_t length, d3d11::PixelShader &&executable);
25     ShaderExecutable11(const void *function,
26                        size_t length,
27                        d3d11::VertexShader &&executable,
28                        d3d11::GeometryShader &&streamOut);
29     ShaderExecutable11(const void *function, size_t length, d3d11::GeometryShader &&executable);
30     ShaderExecutable11(const void *function, size_t length, d3d11::ComputeShader &&executable);
31 
32     ~ShaderExecutable11() override;
33 
34     const d3d11::PixelShader &getPixelShader() const;
35     const d3d11::VertexShader &getVertexShader() const;
36     const d3d11::GeometryShader &getGeometryShader() const;
37     const d3d11::GeometryShader &getStreamOutShader() const;
38     const d3d11::ComputeShader &getComputeShader() const;
39 
40   private:
41     d3d11::PixelShader mPixelExecutable;
42     d3d11::VertexShader mVertexExecutable;
43     d3d11::GeometryShader mGeometryExecutable;
44     d3d11::GeometryShader mStreamOutExecutable;
45     d3d11::ComputeShader mComputeExecutable;
46 };
47 
48 class UniformStorage11 : public UniformStorageD3D
49 {
50   public:
51     UniformStorage11(size_t initialSize);
52     ~UniformStorage11() override;
53 
54     gl::Error getConstantBuffer(Renderer11 *renderer, const d3d11::Buffer **bufferOut);
55 
56   private:
57     d3d11::Buffer mConstantBuffer;
58 };
59 
60 }  // namespace rx
61 
62 #endif // LIBANGLE_RENDERER_D3D_D3D11_SHADEREXECUTABLE11_H_
63