blob: ca0bd3f86c6e0611a5f35a6bb7b356e2b6c0dc54 [file] [log] [blame]
//
// 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 "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
namespace rx
{
ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11PixelShader *executable)
: ShaderExecutableD3D(function, length)
{
mPixelExecutable = executable;
mVertexExecutable = nullptr;
mGeometryExecutable = nullptr;
mStreamOutExecutable = nullptr;
mComputeExecutable = nullptr;
}
ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11VertexShader *executable, ID3D11GeometryShader *streamOut)
: ShaderExecutableD3D(function, length)
{
mVertexExecutable = executable;
mPixelExecutable = nullptr;
mGeometryExecutable = nullptr;
mStreamOutExecutable = streamOut;
mComputeExecutable = nullptr;
}
ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11GeometryShader *executable)
: ShaderExecutableD3D(function, length)
{
mGeometryExecutable = executable;
mVertexExecutable = nullptr;
mPixelExecutable = nullptr;
mStreamOutExecutable = nullptr;
mComputeExecutable = nullptr;
}
ShaderExecutable11::ShaderExecutable11(const void *function,
size_t length,
ID3D11ComputeShader *executable)
: ShaderExecutableD3D(function, length)
{
mComputeExecutable = executable;
mPixelExecutable = nullptr;
mVertexExecutable = nullptr;
mGeometryExecutable = nullptr;
mStreamOutExecutable = nullptr;
}
ShaderExecutable11::~ShaderExecutable11()
{
SafeRelease(mVertexExecutable);
SafeRelease(mPixelExecutable);
SafeRelease(mGeometryExecutable);
SafeRelease(mStreamOutExecutable);
SafeRelease(mComputeExecutable);
}
ID3D11VertexShader *ShaderExecutable11::getVertexShader() const
{
return mVertexExecutable;
}
ID3D11PixelShader *ShaderExecutable11::getPixelShader() const
{
return mPixelExecutable;
}
ID3D11GeometryShader *ShaderExecutable11::getGeometryShader() const
{
return mGeometryExecutable;
}
ID3D11GeometryShader *ShaderExecutable11::getStreamOutShader() const
{
return mStreamOutExecutable;
}
ID3D11ComputeShader *ShaderExecutable11::getComputeShader() const
{
return mComputeExecutable;
}
UniformStorage11::UniformStorage11(Renderer11 *renderer, size_t initialSize)
: UniformStorageD3D(initialSize), mConstantBuffer(nullptr)
{
ID3D11Device *d3d11Device = renderer->getDevice();
if (initialSize > 0)
{
D3D11_BUFFER_DESC constantBufferDescription = {0};
constantBufferDescription.ByteWidth = static_cast<unsigned int>(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, nullptr, &mConstantBuffer);
ASSERT(SUCCEEDED(result));
}
}
UniformStorage11::~UniformStorage11()
{
SafeRelease(mConstantBuffer);
}
}