blob: 61286fbf496ccc73c4636ef7730da2f3d5e64754 [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.com813bb782012-11-28 21:03:30 +00002//
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +00003// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com813bb782012-11-28 21:03:30 +00004// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// ShaderExecutable11.cpp: Implements a D3D11-specific class to contain shader
9// executable implementation details.
10
11#include "libGLESv2/renderer/ShaderExecutable11.h"
12
13#include "common/debug.h"
14
15namespace rx
16{
17
daniel@transgaming.com7b18d0c2012-11-28 21:04:10 +000018ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11PixelShader *executable)
19 : ShaderExecutable(function, length)
daniel@transgaming.com813bb782012-11-28 21:03:30 +000020{
21 mPixelExecutable = executable;
22 mVertexExecutable = NULL;
shannon.woods@transgaming.com3e773bb2013-01-25 21:55:47 +000023 mGeometryExecutable = NULL;
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000024
25 mConstantBuffer = NULL;
daniel@transgaming.com813bb782012-11-28 21:03:30 +000026}
27
daniel@transgaming.com7b18d0c2012-11-28 21:04:10 +000028ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11VertexShader *executable)
29 : ShaderExecutable(function, length)
daniel@transgaming.com813bb782012-11-28 21:03:30 +000030{
31 mVertexExecutable = executable;
32 mPixelExecutable = NULL;
shannon.woods@transgaming.com3e773bb2013-01-25 21:55:47 +000033 mGeometryExecutable = NULL;
34
35 mConstantBuffer = NULL;
36}
37
38ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D11GeometryShader *executable)
39 : ShaderExecutable(function, length)
40{
41 mGeometryExecutable = executable;
42 mVertexExecutable = NULL;
43 mPixelExecutable = NULL;
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000044
45 mConstantBuffer = NULL;
daniel@transgaming.com813bb782012-11-28 21:03:30 +000046}
47
48ShaderExecutable11::~ShaderExecutable11()
49{
Geoff Langea228632013-07-30 15:17:12 -040050 SafeRelease(mVertexExecutable);
51 SafeRelease(mPixelExecutable);
52 SafeRelease(mGeometryExecutable);
53
54 SafeRelease(mConstantBuffer);
daniel@transgaming.com813bb782012-11-28 21:03:30 +000055}
56
57ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
58{
apatrick@chromium.org8b400b12013-01-30 21:53:40 +000059 ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable));
daniel@transgaming.com813bb782012-11-28 21:03:30 +000060 return static_cast<ShaderExecutable11*>(executable);
61}
62
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000063ID3D11VertexShader *ShaderExecutable11::getVertexShader() const
daniel@transgaming.com813bb782012-11-28 21:03:30 +000064{
65 return mVertexExecutable;
66}
67
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000068ID3D11PixelShader *ShaderExecutable11::getPixelShader() const
daniel@transgaming.com813bb782012-11-28 21:03:30 +000069{
70 return mPixelExecutable;
71}
72
shannon.woods@transgaming.com3e773bb2013-01-25 21:55:47 +000073ID3D11GeometryShader *ShaderExecutable11::getGeometryShader() const
74{
75 return mGeometryExecutable;
76}
77
shannon.woods@transgaming.com5929ef22013-01-25 21:53:24 +000078ID3D11Buffer *ShaderExecutable11::getConstantBuffer(ID3D11Device *device, unsigned int registerCount)
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000079{
shannon.woods@transgaming.com5929ef22013-01-25 21:53:24 +000080 if (!mConstantBuffer && registerCount > 0)
81 {
82 D3D11_BUFFER_DESC constantBufferDescription = {0};
83 constantBufferDescription.ByteWidth = registerCount * sizeof(float[4]);
shannon.woods@transgaming.com09bf2a72013-02-28 23:12:54 +000084 constantBufferDescription.Usage = D3D11_USAGE_DYNAMIC;
shannon.woods@transgaming.com5929ef22013-01-25 21:53:24 +000085 constantBufferDescription.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
shannon.woods@transgaming.com09bf2a72013-02-28 23:12:54 +000086 constantBufferDescription.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
shannon.woods@transgaming.com5929ef22013-01-25 21:53:24 +000087 constantBufferDescription.MiscFlags = 0;
88 constantBufferDescription.StructureByteStride = 0;
89
90 HRESULT result = device->CreateBuffer(&constantBufferDescription, NULL, &mConstantBuffer);
91 ASSERT(SUCCEEDED(result));
92 }
93
shannon.woods@transgaming.com358e88d2013-01-25 21:53:11 +000094 return mConstantBuffer;
95}
96
daniel@transgaming.com813bb782012-11-28 21:03:30 +000097}