ShaderExecutable11.cpp (3662B)
1 // 2 // Copyright 2012 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 12 #include "libANGLE/Context.h" 13 #include "libANGLE/renderer/d3d/d3d11/Context11.h" 14 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h" 15 16 namespace rx 17 { 18 19 ShaderExecutable11::ShaderExecutable11(const void *function, 20 size_t length, 21 d3d11::PixelShader &&executable) 22 : ShaderExecutableD3D(function, length), 23 mPixelExecutable(std::move(executable)), 24 mVertexExecutable(), 25 mGeometryExecutable(), 26 mStreamOutExecutable(), 27 mComputeExecutable() 28 {} 29 30 ShaderExecutable11::ShaderExecutable11(const void *function, 31 size_t length, 32 d3d11::VertexShader &&executable, 33 d3d11::GeometryShader &&streamOut) 34 : ShaderExecutableD3D(function, length), 35 mPixelExecutable(), 36 mVertexExecutable(std::move(executable)), 37 mGeometryExecutable(), 38 mStreamOutExecutable(std::move(streamOut)), 39 mComputeExecutable() 40 {} 41 42 ShaderExecutable11::ShaderExecutable11(const void *function, 43 size_t length, 44 d3d11::GeometryShader &&executable) 45 : ShaderExecutableD3D(function, length), 46 mPixelExecutable(), 47 mVertexExecutable(), 48 mGeometryExecutable(std::move(executable)), 49 mStreamOutExecutable(), 50 mComputeExecutable() 51 {} 52 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::~ShaderExecutable11() {} 65 66 const d3d11::VertexShader &ShaderExecutable11::getVertexShader() const 67 { 68 return mVertexExecutable; 69 } 70 71 const d3d11::PixelShader &ShaderExecutable11::getPixelShader() const 72 { 73 return mPixelExecutable; 74 } 75 76 const d3d11::GeometryShader &ShaderExecutable11::getGeometryShader() const 77 { 78 return mGeometryExecutable; 79 } 80 81 const d3d11::GeometryShader &ShaderExecutable11::getStreamOutShader() const 82 { 83 return mStreamOutExecutable; 84 } 85 86 const d3d11::ComputeShader &ShaderExecutable11::getComputeShader() const 87 { 88 return mComputeExecutable; 89 } 90 91 UniformStorage11::UniformStorage11(size_t initialSize) 92 : UniformStorageD3D(initialSize), mConstantBuffer() 93 {} 94 95 UniformStorage11::~UniformStorage11() {} 96 97 angle::Result UniformStorage11::getConstantBuffer(const gl::Context *context, 98 Renderer11 *renderer, 99 const d3d11::Buffer **bufferOut) 100 { 101 if (size() > 0 && !mConstantBuffer.valid()) 102 { 103 D3D11_BUFFER_DESC desc = {}; 104 desc.ByteWidth = static_cast<unsigned int>(size()); 105 desc.Usage = D3D11_USAGE_DEFAULT; 106 desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; 107 108 ANGLE_TRY( 109 renderer->allocateResource(GetImplAs<Context11>(context), desc, &mConstantBuffer)); 110 } 111 112 *bufferOut = &mConstantBuffer; 113 return angle::Result::Continue; 114 } 115 116 } // namespace rx