1bdf2d80f459d43f5a6df074431bacf41584f81b7shannon.woods@transgaming.com#include "precompiled.h"
2d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com//
3358e88d786a5c48b45a28454861b7018ec39c95fshannon.woods@transgaming.com// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
4d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
5d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com// found in the LICENSE file.
6d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com//
7d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
8d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com// ShaderExecutable9.cpp: Implements a D3D9-specific class to contain shader
9d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com// executable implementation details.
10d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
11d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com#include "libGLESv2/renderer/ShaderExecutable9.h"
12d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
13d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com#include "common/debug.h"
14d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
15d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.comnamespace rx
16d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
17d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
182275f9159895aefa0b9ae7deff08bc40b6f6ede8daniel@transgaming.comShaderExecutable9::ShaderExecutable9(const void *function, size_t length, IDirect3DPixelShader9 *executable)
197b18d0c45c43e19d2501a33f7f3c5bb66bf91f36daniel@transgaming.com    : ShaderExecutable(function, length)
20d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
21d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    mPixelExecutable = executable;
22d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    mVertexExecutable = NULL;
23d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
24d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
252275f9159895aefa0b9ae7deff08bc40b6f6ede8daniel@transgaming.comShaderExecutable9::ShaderExecutable9(const void *function, size_t length, IDirect3DVertexShader9 *executable)
267b18d0c45c43e19d2501a33f7f3c5bb66bf91f36daniel@transgaming.com    : ShaderExecutable(function, length)
27d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
28d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    mVertexExecutable = executable;
29d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    mPixelExecutable = NULL;
30d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
31d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
32d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.comShaderExecutable9::~ShaderExecutable9()
33d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
34d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    if (mVertexExecutable)
35d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    {
36d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com        mVertexExecutable->Release();
37d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    }
38d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    if (mPixelExecutable)
39d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    {
40d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com        mPixelExecutable->Release();
41d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    }
42d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
43d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
44d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.comShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
45d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
468b400b1e8d84c5b93dd151807504a3e4b90d1b21apatrick@chromium.org    ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable9*, executable));
47d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    return static_cast<ShaderExecutable9*>(executable);
48d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
49d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
50358e88d786a5c48b45a28454861b7018ec39c95fshannon.woods@transgaming.comIDirect3DVertexShader9 *ShaderExecutable9::getVertexShader() const
51d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
52d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    return mVertexExecutable;
53d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
54d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
55358e88d786a5c48b45a28454861b7018ec39c95fshannon.woods@transgaming.comIDirect3DPixelShader9 *ShaderExecutable9::getPixelShader() const
56d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com{
57d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com    return mPixelExecutable;
58d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}
59d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com
60d5d1019770f0de5dc1d8b356fa1df48019204378daniel@transgaming.com}