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.cpp: Implements a D3D11-specific class to contain shader
8 // executable implementation details.
9
10 #include "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h"
11 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
12
13 namespace rx
14 {
15
ShaderExecutable11(const void * function,size_t length,d3d11::PixelShader && executable)16 ShaderExecutable11::ShaderExecutable11(const void *function,
17 size_t length,
18 d3d11::PixelShader &&executable)
19 : ShaderExecutableD3D(function, length),
20 mPixelExecutable(std::move(executable)),
21 mVertexExecutable(),
22 mGeometryExecutable(),
23 mStreamOutExecutable(),
24 mComputeExecutable()
25 {
26 }
27
ShaderExecutable11(const void * function,size_t length,d3d11::VertexShader && executable,d3d11::GeometryShader && streamOut)28 ShaderExecutable11::ShaderExecutable11(const void *function,
29 size_t length,
30 d3d11::VertexShader &&executable,
31 d3d11::GeometryShader &&streamOut)
32 : ShaderExecutableD3D(function, length),
33 mPixelExecutable(),
34 mVertexExecutable(std::move(executable)),
35 mGeometryExecutable(),
36 mStreamOutExecutable(std::move(streamOut)),
37 mComputeExecutable()
38 {
39 }
40
ShaderExecutable11(const void * function,size_t length,d3d11::GeometryShader && executable)41 ShaderExecutable11::ShaderExecutable11(const void *function,
42 size_t length,
43 d3d11::GeometryShader &&executable)
44 : ShaderExecutableD3D(function, length),
45 mPixelExecutable(),
46 mVertexExecutable(),
47 mGeometryExecutable(std::move(executable)),
48 mStreamOutExecutable(),
49 mComputeExecutable()
50 {
51 }
52
ShaderExecutable11(const void * function,size_t length,d3d11::ComputeShader && executable)53 ShaderExecutable11::ShaderExecutable11(const void *function,
54 size_t length,
55 d3d11::ComputeShader &&executable)
56 : ShaderExecutableD3D(function, length),
57 mPixelExecutable(),
58 mVertexExecutable(),
59 mGeometryExecutable(),
60 mStreamOutExecutable(),
61 mComputeExecutable(std::move(executable))
62 {
63 }
64
~ShaderExecutable11()65 ShaderExecutable11::~ShaderExecutable11()
66 {
67 }
68
getVertexShader() const69 const d3d11::VertexShader &ShaderExecutable11::getVertexShader() const
70 {
71 return mVertexExecutable;
72 }
73
getPixelShader() const74 const d3d11::PixelShader &ShaderExecutable11::getPixelShader() const
75 {
76 return mPixelExecutable;
77 }
78
getGeometryShader() const79 const d3d11::GeometryShader &ShaderExecutable11::getGeometryShader() const
80 {
81 return mGeometryExecutable;
82 }
83
getStreamOutShader() const84 const d3d11::GeometryShader &ShaderExecutable11::getStreamOutShader() const
85 {
86 return mStreamOutExecutable;
87 }
88
getComputeShader() const89 const d3d11::ComputeShader &ShaderExecutable11::getComputeShader() const
90 {
91 return mComputeExecutable;
92 }
93
UniformStorage11(size_t initialSize)94 UniformStorage11::UniformStorage11(size_t initialSize)
95 : UniformStorageD3D(initialSize), mConstantBuffer()
96 {
97 }
98
~UniformStorage11()99 UniformStorage11::~UniformStorage11()
100 {
101 }
102
getConstantBuffer(Renderer11 * renderer,const d3d11::Buffer ** bufferOut)103 gl::Error UniformStorage11::getConstantBuffer(Renderer11 *renderer, const d3d11::Buffer **bufferOut)
104 {
105 if (size() > 0 && !mConstantBuffer.valid())
106 {
107 D3D11_BUFFER_DESC desc = {0};
108 desc.ByteWidth = static_cast<unsigned int>(size());
109 desc.Usage = D3D11_USAGE_DEFAULT;
110 desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
111
112 ANGLE_TRY(renderer->allocateResource(desc, &mConstantBuffer));
113 }
114
115 *bufferOut = &mConstantBuffer;
116 return gl::NoError();
117 }
118
119 } // namespace rx
120