blob: 6aa75ae5bd99becbbda2c589c43721b9774c6624 [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
Brandon Jonesc7a41042014-06-23 12:03:25 -070011#include "libGLESv2/renderer/d3d/d3d11/RenderTarget11.h"
12#include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +000013
Brandon Jonesc7a41042014-06-23 12:03:25 -070014#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
15#include "libGLESv2/renderer/d3d/d3d11/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);
Geoff Langea228632013-07-30 15:17:12 -040028 SafeRelease(texture1D);
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +000029
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);
Geoff Langea228632013-07-30 15:17:12 -040041 SafeRelease(texture2D);
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +000042
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);
Geoff Langea228632013-07-30 15:17:12 -040054 SafeRelease(texture3D);
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +000055
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);
Geoff Lang2916b302013-11-28 13:41:10 -0500185
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000186 mTexture = resource;
Geoff Lang2916b302013-11-28 13:41:10 -0500187 if (mTexture)
188 {
189 mTexture->AddRef();
190 }
191
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000192 mRenderTarget = rtv;
Geoff Lang2916b302013-11-28 13:41:10 -0500193 if (mRenderTarget)
194 {
195 mRenderTarget->AddRef();
196 }
197
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000198 mDepthStencil = NULL;
Geoff Lang2916b302013-11-28 13:41:10 -0500199
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000200 mShaderResource = srv;
Geoff Lang2916b302013-11-28 13:41:10 -0500201 if (mShaderResource)
202 {
203 mShaderResource->AddRef();
204 }
205
shannon.woods@transgaming.com3e3da582013-02-28 23:09:03 +0000206 mSubresourceIndex = 0;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000207
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000208 if (mRenderTarget && mTexture)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000209 {
210 D3D11_RENDER_TARGET_VIEW_DESC desc;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000211 mRenderTarget->GetDesc(&desc);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000212
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000213 unsigned int mipLevels, samples;
214 getTextureProperties(mTexture, &mipLevels, &samples);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000215
216 mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000217 mWidth = width;
218 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000219 mDepth = depth;
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000220 mSamples = samples;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000221
Geoff Lange4a492b2014-06-19 14:14:41 -0400222 mInternalFormat = d3d11_gl::GetInternalFormat(desc.Format);
223 mActualFormat = d3d11_gl::GetInternalFormat(desc.Format);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000224 }
225}
226
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000227RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource,
228 ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000229{
230 mRenderer = Renderer11::makeRenderer11(renderer);
Geoff Lang2916b302013-11-28 13:41:10 -0500231
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000232 mTexture = resource;
Geoff Lang2916b302013-11-28 13:41:10 -0500233 if (mTexture)
234 {
235 mTexture->AddRef();
236 }
237
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000238 mRenderTarget = NULL;
Geoff Lang2916b302013-11-28 13:41:10 -0500239
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000240 mDepthStencil = dsv;
Geoff Lang2916b302013-11-28 13:41:10 -0500241 if (mDepthStencil)
242 {
243 mDepthStencil->AddRef();
244 }
245
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000246 mShaderResource = srv;
Geoff Lang2916b302013-11-28 13:41:10 -0500247 if (mShaderResource)
248 {
249 mShaderResource->AddRef();
250 }
251
shannon.woods@transgaming.com3e3da582013-02-28 23:09:03 +0000252 mSubresourceIndex = 0;
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000253
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000254 if (mDepthStencil && mTexture)
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000255 {
256 D3D11_DEPTH_STENCIL_VIEW_DESC desc;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000257 mDepthStencil->GetDesc(&desc);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000258
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000259 unsigned int mipLevels, samples;
260 getTextureProperties(mTexture, &mipLevels, &samples);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000261
262 mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000263 mWidth = width;
264 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000265 mDepth = depth;
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000266 mSamples = samples;
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000267
Geoff Lange4a492b2014-06-19 14:14:41 -0400268 mInternalFormat = d3d11_gl::GetInternalFormat(desc.Format);
269 mActualFormat = d3d11_gl::GetInternalFormat(desc.Format);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000270 }
271}
272
Geoff Langa2d97f12013-06-11 11:44:02 -0400273RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum internalFormat, GLsizei samples)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000274{
275 mRenderer = Renderer11::makeRenderer11(renderer);
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000276 mTexture = NULL;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000277 mRenderTarget = NULL;
278 mDepthStencil = NULL;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000279 mShaderResource = NULL;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000280
Geoff Lange4a492b2014-06-19 14:14:41 -0400281 DXGI_FORMAT texFormat = gl_d3d11::GetTexFormat(internalFormat);
282 DXGI_FORMAT srvFormat = gl_d3d11::GetSRVFormat(internalFormat);
283 DXGI_FORMAT rtvFormat = gl_d3d11::GetRTVFormat(internalFormat);
284 DXGI_FORMAT dsvFormat = gl_d3d11::GetDSVFormat(internalFormat);
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000285
Jamie Madillfcb8a602013-06-24 17:51:47 -0400286 DXGI_FORMAT multisampleFormat = (dsvFormat != DXGI_FORMAT_UNKNOWN ? dsvFormat : rtvFormat);
287 int supportedSamples = mRenderer->getNearestSupportedSamples(multisampleFormat, samples);
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000288 if (supportedSamples < 0)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000289 {
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000290 gl::error(GL_OUT_OF_MEMORY);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000291 return;
292 }
293
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000294 if (width > 0 && height > 0)
295 {
296 // Create texture resource
297 D3D11_TEXTURE2D_DESC desc;
298 desc.Width = width;
299 desc.Height = height;
300 desc.MipLevels = 1;
301 desc.ArraySize = 1;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000302 desc.Format = texFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000303 desc.SampleDesc.Count = (supportedSamples == 0) ? 1 : supportedSamples;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000304 desc.SampleDesc.Quality = 0;
305 desc.Usage = D3D11_USAGE_DEFAULT;
306 desc.CPUAccessFlags = 0;
307 desc.MiscFlags = 0;
Shannon Woodsafeeda92014-06-06 13:39:12 -0400308
309 // If a rendertarget or depthstencil format exists for this texture format,
310 // we'll flag it to allow binding that way. Shader resource views are a little
311 // more complicated.
312 bool bindRTV = false, bindDSV = false, bindSRV = false;
313 bindRTV = (rtvFormat != DXGI_FORMAT_UNKNOWN);
314 bindDSV = (dsvFormat != DXGI_FORMAT_UNKNOWN);
315 if (srvFormat != DXGI_FORMAT_UNKNOWN)
316 {
317 // Multisample targets flagged for binding as depth stencil cannot also be
318 // flagged for binding as SRV, so make certain not to add the SRV flag for
319 // these targets.
320 bindSRV = !(dsvFormat != DXGI_FORMAT_UNKNOWN && desc.SampleDesc.Count > 1);
321 }
322
323 desc.BindFlags = (bindRTV ? D3D11_BIND_RENDER_TARGET : 0) |
324 (bindDSV ? D3D11_BIND_DEPTH_STENCIL : 0) |
325 (bindSRV ? D3D11_BIND_SHADER_RESOURCE : 0);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000326
327 ID3D11Device *device = mRenderer->getDevice();
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000328 ID3D11Texture2D *texture = NULL;
329 HRESULT result = device->CreateTexture2D(&desc, NULL, &texture);
330 mTexture = texture;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000331
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000332 if (result == E_OUTOFMEMORY)
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000333 {
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000334 gl::error(GL_OUT_OF_MEMORY);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000335 return;
336 }
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000337 ASSERT(SUCCEEDED(result));
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000338
Shannon Woodsafeeda92014-06-06 13:39:12 -0400339 if (bindSRV)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000340 {
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000341 D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000342 srvDesc.Format = srvFormat;
shannon.woods@transgaming.comae84f732013-02-28 23:05:57 +0000343 srvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_SRV_DIMENSION_TEXTURE2D : D3D11_SRV_DIMENSION_TEXTURE2DMS;
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000344 srvDesc.Texture2D.MostDetailedMip = 0;
345 srvDesc.Texture2D.MipLevels = 1;
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000346 result = device->CreateShaderResourceView(mTexture, &srvDesc, &mShaderResource);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000347
shannon.woods@transgaming.com8d8814b2013-02-28 23:10:53 +0000348 if (result == E_OUTOFMEMORY)
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000349 {
Geoff Langa2d97f12013-06-11 11:44:02 -0400350 SafeRelease(mTexture);
351 gl::error(GL_OUT_OF_MEMORY);
352 return;
353 }
354 ASSERT(SUCCEEDED(result));
355 }
356
Shannon Woodsafeeda92014-06-06 13:39:12 -0400357 if (bindDSV)
Geoff Langa2d97f12013-06-11 11:44:02 -0400358 {
359 D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
360 dsvDesc.Format = dsvFormat;
361 dsvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_DSV_DIMENSION_TEXTURE2D : D3D11_DSV_DIMENSION_TEXTURE2DMS;
362 dsvDesc.Texture2D.MipSlice = 0;
363 dsvDesc.Flags = 0;
364 result = device->CreateDepthStencilView(mTexture, &dsvDesc, &mDepthStencil);
365
366 if (result == E_OUTOFMEMORY)
367 {
368 SafeRelease(mTexture);
369 SafeRelease(mShaderResource);
370 gl::error(GL_OUT_OF_MEMORY);
371 return;
372 }
373 ASSERT(SUCCEEDED(result));
374 }
375
Shannon Woodsafeeda92014-06-06 13:39:12 -0400376 if (bindRTV)
Geoff Langa2d97f12013-06-11 11:44:02 -0400377 {
378 D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
379 rtvDesc.Format = rtvFormat;
380 rtvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS;
381 rtvDesc.Texture2D.MipSlice = 0;
382 result = device->CreateRenderTargetView(mTexture, &rtvDesc, &mRenderTarget);
383
384 if (result == E_OUTOFMEMORY)
385 {
386 SafeRelease(mTexture);
387 SafeRelease(mShaderResource);
388 SafeRelease(mDepthStencil);
shannon.woods@transgaming.com779aa262013-02-28 23:04:58 +0000389 gl::error(GL_OUT_OF_MEMORY);
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000390 return;
391 }
392 ASSERT(SUCCEEDED(result));
Geoff Lang34256ed2013-09-30 15:15:52 -0400393
394 if (gl_d3d11::RequiresTextureDataInitialization(internalFormat))
395 {
396 ID3D11DeviceContext *context = mRenderer->getDeviceContext();
397
398 const float clearValues[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
399 context->ClearRenderTargetView(mRenderTarget, clearValues);
400 }
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000401 }
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000402 }
403
404 mWidth = width;
405 mHeight = height;
shannonwoods@chromium.org7faf3ec2013-05-30 00:03:45 +0000406 mDepth = 1;
shannonwoods@chromium.orgd38d66e2013-05-30 00:09:16 +0000407 mInternalFormat = internalFormat;
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000408 mSamples = supportedSamples;
Geoff Lange4a492b2014-06-19 14:14:41 -0400409 mActualFormat = d3d11_gl::GetInternalFormat(texFormat);
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000410 mSubresourceIndex = D3D11CalcSubresource(0, 0, 1);
daniel@transgaming.comc9a501d2013-01-11 04:08:46 +0000411}
412
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000413RenderTarget11::~RenderTarget11()
414{
Geoff Langea228632013-07-30 15:17:12 -0400415 SafeRelease(mTexture);
416 SafeRelease(mRenderTarget);
417 SafeRelease(mDepthStencil);
418 SafeRelease(mShaderResource);
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000419}
420
421RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
422{
apatrick@chromium.org8b400b12013-01-30 21:53:40 +0000423 ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
daniel@transgaming.comb6b27bc2012-11-28 20:54:30 +0000424 return static_cast<rx::RenderTarget11*>(target);
425}
426
shannonwoods@chromium.org1654faf2013-05-30 00:10:48 +0000427void RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
428{
429 // Currently a no-op
430}
431
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +0000432ID3D11Resource *RenderTarget11::getTexture() const
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000433{
shannon.woods@transgaming.com7e232852013-02-28 23:06:15 +0000434 return mTexture;
435}
436
daniel@transgaming.com816c7f32012-11-28 21:02:01 +0000437ID3D11RenderTargetView *RenderTarget11::getRenderTargetView() const
438{
daniel@transgaming.com816c7f32012-11-28 21:02:01 +0000439 return mRenderTarget;
440}
441
daniel@transgaming.com816c7f32012-11-28 21:02:01 +0000442ID3D11DepthStencilView *RenderTarget11::getDepthStencilView() const
443{
daniel@transgaming.com816c7f32012-11-28 21:02:01 +0000444 return mDepthStencil;
445}
446
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000447ID3D11ShaderResourceView *RenderTarget11::getShaderResourceView() const
448{
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000449 return mShaderResource;
450}
451
daniel@transgaming.comb68d2bb2013-01-11 04:10:15 +0000452unsigned int RenderTarget11::getSubresourceIndex() const
453{
454 return mSubresourceIndex;
455}
456
shannon.woods@transgaming.com183408d2013-01-25 21:50:07 +0000457}