Home | History | Annotate | Download | only in d3d11
      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 "libGLESv2/renderer/d3d/d3d11/ShaderExecutable11.h"
     11 #include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
     12 
     13 namespace rx
     14 {
     15 
     16 ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11PixelShader *executable)
     17     : ShaderExecutable(function, length)
     18 {
     19     mPixelExecutable = executable;
     20     mVertexExecutable = NULL;
     21     mGeometryExecutable = NULL;
     22     mStreamOutExecutable = NULL;
     23 }
     24 
     25 ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11VertexShader *executable, ID3D11GeometryShader *streamOut)
     26     : ShaderExecutable(function, length)
     27 {
     28     mVertexExecutable = executable;
     29     mPixelExecutable = NULL;
     30     mGeometryExecutable = NULL;
     31     mStreamOutExecutable = streamOut;
     32 }
     33 
     34 ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11GeometryShader *executable)
     35     : ShaderExecutable(function, length)
     36 {
     37     mGeometryExecutable = executable;
     38     mVertexExecutable = NULL;
     39     mPixelExecutable = NULL;
     40     mStreamOutExecutable = NULL;
     41 }
     42 
     43 ShaderExecutable11::~ShaderExecutable11()
     44 {
     45     SafeRelease(mVertexExecutable);
     46     SafeRelease(mPixelExecutable);
     47     SafeRelease(mGeometryExecutable);
     48     SafeRelease(mStreamOutExecutable);
     49 }
     50 
     51 ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
     52 {
     53     ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable));
     54     return static_cast<ShaderExecutable11*>(executable);
     55 }
     56 
     57 ID3D11VertexShader *ShaderExecutable11::getVertexShader() const
     58 {
     59     return mVertexExecutable;
     60 }
     61 
     62 ID3D11PixelShader *ShaderExecutable11::getPixelShader() const
     63 {
     64     return mPixelExecutable;
     65 }
     66 
     67 ID3D11GeometryShader *ShaderExecutable11::getGeometryShader() const
     68 {
     69     return mGeometryExecutable;
     70 }
     71 
     72 ID3D11GeometryShader *ShaderExecutable11::getStreamOutShader() const
     73 {
     74     return mStreamOutExecutable;
     75 }
     76 
     77 UniformStorage11::UniformStorage11(Renderer11 *renderer, size_t initialSize)
     78     : UniformStorage(initialSize),
     79       mConstantBuffer(NULL)
     80 {
     81     ID3D11Device *d3d11Device = renderer->getDevice();
     82 
     83     if (initialSize > 0)
     84     {
     85         D3D11_BUFFER_DESC constantBufferDescription = {0};
     86         constantBufferDescription.ByteWidth = initialSize;
     87         constantBufferDescription.Usage = D3D11_USAGE_DYNAMIC;
     88         constantBufferDescription.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
     89         constantBufferDescription.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
     90         constantBufferDescription.MiscFlags = 0;
     91         constantBufferDescription.StructureByteStride = 0;
     92 
     93         HRESULT result = d3d11Device->CreateBuffer(&constantBufferDescription, NULL, &mConstantBuffer);
     94         UNUSED_ASSERTION_VARIABLE(result);
     95         ASSERT(SUCCEEDED(result));
     96     }
     97 }
     98 
     99 UniformStorage11::~UniformStorage11()
    100 {
    101     SafeRelease(mConstantBuffer);
    102 }
    103 
    104 const UniformStorage11 *UniformStorage11::makeUniformStorage11(const UniformStorage *uniformStorage)
    105 {
    106     ASSERT(HAS_DYNAMIC_TYPE(const UniformStorage11*, uniformStorage));
    107     return static_cast<const UniformStorage11*>(uniformStorage);
    108 }
    109 
    110 }
    111