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