blob: 5bd448620be0a2f821cec7fdf67825bc2f507557 [file] [log] [blame]
daniel@transgaming.comd5d10192012-11-28 20:57:55 +00001//
2// Copyright (c) 2012 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// ShaderExecutable9.cpp: Implements a D3D9-specific class to contain shader
8// executable implementation details.
9
10#include "libGLESv2/renderer/ShaderExecutable9.h"
11
12#include "common/debug.h"
13
14namespace rx
15{
16
17ShaderExecutable9::ShaderExecutable9(IDirect3DPixelShader9 *executable, gl::D3DConstantTable *constantTable)
18{
19 mPixelExecutable = executable;
20 mVertexExecutable = NULL;
21 mConstantTable = constantTable;
22}
23
24ShaderExecutable9::ShaderExecutable9(IDirect3DVertexShader9 *executable, gl::D3DConstantTable *constantTable)
25{
26 mVertexExecutable = executable;
27 mPixelExecutable = NULL;
28 mConstantTable = constantTable;
29}
30
31ShaderExecutable9::~ShaderExecutable9()
32{
33 if (mVertexExecutable)
34 {
35 mVertexExecutable->Release();
36 }
37 if (mPixelExecutable)
38 {
39 mPixelExecutable->Release();
40 }
41
42 delete mConstantTable;
43}
44
45ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
46{
47 ASSERT(dynamic_cast<ShaderExecutable9*>(executable) != NULL);
48 return static_cast<ShaderExecutable9*>(executable);
49}
50
51IDirect3DVertexShader9 *ShaderExecutable9::getVertexShader()
52{
53 // Caller is responsible for releasing the returned shader reference.
54 if (mVertexExecutable)
55 {
56 mVertexExecutable->AddRef();
57 }
58
59 return mVertexExecutable;
60}
61
62IDirect3DPixelShader9 *ShaderExecutable9::getPixelShader()
63{
64 // Caller is responsible for releasing the returned shader reference.
65 if (mPixelExecutable)
66 {
67 mPixelExecutable->AddRef();
68 }
69
70 return mPixelExecutable;
71}
72
73gl::D3DConstantTable *ShaderExecutable9::getConstantTable()
74{
75 return mConstantTable;
76}
77
78}