| #include "precompiled.h" |
| // |
| // Copyright (c) 2012-2014 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 "libGLESv2/renderer/d3d11/ShaderExecutable11.h" |
| |
| #include "libGLESv2/renderer/d3d11/Renderer11.h" |
| |
| namespace rx |
| { |
| |
| ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11PixelShader *executable) |
| : ShaderExecutable(function, length) |
| { |
| mPixelExecutable = executable; |
| mVertexExecutable = NULL; |
| mGeometryExecutable = NULL; |
| mStreamOutExecutable = NULL; |
| } |
| |
| ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11VertexShader *executable, ID3D11GeometryShader *streamOut) |
| : ShaderExecutable(function, length) |
| { |
| mVertexExecutable = executable; |
| mPixelExecutable = NULL; |
| mGeometryExecutable = NULL; |
| mStreamOutExecutable = streamOut; |
| } |
| |
| ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11GeometryShader *executable) |
| : ShaderExecutable(function, length) |
| { |
| mGeometryExecutable = executable; |
| mVertexExecutable = NULL; |
| mPixelExecutable = NULL; |
| mStreamOutExecutable = NULL; |
| } |
| |
| ShaderExecutable11::~ShaderExecutable11() |
| { |
| SafeRelease(mVertexExecutable); |
| SafeRelease(mPixelExecutable); |
| SafeRelease(mGeometryExecutable); |
| SafeRelease(mStreamOutExecutable); |
| } |
| |
| ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable) |
| { |
| ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable)); |
| return static_cast<ShaderExecutable11*>(executable); |
| } |
| |
| ID3D11VertexShader *ShaderExecutable11::getVertexShader() const |
| { |
| return mVertexExecutable; |
| } |
| |
| ID3D11PixelShader *ShaderExecutable11::getPixelShader() const |
| { |
| return mPixelExecutable; |
| } |
| |
| ID3D11GeometryShader *ShaderExecutable11::getGeometryShader() const |
| { |
| return mGeometryExecutable; |
| } |
| |
| ID3D11GeometryShader *ShaderExecutable11::getStreamOutShader() const |
| { |
| return mStreamOutExecutable; |
| } |
| |
| UniformStorage11::UniformStorage11(Renderer11 *renderer, size_t initialSize) |
| : UniformStorage(initialSize), |
| mConstantBuffer(NULL) |
| { |
| ID3D11Device *d3d11Device = renderer->getDevice(); |
| |
| if (initialSize > 0) |
| { |
| D3D11_BUFFER_DESC constantBufferDescription = {0}; |
| constantBufferDescription.ByteWidth = initialSize; |
| constantBufferDescription.Usage = D3D11_USAGE_DYNAMIC; |
| constantBufferDescription.BindFlags = D3D11_BIND_CONSTANT_BUFFER; |
| constantBufferDescription.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; |
| constantBufferDescription.MiscFlags = 0; |
| constantBufferDescription.StructureByteStride = 0; |
| |
| HRESULT result = d3d11Device->CreateBuffer(&constantBufferDescription, NULL, &mConstantBuffer); |
| UNUSED_ASSERTION_VARIABLE(result); |
| ASSERT(SUCCEEDED(result)); |
| } |
| } |
| |
| UniformStorage11::~UniformStorage11() |
| { |
| SafeRelease(mConstantBuffer); |
| } |
| |
| const UniformStorage11 *UniformStorage11::makeUniformStorage11(const UniformStorage *uniformStorage) |
| { |
| ASSERT(HAS_DYNAMIC_TYPE(const UniformStorage11*, uniformStorage)); |
| return static_cast<const UniformStorage11*>(uniformStorage); |
| } |
| |
| } |