blob: 70729fa906a61e5329539be9f6eb8a46bb365505 [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +00002//
3// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// RenderTarget11.cpp: Implements a DX11-specific wrapper for ID3D11View pointers
9// retained by Renderbuffers.
10
11#include "libGLESv2/renderer/RenderTarget11.h"
12#include "libGLESv2/renderer/Renderer11.h"
13
14#include "libGLESv2/renderer/renderer11_utils.h"
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +000015#include "libGLESv2/renderer/formatutils11.h"
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +000016#include "libGLESv2/main.h"
17
18namespace rx
19{
20
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +000021static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLevels, unsigned int *samples)
22{
23 ID3D11Texture1D *texture1D = d3d11::DynamicCastComObject<ID3D11Texture1D>(resource);
24 if (texture1D)
25 {
26 D3D11_TEXTURE1D_DESC texDesc;
27 texture1D->GetDesc(&texDesc);
28 texture1D->Release();
29
30 *mipLevels = texDesc.MipLevels;
31 *samples = 0;
32
33 return true;
34 }
35
36 ID3D11Texture2D *texture2D = d3d11::DynamicCastComObject<ID3D11Texture2D>(resource);
37 if (texture2D)
38 {
39 D3D11_TEXTURE2D_DESC texDesc;
40 texture2D->GetDesc(&texDesc);
41 texture2D->Release();
42
43 *mipLevels = texDesc.MipLevels;
44 *samples = texDesc.SampleDesc.Count > 1 ? texDesc.SampleDesc.Count : 0;
45
46 return true;
47 }
48
49 ID3D11Texture3D *texture3D = d3d11::DynamicCastComObject<ID3D11Texture3D>(resource);
50 if (texture3D)
51 {
52 D3D11_TEXTURE3D_DESC texDesc;
53 texture3D->GetDesc(&texDesc);
54 texture3D->Release();
55
56 *mipLevels = texDesc.MipLevels;
57 *samples = 0;
58
59 return true;
60 }
61
62 return false;
63}
64
65static unsigned int getRTVSubresourceIndex(ID3D11Resource *resource, ID3D11RenderTargetView *view)
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +000066{
67 D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
68 view->GetDesc(&rtvDesc);
69
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +000070 unsigned int mipSlice = 0;
71 unsigned int arraySlice = 0;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +000072
73 switch (rtvDesc.ViewDimension)
74 {
75 case D3D11_RTV_DIMENSION_TEXTURE1D:
76 mipSlice = rtvDesc.Texture1D.MipSlice;
77 arraySlice = 0;
78 break;
79
80 case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:
81 mipSlice = rtvDesc.Texture1DArray.MipSlice;
82 arraySlice = rtvDesc.Texture1DArray.FirstArraySlice;
83 break;
84
85 case D3D11_RTV_DIMENSION_TEXTURE2D:
86 mipSlice = rtvDesc.Texture2D.MipSlice;
87 arraySlice = 0;
88 break;
89
90 case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:
91 mipSlice = rtvDesc.Texture2DArray.MipSlice;
92 arraySlice = rtvDesc.Texture2DArray.FirstArraySlice;
93 break;
94
95 case D3D11_RTV_DIMENSION_TEXTURE2DMS:
96 mipSlice = 0;
97 arraySlice = 0;
98 break;
99
100 case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:
101 mipSlice = 0;
102 arraySlice = rtvDesc.Texture2DMSArray.FirstArraySlice;
103 break;
104
105 case D3D11_RTV_DIMENSION_TEXTURE3D:
106 mipSlice = rtvDesc.Texture3D.MipSlice;
107 arraySlice = 0;
108 break;
109
110 case D3D11_RTV_DIMENSION_UNKNOWN:
111 case D3D11_RTV_DIMENSION_BUFFER:
112 UNIMPLEMENTED();
113 break;
114
115 default:
116 UNREACHABLE();
117 break;
118 }
119
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000120 unsigned int mipLevels, samples;
121 getTextureProperties(resource, &mipLevels, &samples);
122
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000123 return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels);
124}
125
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000126static unsigned int getDSVSubresourceIndex(ID3D11Resource *resource, ID3D11DepthStencilView *view)
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000127{
128 D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
129 view->GetDesc(&dsvDesc);
130
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000131 unsigned int mipSlice = 0;
132 unsigned int arraySlice = 0;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000133
134 switch (dsvDesc.ViewDimension)
135 {
136 case D3D11_DSV_DIMENSION_TEXTURE1D:
137 mipSlice = dsvDesc.Texture1D.MipSlice;
138 arraySlice = 0;
139 break;
140
141 case D3D11_DSV_DIMENSION_TEXTURE1DARRAY:
142 mipSlice = dsvDesc.Texture1DArray.MipSlice;
143 arraySlice = dsvDesc.Texture1DArray.FirstArraySlice;
144 break;
145
146 case D3D11_DSV_DIMENSION_TEXTURE2D:
147 mipSlice = dsvDesc.Texture2D.MipSlice;
148 arraySlice = 0;
149 break;
150
151 case D3D11_DSV_DIMENSION_TEXTURE2DARRAY:
152 mipSlice = dsvDesc.Texture2DArray.MipSlice;
153 arraySlice = dsvDesc.Texture2DArray.FirstArraySlice;
154 break;
155
156 case D3D11_DSV_DIMENSION_TEXTURE2DMS:
157 mipSlice = 0;
158 arraySlice = 0;
159 break;
160
161 case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY:
162 mipSlice = 0;
163 arraySlice = dsvDesc.Texture2DMSArray.FirstArraySlice;
164 break;
165
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000166 case D3D11_DSV_DIMENSION_UNKNOWN:
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000167 UNIMPLEMENTED();
168 break;
169
170 default:
171 UNREACHABLE();
172 break;
173 }
174
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000175 unsigned int mipLevels, samples;
176 getTextureProperties(resource, &mipLevels, &samples);
177
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000178 return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels);
179}
180
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000181RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource,
182 ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000183{
184 mRenderer = Renderer11::makeRenderer11(renderer);
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000185 mTexture = resource;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000186 mRenderTarget = rtv;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000187 mDepthStencil = NULL;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000188 mShaderResource = srv;
shannon.woods@transgaming.com3e3da582013-02-28 23:09:03 +0000189 mSubresourceIndex = 0;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000190
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000191 if (mRenderTarget && mTexture)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000192 {
193 D3D11_RENDER_TARGET_VIEW_DESC desc;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000194 mRenderTarget->GetDesc(&desc);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000195
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000196 unsigned int mipLevels, samples;
197 getTextureProperties(mTexture, &mipLevels, &samples);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000198
199 mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000200 mWidth = width;
201 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000202 mDepth = depth;
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000203 mSamples = samples;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000204
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000205 mInternalFormat = d3d11_gl::GetInternalFormat(desc.Format);
206 mActualFormat = d3d11_gl::GetInternalFormat(desc.Format);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000207 }
208}
209
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000210RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource,
211 ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000212{
213 mRenderer = Renderer11::makeRenderer11(renderer);
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000214 mTexture = resource;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000215 mRenderTarget = NULL;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000216 mDepthStencil = dsv;
217 mShaderResource = srv;
shannon.woods@transgaming.com3e3da582013-02-28 23:09:03 +0000218 mSubresourceIndex = 0;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000219
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000220 if (mDepthStencil && mTexture)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000221 {
222 D3D11_DEPTH_STENCIL_VIEW_DESC desc;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000223 mDepthStencil->GetDesc(&desc);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000224
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000225 unsigned int mipLevels, samples;
226 getTextureProperties(mTexture, &mipLevels, &samples);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000227
228 mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000229 mWidth = width;
230 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000231 mDepth = depth;
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000232 mSamples = samples;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000233
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000234 mInternalFormat = d3d11_gl::GetInternalFormat(desc.Format);
235 mActualFormat = d3d11_gl::GetInternalFormat(desc.Format);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000236 }
237}
238
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000239RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum internalFormat, GLsizei samples, bool depthStencil)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000240{
241 mRenderer = Renderer11::makeRenderer11(renderer);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000242 mTexture = NULL;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000243 mRenderTarget = NULL;
244 mDepthStencil = NULL;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000245 mShaderResource = NULL;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000246
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000247 GLuint clientVersion = mRenderer->getCurrentClientVersion();
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000248
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000249 DXGI_FORMAT texFormat = gl_d3d11::GetTexFormat(internalFormat, clientVersion);
250 DXGI_FORMAT srvFormat = gl_d3d11::GetSRVFormat(internalFormat, clientVersion);
251 DXGI_FORMAT rtvFormat = gl_d3d11::GetSRVFormat(internalFormat, clientVersion);
252 DXGI_FORMAT dsvFormat = gl_d3d11::GetDSVFormat(internalFormat, clientVersion);
253
254 int supportedSamples = mRenderer->getNearestSupportedSamples(depthStencil ? dsvFormat : rtvFormat, samples);
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000255 if (supportedSamples < 0)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000256 {
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000257 gl::error(GL_OUT_OF_MEMORY);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000258 return;
259 }
260
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000261 if (width > 0 && height > 0)
262 {
263 // Create texture resource
264 D3D11_TEXTURE2D_DESC desc;
265 desc.Width = width;
266 desc.Height = height;
267 desc.MipLevels = 1;
268 desc.ArraySize = 1;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000269 desc.Format = texFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000270 desc.SampleDesc.Count = (supportedSamples == 0) ? 1 : supportedSamples;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000271 desc.SampleDesc.Quality = 0;
272 desc.Usage = D3D11_USAGE_DEFAULT;
273 desc.CPUAccessFlags = 0;
274 desc.MiscFlags = 0;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000275 desc.BindFlags = (depthStencil ? D3D11_BIND_DEPTH_STENCIL : (D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE));
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000276
277 ID3D11Device *device = mRenderer->getDevice();
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000278 ID3D11Texture2D *texture = NULL;
279 HRESULT result = device->CreateTexture2D(&desc, NULL, &texture);
280 mTexture = texture;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000281
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000282 if (result == E_OUTOFMEMORY)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000283 {
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000284 gl::error(GL_OUT_OF_MEMORY);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000285 return;
286 }
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000287 ASSERT(SUCCEEDED(result));
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000288
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000289 if (depthStencil)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000290 {
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000291 ASSERT(dsvFormat != DXGI_FORMAT_UNKNOWN);
292
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000293 D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000294 dsvDesc.Format = dsvFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000295 dsvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_DSV_DIMENSION_TEXTURE2D : D3D11_DSV_DIMENSION_TEXTURE2DMS;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000296 dsvDesc.Texture2D.MipSlice = 0;
297 dsvDesc.Flags = 0;
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000298 result = device->CreateDepthStencilView(mTexture, &dsvDesc, &mDepthStencil);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000299
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000300 if (result == E_OUTOFMEMORY)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000301 {
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000302 mTexture->Release();
303 mTexture = NULL;
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000304 gl::error(GL_OUT_OF_MEMORY);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000305 }
306 ASSERT(SUCCEEDED(result));
307 }
308 else
309 {
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000310 ASSERT(rtvFormat != DXGI_FORMAT_UNKNOWN && srvFormat != DXGI_FORMAT_UNKNOWN);
311
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000312 D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000313 rtvDesc.Format = rtvFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000314 rtvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000315 rtvDesc.Texture2D.MipSlice = 0;
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000316 result = device->CreateRenderTargetView(mTexture, &rtvDesc, &mRenderTarget);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000317
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000318 if (result == E_OUTOFMEMORY)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000319 {
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000320 mTexture->Release();
321 mTexture = NULL;
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000322 gl::error(GL_OUT_OF_MEMORY);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000323 return;
324 }
325 ASSERT(SUCCEEDED(result));
326
327 D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000328 srvDesc.Format = srvFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000329 srvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_SRV_DIMENSION_TEXTURE2D : D3D11_SRV_DIMENSION_TEXTURE2DMS;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000330 srvDesc.Texture2D.MostDetailedMip = 0;
331 srvDesc.Texture2D.MipLevels = 1;
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000332 result = device->CreateShaderResourceView(mTexture, &srvDesc, &mShaderResource);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000333
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000334 if (result == E_OUTOFMEMORY)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000335 {
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000336 mTexture->Release();
337 mTexture = NULL;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000338 mRenderTarget->Release();
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000339 mRenderTarget = NULL;
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000340 gl::error(GL_OUT_OF_MEMORY);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000341 return;
342 }
343 ASSERT(SUCCEEDED(result));
344 }
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000345 }
346
347 mWidth = width;
348 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000349 mDepth = 1;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000350 mInternalFormat = internalFormat;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000351 mSamples = supportedSamples;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000352 mActualFormat = d3d11_gl::GetInternalFormat(texFormat);
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000353 mSubresourceIndex = D3D11CalcSubresource(0, 0, 1);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000354}
355
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000356RenderTarget11::~RenderTarget11()
357{
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000358 if (mTexture)
359 {
360 mTexture->Release();
361 mTexture = NULL;
362 }
363
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000364 if (mRenderTarget)
365 {
366 mRenderTarget->Release();
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000367 mRenderTarget = NULL;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000368 }
369
370 if (mDepthStencil)
371 {
372 mDepthStencil->Release();
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000373 mDepthStencil = NULL;
374 }
375
376 if (mShaderResource)
377 {
378 mShaderResource->Release();
379 mShaderResource = NULL;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000380 }
381}
382
383RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
384{
apatrick@chromium.org8b400b12013-01-30 21:53:40 +0000385 ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000386 return static_cast<rx::RenderTarget11*>(target);
387}
388
shannonwoods@chromium.org1654faf2013-05-30 00:10:48 +0000389void RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
390{
391 // Currently a no-op
392}
393
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000394ID3D11Resource *RenderTarget11::getTexture() const
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000395{
396 if (mTexture)
397 {
398 mTexture->AddRef();
399 }
400
401 return mTexture;
402}
403
daniel@transgaming.com816c7f32012-11-28 21:02:01 +0000404// Adds reference, caller must call Release
405ID3D11RenderTargetView *RenderTarget11::getRenderTargetView() const
406{
407 if (mRenderTarget)
408 {
409 mRenderTarget->AddRef();
410 }
411
412 return mRenderTarget;
413}
414
415// Adds reference, caller must call Release
416ID3D11DepthStencilView *RenderTarget11::getDepthStencilView() const
417{
418 if (mDepthStencil)
419 {
420 mDepthStencil->AddRef();
421 }
422
423 return mDepthStencil;
424}
425
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000426// Adds reference, caller must call Release
427ID3D11ShaderResourceView *RenderTarget11::getShaderResourceView() const
428{
429 if (mShaderResource)
430 {
431 mShaderResource->AddRef();
432 }
433
434 return mShaderResource;
435}
436
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000437unsigned int RenderTarget11::getSubresourceIndex() const
438{
439 return mSubresourceIndex;
440}
441
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000442}