1b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com//
2b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
4b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com// found in the LICENSE file.
5b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com//
6b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
7b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com// RenderTarget11.cpp: Implements a DX11-specific wrapper for ID3D11View pointers
8b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com// retained by Renderbuffers.
9b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
10c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d11/RenderTarget11.h"
11c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
12c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
13c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
14b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com#include "libGLESv2/main.h"
15b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
16b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.comnamespace rx
17b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com{
18b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
1927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.comstatic bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLevels, unsigned int *samples)
2027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com{
2127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    ID3D11Texture1D *texture1D = d3d11::DynamicCastComObject<ID3D11Texture1D>(resource);
2227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    if (texture1D)
2327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    {
2427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        D3D11_TEXTURE1D_DESC texDesc;
2527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        texture1D->GetDesc(&texDesc);
26ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang        SafeRelease(texture1D);
2727ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
2827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *mipLevels = texDesc.MipLevels;
2927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *samples = 0;
3027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
3127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        return true;
3227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    }
3327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
3427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    ID3D11Texture2D *texture2D = d3d11::DynamicCastComObject<ID3D11Texture2D>(resource);
3527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    if (texture2D)
3627ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    {
3727ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        D3D11_TEXTURE2D_DESC texDesc;
3827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        texture2D->GetDesc(&texDesc);
39ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang        SafeRelease(texture2D);
4027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
4127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *mipLevels = texDesc.MipLevels;
4227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *samples = texDesc.SampleDesc.Count > 1 ? texDesc.SampleDesc.Count : 0;
4327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
4427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        return true;
4527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    }
4627ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
4727ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    ID3D11Texture3D *texture3D = d3d11::DynamicCastComObject<ID3D11Texture3D>(resource);
4827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    if (texture3D)
4927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    {
5027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        D3D11_TEXTURE3D_DESC texDesc;
5127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        texture3D->GetDesc(&texDesc);
52ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang        SafeRelease(texture3D);
5327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
5427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *mipLevels = texDesc.MipLevels;
5527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        *samples = 0;
5627ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
5727ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        return true;
5827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    }
5927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
6027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    return false;
6127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com}
6227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
6327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.comstatic unsigned int getRTVSubresourceIndex(ID3D11Resource *resource, ID3D11RenderTargetView *view)
64b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com{
65b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
66b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    view->GetDesc(&rtvDesc);
67b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
68b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    unsigned int mipSlice = 0;
69b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    unsigned int arraySlice = 0;
70b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
71b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    switch (rtvDesc.ViewDimension)
72b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    {
73b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE1D:
74b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = rtvDesc.Texture1D.MipSlice;
75b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
76b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
77b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
78b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:
79b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = rtvDesc.Texture1DArray.MipSlice;
80b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = rtvDesc.Texture1DArray.FirstArraySlice;
81b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
82b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
83b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE2D:
84b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = rtvDesc.Texture2D.MipSlice;
85b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
86b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
87b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
88b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:
89b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = rtvDesc.Texture2DArray.MipSlice;
90b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = rtvDesc.Texture2DArray.FirstArraySlice;
91b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
92b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
93b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE2DMS:
94b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = 0;
95b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
96b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
97b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
98b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:
99b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = 0;
100b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = rtvDesc.Texture2DMSArray.FirstArraySlice;
101b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
102b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
103b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_TEXTURE3D:
104b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = rtvDesc.Texture3D.MipSlice;
105b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
106b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
107b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
108b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_UNKNOWN:
109b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_RTV_DIMENSION_BUFFER:
110b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        UNIMPLEMENTED();
111b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
112b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
113b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      default:
114b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        UNREACHABLE();
115b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
116b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    }
117b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
11827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    unsigned int mipLevels, samples;
11927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    getTextureProperties(resource,  &mipLevels, &samples);
12027ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
121b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels);
122b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com}
123b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
12427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.comstatic unsigned int getDSVSubresourceIndex(ID3D11Resource *resource, ID3D11DepthStencilView *view)
125b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com{
126b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
127b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    view->GetDesc(&dsvDesc);
128b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
129b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    unsigned int mipSlice = 0;
130b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    unsigned int arraySlice = 0;
131b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
132b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    switch (dsvDesc.ViewDimension)
133b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    {
134b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE1D:
135b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = dsvDesc.Texture1D.MipSlice;
136b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
137b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
138b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
139b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE1DARRAY:
140b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = dsvDesc.Texture1DArray.MipSlice;
141b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = dsvDesc.Texture1DArray.FirstArraySlice;
142b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
143b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
144b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE2D:
145b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = dsvDesc.Texture2D.MipSlice;
146b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
147b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
148b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
149b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE2DARRAY:
150b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = dsvDesc.Texture2DArray.MipSlice;
151b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = dsvDesc.Texture2DArray.FirstArraySlice;
152b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
153b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
154b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE2DMS:
155b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = 0;
156b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = 0;
157b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
158b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
159b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY:
160b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        mipSlice = 0;
161b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        arraySlice = dsvDesc.Texture2DMSArray.FirstArraySlice;
162b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
163b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
16427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com      case D3D11_DSV_DIMENSION_UNKNOWN:
165b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        UNIMPLEMENTED();
166b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
167b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
168b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com      default:
169b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        UNREACHABLE();
170b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com        break;
171b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    }
172b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
17327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    unsigned int mipLevels, samples;
17427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    getTextureProperties(resource, &mipLevels, &samples);
17527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com
176b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels);
177b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com}
178b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
1797faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.orgRenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource,
1807faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.org                               ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
181b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com{
182b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    mRenderer = Renderer11::makeRenderer11(renderer);
1832916b30eb47496327257254d355677a6ebb0388aGeoff Lang
18427ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    mTexture = resource;
1852916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mTexture)
1862916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
1872916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mTexture->AddRef();
1882916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
1892916b30eb47496327257254d355677a6ebb0388aGeoff Lang
190183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    mRenderTarget = rtv;
1912916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mRenderTarget)
1922916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
1932916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mRenderTarget->AddRef();
1942916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
1952916b30eb47496327257254d355677a6ebb0388aGeoff Lang
196b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    mDepthStencil = NULL;
1972916b30eb47496327257254d355677a6ebb0388aGeoff Lang
198183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    mShaderResource = srv;
1992916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mShaderResource)
2002916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
2012916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mShaderResource->AddRef();
2022916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
2032916b30eb47496327257254d355677a6ebb0388aGeoff Lang
2043e3da5833393098b525d24a03ef105e75666f13fshannon.woods@transgaming.com    mSubresourceIndex = 0;
205b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
2067e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com    if (mRenderTarget && mTexture)
207b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    {
208b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        D3D11_RENDER_TARGET_VIEW_DESC desc;
209183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        mRenderTarget->GetDesc(&desc);
210b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
21127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        unsigned int mipLevels, samples;
21227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        getTextureProperties(mTexture, &mipLevels, &samples);
2137e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com
2147e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com        mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget);
215b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        mWidth = width;
216b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        mHeight = height;
2177faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.org        mDepth = depth;
21827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        mSamples = samples;
219b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
2209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(desc.Format);
2219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        mInternalFormat = dxgiFormatInfo.internalFormat;
2229aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        mActualFormat = dxgiFormatInfo.internalFormat;
223b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    }
224b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com}
225b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
2267faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.orgRenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource,
2277faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.org                               ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
228b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com{
229b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    mRenderer = Renderer11::makeRenderer11(renderer);
2302916b30eb47496327257254d355677a6ebb0388aGeoff Lang
23127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com    mTexture = resource;
2322916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mTexture)
2332916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
2342916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mTexture->AddRef();
2352916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
2362916b30eb47496327257254d355677a6ebb0388aGeoff Lang
237b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    mRenderTarget = NULL;
2382916b30eb47496327257254d355677a6ebb0388aGeoff Lang
239183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    mDepthStencil = dsv;
2402916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mDepthStencil)
2412916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
2422916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mDepthStencil->AddRef();
2432916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
2442916b30eb47496327257254d355677a6ebb0388aGeoff Lang
245183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    mShaderResource = srv;
2462916b30eb47496327257254d355677a6ebb0388aGeoff Lang    if (mShaderResource)
2472916b30eb47496327257254d355677a6ebb0388aGeoff Lang    {
2482916b30eb47496327257254d355677a6ebb0388aGeoff Lang        mShaderResource->AddRef();
2492916b30eb47496327257254d355677a6ebb0388aGeoff Lang    }
2502916b30eb47496327257254d355677a6ebb0388aGeoff Lang
2513e3da5833393098b525d24a03ef105e75666f13fshannon.woods@transgaming.com    mSubresourceIndex = 0;
252b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
2537e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com    if (mDepthStencil && mTexture)
254b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    {
255b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        D3D11_DEPTH_STENCIL_VIEW_DESC desc;
256183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        mDepthStencil->GetDesc(&desc);
257b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
25827ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        unsigned int mipLevels, samples;
25927ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        getTextureProperties(mTexture, &mipLevels, &samples);
2607e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com
2617e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com        mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil);
262b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        mWidth = width;
263b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com        mHeight = height;
2647faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.org        mDepth = depth;
26527ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        mSamples = samples;
266b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
2679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(desc.Format);
2689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        mInternalFormat = dxgiFormatInfo.internalFormat;
2699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        mActualFormat = dxgiFormatInfo.internalFormat;
270b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    }
271b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com}
272b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
273a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff LangRenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum internalFormat, GLsizei samples)
274c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com{
275c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mRenderer = Renderer11::makeRenderer11(renderer);
2767e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com    mTexture = NULL;
277c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mRenderTarget = NULL;
278c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mDepthStencil = NULL;
279183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    mShaderResource = NULL;
280c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
2819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang    const d3d11::TextureFormat &formatInfo = d3d11::GetTextureFormatInfo(internalFormat);
2829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang    const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(formatInfo.texFormat);
283d38d66e49a77f0b84006c7e69964d93473892087shannonwoods@chromium.org
2845f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang    const gl::TextureCaps &textureCaps = mRenderer->getRendererTextureCaps().get(internalFormat);
2855f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang    GLuint supportedSamples = textureCaps.getNearestSamples(samples);
286c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
287c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    if (width > 0 && height > 0)
288c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    {
289c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        // Create texture resource
290c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        D3D11_TEXTURE2D_DESC desc;
291c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.Width = width;
292c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.Height = height;
293c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.MipLevels = 1;
294c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.ArraySize = 1;
2959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        desc.Format = formatInfo.texFormat;
296ae84f738216d52ec3fece51395646db6d084eb0eshannon.woods@transgaming.com        desc.SampleDesc.Count = (supportedSamples == 0) ? 1 : supportedSamples;
297c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.SampleDesc.Quality = 0;
298c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.Usage = D3D11_USAGE_DEFAULT;
299c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.CPUAccessFlags = 0;
300c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        desc.MiscFlags = 0;
301afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods
302afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        // If a rendertarget or depthstencil format exists for this texture format,
303afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        // we'll flag it to allow binding that way. Shader resource views are a little
304afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        // more complicated.
305afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        bool bindRTV = false, bindDSV = false, bindSRV = false;
3069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        bindRTV = (formatInfo.rtvFormat != DXGI_FORMAT_UNKNOWN);
3079aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        bindDSV = (formatInfo.dsvFormat != DXGI_FORMAT_UNKNOWN);
3089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang        if (formatInfo.srvFormat != DXGI_FORMAT_UNKNOWN)
309afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        {
310afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods            // Multisample targets flagged for binding as depth stencil cannot also be
311afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods            // flagged for binding as SRV, so make certain not to add the SRV flag for
312afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods            // these targets.
3139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang            bindSRV = !(formatInfo.dsvFormat != DXGI_FORMAT_UNKNOWN && desc.SampleDesc.Count > 1);
314afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        }
315afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods
316afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        desc.BindFlags = (bindRTV ? D3D11_BIND_RENDER_TARGET   : 0) |
317afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods                         (bindDSV ? D3D11_BIND_DEPTH_STENCIL   : 0) |
318afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods                         (bindSRV ? D3D11_BIND_SHADER_RESOURCE : 0);
319c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
320c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        ID3D11Device *device = mRenderer->getDevice();
32127ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        ID3D11Texture2D *texture = NULL;
32227ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        HRESULT result = device->CreateTexture2D(&desc, NULL, &texture);
32327ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.com        mTexture = texture;
324c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
3258d8814b7319f7dcc98543649abfd8d188accd1d8shannon.woods@transgaming.com        if (result == E_OUTOFMEMORY)
326183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        {
327779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com            gl::error(GL_OUT_OF_MEMORY);
328183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            return;
329183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        }
330183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        ASSERT(SUCCEEDED(result));
331183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com
332afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        if (bindSRV)
333c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        {
334a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
3359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang            srvDesc.Format = formatInfo.srvFormat;
336a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            srvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_SRV_DIMENSION_TEXTURE2D : D3D11_SRV_DIMENSION_TEXTURE2DMS;
337a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            srvDesc.Texture2D.MostDetailedMip = 0;
338a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            srvDesc.Texture2D.MipLevels = 1;
339a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            result = device->CreateShaderResourceView(mTexture, &srvDesc, &mShaderResource);
340a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang
341a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            if (result == E_OUTOFMEMORY)
342a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            {
343a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mTexture);
344a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                gl::error(GL_OUT_OF_MEMORY);
345a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                return;
346a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            }
347a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang            ASSERT(SUCCEEDED(result));
348a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang        }
349d38d66e49a77f0b84006c7e69964d93473892087shannonwoods@chromium.org
350afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        if (bindDSV)
351a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang        {
352183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
3539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang            dsvDesc.Format = formatInfo.dsvFormat;
354ae84f738216d52ec3fece51395646db6d084eb0eshannon.woods@transgaming.com            dsvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_DSV_DIMENSION_TEXTURE2D : D3D11_DSV_DIMENSION_TEXTURE2DMS;
355183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            dsvDesc.Texture2D.MipSlice = 0;
356183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            dsvDesc.Flags = 0;
3577e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com            result = device->CreateDepthStencilView(mTexture, &dsvDesc, &mDepthStencil);
358183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com
3598d8814b7319f7dcc98543649abfd8d188accd1d8shannon.woods@transgaming.com            if (result == E_OUTOFMEMORY)
360c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com            {
361a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mTexture);
362a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mShaderResource);
363779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com                gl::error(GL_OUT_OF_MEMORY);
364a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                return;
365c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com            }
366183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            ASSERT(SUCCEEDED(result));
367c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com        }
368d38d66e49a77f0b84006c7e69964d93473892087shannonwoods@chromium.org
369afeeda9391c1f3fc0c35c04fbc448480177059d8Shannon Woods        if (bindRTV)
370a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang        {
371183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
3729aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang            rtvDesc.Format = formatInfo.rtvFormat;
373ae84f738216d52ec3fece51395646db6d084eb0eshannon.woods@transgaming.com            rtvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS;
374183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            rtvDesc.Texture2D.MipSlice = 0;
3757e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com            result = device->CreateRenderTargetView(mTexture, &rtvDesc, &mRenderTarget);
376c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
3778d8814b7319f7dcc98543649abfd8d188accd1d8shannon.woods@transgaming.com            if (result == E_OUTOFMEMORY)
378183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            {
379a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mTexture);
380a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mShaderResource);
381a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang                SafeRelease(mDepthStencil);
382779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com                gl::error(GL_OUT_OF_MEMORY);
383183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com                return;
384183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            }
385183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com            ASSERT(SUCCEEDED(result));
38634256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang
3879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang            if (formatInfo.dataInitializerFunction != NULL)
38834256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang            {
38934256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang                ID3D11DeviceContext *context = mRenderer->getDeviceContext();
39034256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang
39134256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang                const float clearValues[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
39234256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang                context->ClearRenderTargetView(mRenderTarget, clearValues);
39334256ed8593f6d7fff6b7536979c95afc28ae2d3Geoff Lang            }
394183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com        }
395c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    }
396c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
3979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang
398c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mWidth = width;
399c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mHeight = height;
4007faf3ec71a8b7cdf81ee9336bf5e1aae133a18f0shannonwoods@chromium.org    mDepth = 1;
401d38d66e49a77f0b84006c7e69964d93473892087shannonwoods@chromium.org    mInternalFormat = internalFormat;
402c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com    mSamples = supportedSamples;
4039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang    mActualFormat = dxgiFormatInfo.internalFormat;
404b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    mSubresourceIndex = D3D11CalcSubresource(0, 0, 1);
405c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com}
406c9a501dc27ed761a701c5095ee2e4f8b281e8c39daniel@transgaming.com
407b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.comRenderTarget11::~RenderTarget11()
408b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com{
409ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang    SafeRelease(mTexture);
410ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang    SafeRelease(mRenderTarget);
411ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang    SafeRelease(mDepthStencil);
412ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang    SafeRelease(mShaderResource);
413b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com}
414b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
415b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.comRenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
416b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com{
4178b400b1e8d84c5b93dd151807504a3e4b90d1b21apatrick@chromium.org    ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
418b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    return static_cast<rx::RenderTarget11*>(target);
419b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com}
420b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
4211654faf4ed508a2b539fdbf7f92f0ce7af3f8f79shannonwoods@chromium.orgvoid RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
4221654faf4ed508a2b539fdbf7f92f0ce7af3f8f79shannonwoods@chromium.org{
4231654faf4ed508a2b539fdbf7f92f0ce7af3f8f79shannonwoods@chromium.org    // Currently a no-op
4241654faf4ed508a2b539fdbf7f92f0ce7af3f8f79shannonwoods@chromium.org}
4251654faf4ed508a2b539fdbf7f92f0ce7af3f8f79shannonwoods@chromium.org
42627ac40e8d6e580bfd2c70ccc06cc2ac84cc017b7shannon.woods%transgaming.com@gtempaccount.comID3D11Resource *RenderTarget11::getTexture() const
4277e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com{
4287e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com    return mTexture;
4297e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com}
4307e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com
431816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.comID3D11RenderTargetView *RenderTarget11::getRenderTargetView() const
432816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com{
433816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com    return mRenderTarget;
434816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com}
435816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com
436816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.comID3D11DepthStencilView *RenderTarget11::getDepthStencilView() const
437816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com{
438816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com    return mDepthStencil;
439816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com}
440816c7f371475d5923b72885e2d7239958ade0cbcdaniel@transgaming.com
441183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.comID3D11ShaderResourceView *RenderTarget11::getShaderResourceView() const
442183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com{
443183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com    return mShaderResource;
444183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com}
445183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com
446b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.comunsigned int RenderTarget11::getSubresourceIndex() const
447b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com{
448b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com    return mSubresourceIndex;
449b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com}
450b68d2bbed00eaf539f530d47f376347b2c79ee8edaniel@transgaming.com
451183408d0c4fdaa702329c5a386e09129aa8b2bb2shannon.woods@transgaming.com}
452