// // Copyright 2012 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ShaderExecutable11.cpp: Implements a D3D11-specific class to contain shader // executable implementation details. #include "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h" #include "libANGLE/Context.h" #include "libANGLE/renderer/d3d/d3d11/Context11.h" #include "libANGLE/renderer/d3d/d3d11/Renderer11.h" namespace rx { ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, d3d11::PixelShader &&executable) : ShaderExecutableD3D(function, length), mPixelExecutable(std::move(executable)), mVertexExecutable(), mGeometryExecutable(), mStreamOutExecutable(), mComputeExecutable() {} ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, d3d11::VertexShader &&executable, d3d11::GeometryShader &&streamOut) : ShaderExecutableD3D(function, length), mPixelExecutable(), mVertexExecutable(std::move(executable)), mGeometryExecutable(), mStreamOutExecutable(std::move(streamOut)), mComputeExecutable() {} ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, d3d11::GeometryShader &&executable) : ShaderExecutableD3D(function, length), mPixelExecutable(), mVertexExecutable(), mGeometryExecutable(std::move(executable)), mStreamOutExecutable(), mComputeExecutable() {} ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, d3d11::ComputeShader &&executable) : ShaderExecutableD3D(function, length), mPixelExecutable(), mVertexExecutable(), mGeometryExecutable(), mStreamOutExecutable(), mComputeExecutable(std::move(executable)) {} ShaderExecutable11::~ShaderExecutable11() {} const d3d11::VertexShader &ShaderExecutable11::getVertexShader() const { return mVertexExecutable; } const d3d11::PixelShader &ShaderExecutable11::getPixelShader() const { return mPixelExecutable; } const d3d11::GeometryShader &ShaderExecutable11::getGeometryShader() const { return mGeometryExecutable; } const d3d11::GeometryShader &ShaderExecutable11::getStreamOutShader() const { return mStreamOutExecutable; } const d3d11::ComputeShader &ShaderExecutable11::getComputeShader() const { return mComputeExecutable; } UniformStorage11::UniformStorage11(size_t initialSize) : UniformStorageD3D(initialSize), mConstantBuffer() {} UniformStorage11::~UniformStorage11() {} angle::Result UniformStorage11::getConstantBuffer(const gl::Context *context, Renderer11 *renderer, const d3d11::Buffer **bufferOut) { if (size() > 0 && !mConstantBuffer.valid()) { D3D11_BUFFER_DESC desc = {}; desc.ByteWidth = static_cast(size()); desc.Usage = D3D11_USAGE_DEFAULT; desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; ANGLE_TRY( renderer->allocateResource(GetImplAs(context), desc, &mConstantBuffer)); } *bufferOut = &mConstantBuffer; return angle::Result::Continue; } } // namespace rx