11d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com//
2a390e1eeeb5e990c9709ef5a4e80cd73f53f77c5daniel@transgaming.com// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
31d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
41d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com// found in the LICENSE file.
51d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com//
61d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
71d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com// Renderer11.h: Defines a back-end specific class for the D3D11 renderer.
81d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
91d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com#ifndef LIBGLESV2_RENDERER_RENDERER11_H_
101d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com#define LIBGLESV2_RENDERER_RENDERER11_H_
111d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
121d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com#include "common/angleutils.h"
136c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com#include "libGLESv2/angletypes.h"
148ce2f8f8e9597c045e6cf0c150c9302e7f3466b6shannon.woods@transgaming.com#include "libGLESv2/mathutil.h"
151d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
161d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com#include "libGLESv2/renderer/Renderer.h"
17f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com#include "libGLESv2/renderer/RenderStateCache.h"
18c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com#include "libGLESv2/renderer/InputLayoutCache.h"
19d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com#include "libGLESv2/renderer/RenderTarget.h"
201d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
21d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.comnamespace gl
22d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.com{
23d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.comclass Renderbuffer;
24d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.com}
25d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.com
261d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.comnamespace rx
271d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com{
281d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
29c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.comclass VertexDataManager;
30c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.comclass IndexDataManager;
31c51143010f903323679266df2aa47a233c964f12daniel@transgaming.comclass StreamingIndexBufferInterface;
32c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com
334e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.comenum
344e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.com{
354e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.com    MAX_VERTEX_UNIFORM_VECTORS_D3D11 = 1024,
364e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.com    MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024
374e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.com};
384e48204afe732c1ad739b73867500d11552b6e4fshannon.woods@transgaming.com
391d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.comclass Renderer11 : public Renderer
401d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com{
411d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com  public:
421d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    Renderer11(egl::Display *display, HDC hDc);
431d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual ~Renderer11();
441d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
45b64ed2824bfd5d67acb415300427edc40ae79253daniel@transgaming.com    static Renderer11 *makeRenderer11(Renderer *renderer);
46b64ed2824bfd5d67acb415300427edc40ae79253daniel@transgaming.com
471d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual EGLint initialize();
481d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool resetDevice();
491d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
501d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual int generateConfigs(ConfigDesc **configDescList);
511d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual void deleteConfigs(ConfigDesc *configDescList);
521d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
531d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual void sync(bool block);
541d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
55b9bb27938fae86822453d7cba1bba6c704000a8adaniel@transgaming.com    virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat);
56b9bb27938fae86822453d7cba1bba6c704000a8adaniel@transgaming.com
571d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
581d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
591d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
60237bc7e55bb631ebd1f5e7981b30b8a2eafbb606daniel@transgaming.com    virtual void setRasterizerState(const gl::RasterizerState &rasterState);
61493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com    virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
62493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com                               unsigned int sampleMask);
6308c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com    virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
643a0ef48010e6a3e95c9d72f982ab6d3d4cad0c6fdaniel@transgaming.com                                      int stencilBackRef, bool frontFaceCCW);
65493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com
66d55e8c1b48f16f93cb89798fc3640047eb74d3fddaniel@transgaming.com    virtual void setScissorRectangle(const gl::Rectangle &scissor, bool enabled);
671298518804934fac7f8ecd37ad58a5ac100cff36daniel@transgaming.com    virtual bool setViewport(const gl::Rectangle &viewport, float zNear, float zFar, GLenum drawMode, GLenum frontFace,
680b236e2ec3c32b79d1abca881a32cbf53027e3d3shannon.woods@transgaming.com                             bool ignoreViewport);
69493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com
7091207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com    virtual bool applyPrimitiveType(GLenum mode, GLsizei count);
71ae39ee280d5e15b8064402b75e8daecbe4146b98daniel@transgaming.com    virtual bool applyRenderTarget(gl::Framebuffer *frameBuffer);
725fbf177ce23fc52625e1d7a6914fd7a9ce12c311daniel@transgaming.com    virtual void applyShaders(gl::ProgramBinary *programBinary);
7321ba6478bb28924a634074f53d02c7b20f6dc1d5shannon.woods@transgaming.com    virtual void applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArray *uniformArray);
7491207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com    virtual GLenum applyVertexBuffer(gl::ProgramBinary *programBinary, gl::VertexAttribute vertexAttributes[], GLint first, GLsizei count, GLsizei instances);
75312404870905e1eff46e21632c1c2f2143af4694daniel@transgaming.com    virtual GLenum applyIndexBuffer(const GLvoid *indices, gl::Buffer *elementArrayBuffer, GLsizei count, GLenum mode, GLenum type, TranslatedIndexData *indexInfo);
76493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com
7791207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com    virtual void drawArrays(GLenum mode, GLsizei count, GLsizei instances);
7800032cb2c77dfe812dda092ecfd938e66dce7f3cshannon.woods@transgaming.com    virtual void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances);
79def9f0f35beb8606b73bab418c69f1047252e50edaniel@transgaming.com
80084a257ef7455c230fef3b3bc0cdeced4cabb1acdaniel@transgaming.com    virtual void clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
81d084c620c0d275be03b10e1f802582dd278ff6fedaniel@transgaming.com
82c43a60557d5e25cfb80cb0cd3c2a01920251745fdaniel@transgaming.com    virtual void markAllStateDirty();
83c43a60557d5e25cfb80cb0cd3c2a01920251745fdaniel@transgaming.com
841d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    // lost device
85eb049e2c2de52176f2a755460d421889fda9ed19shannon.woods@transgaming.com    void notifyDeviceLost();
861d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool isDeviceLost();
871d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool testDeviceLost(bool notify);
881d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool testDeviceResettable();
891d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
901d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    // Renderer capabilities
911d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual DWORD getAdapterVendor() const;
92ca1ac1f113e18815bab14a3465039bd57b41c10ddaniel@transgaming.com    virtual std::string getRendererDescription() const;
931d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual GUID getAdapterIdentifier() const;
941d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
95bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com    virtual bool getBGRATextureSupport() const;
961d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getDXT1TextureSupport();
971d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getDXT3TextureSupport();
981d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getDXT5TextureSupport();
991d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getEventQuerySupport();
1001d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getFloat32TextureSupport(bool *filtering, bool *renderable);
1011d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getFloat16TextureSupport(bool *filtering, bool *renderable);
1021d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getLuminanceTextureSupport();
1031d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getLuminanceAlphaTextureSupport();
104233fe9548a2b166d3ccb09a4a7af273fab6dbf2cshannon.woods@transgaming.com    virtual unsigned int getMaxVertexTextureImageUnits() const;
10576cd88c5a67c14da7f4e0a7a6491297e3fb49bcbshannon.woods@transgaming.com    virtual unsigned int getMaxCombinedTextureImageUnits() const;
106d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com    virtual unsigned int getReservedVertexUniformVectors() const;
107d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com    virtual unsigned int getReservedFragmentUniformVectors() const;
108d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com    virtual unsigned int getMaxVertexUniformVectors() const;
109d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com    virtual unsigned int getMaxFragmentUniformVectors() const;
110d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com    virtual unsigned int getMaxVaryingVectors() const;
1111d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getNonPower2TextureSupport() const;
1121d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getDepthTextureSupport() const;
1131d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getOcclusionQuerySupport() const;
1141d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getInstancingSupport() const;
1151d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getTextureFilterAnisotropySupport() const;
1161d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual float getTextureMaxAnisotropy() const;
1171d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool getShareHandleSupport() const;
1187629bb6c10907e6aae1710eafd15306d43c1840edaniel@transgaming.com    virtual bool getDerivativeInstructionSupport() const;
1198d2f086ad33f82aa1a01fe86a1bbfa6eba47e224shannon.woods@transgaming.com    virtual bool getPostSubBufferSupport() const;
1201d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
1219549bead5dc8bb07a21296ea8bea97939285c699daniel@transgaming.com    virtual int getMajorShaderModel() const;
1221d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual float getMaxPointSize() const;
1238ce2f8f8e9597c045e6cf0c150c9302e7f3466b6shannon.woods@transgaming.com    virtual int getMaxViewportDimension() const;
1241d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual int getMaxTextureWidth() const;
1251d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual int getMaxTextureHeight() const;
1261d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual bool get32BitIndexSupport() const;
1271d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual int getMinSwapInterval() const;
1281d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual int getMaxSwapInterval() const;
1291d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
1301d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    virtual GLsizei getMaxSupportedSamples() const;
13188fbd0feec1c8617a216386d6d20bbe8e68dcee7shannon.woods@transgaming.com    int getNearestSupportedSamples(DXGI_FORMAT format, unsigned int requested) const;
1321d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
133a4e7017d2e7d9fff04c1ab259b0636885a23b7b2shannon.woods%transgaming.com@gtempaccount.com    virtual unsigned int getMaxRenderTargets() const;
134a4e7017d2e7d9fff04c1ab259b0636885a23b7b2shannon.woods%transgaming.com@gtempaccount.com
135a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com    // Pixel operations
13687705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    virtual bool copyToRenderTarget(TextureStorageInterface2D *dest, TextureStorageInterface2D *source);
13787705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    virtual bool copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureStorageInterfaceCube *source);
138ad6aee7de9ffae3fa885f5b487a12eea1ae0bac2daniel@transgaming.com
139664916b706c6adc2c09a003f08dc68d487dec147shannon.woods@transgaming.com    virtual bool copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
14087705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com                           GLint xoffset, GLint yoffset, TextureStorageInterface2D *storage, GLint level);
141664916b706c6adc2c09a003f08dc68d487dec147shannon.woods@transgaming.com    virtual bool copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
14287705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com                           GLint xoffset, GLint yoffset, TextureStorageInterfaceCube *storage, GLenum target, GLint level);
143383808834b498363a9c427c85ed635c6476382f0daniel@transgaming.com
1449d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    bool copyTexture(ID3D11ShaderResourceView *source, const gl::Rectangle &sourceArea, unsigned int sourceWidth, unsigned int sourceHeight,
1459d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com                     ID3D11RenderTargetView *dest, const gl::Rectangle &destArea, unsigned int destWidth, unsigned int destHeight, GLenum destFormat);
1469d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com
147ea4a0c6671ab0b079ed5e0313699742d1c6a9bd1shannon.woods@transgaming.com    virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
1486c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com                          bool blitRenderTarget, bool blitDepthStencil);
1496c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com    virtual void readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
1506c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com                            GLsizei outputPitch, bool packReverseRowOrder, GLint packAlignment, void* pixels);
1516c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com
152a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com    // RenderTarget creation
153f2423659230818b46346496f5212fc3d1f0b537fdaniel@transgaming.com    virtual RenderTarget *createRenderTarget(SwapChain *swapChain, bool depth);
154f2423659230818b46346496f5212fc3d1f0b537fdaniel@transgaming.com    virtual RenderTarget *createRenderTarget(int width, int height, GLenum format, GLsizei samples, bool depth);
155f2423659230818b46346496f5212fc3d1f0b537fdaniel@transgaming.com
156a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com    // Shader operations
15769ff7766ef5fb53d02dc1ff37066bead3a570abdshannon.woods@transgaming.com    virtual ShaderExecutable *loadExecutable(const void *function, size_t length, rx::ShaderType type);
15869ff7766ef5fb53d02dc1ff37066bead3a570abdshannon.woods@transgaming.com    virtual ShaderExecutable *compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, rx::ShaderType type);
159a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com
160244e1838a3d475c26e6bc1830aab5e87f8bf8c48daniel@transgaming.com    // Image operations
161244e1838a3d475c26e6bc1830aab5e87f8bf8c48daniel@transgaming.com    virtual Image *createImage();
162f721fdbdaa5c675e60115e8f0203956f848c1fc1daniel@transgaming.com    virtual void generateMipmap(Image *dest, Image *source);
163413d27110d15e3f218ab8b1db01d08cdc036edb6daniel@transgaming.com    virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
164413d27110d15e3f218ab8b1db01d08cdc036edb6daniel@transgaming.com    virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
165413d27110d15e3f218ab8b1db01d08cdc036edb6daniel@transgaming.com    virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
166244e1838a3d475c26e6bc1830aab5e87f8bf8c48daniel@transgaming.com
1673f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com    // Buffer creation
1683f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com    virtual VertexBuffer *createVertexBuffer();
1690b6d7741f627082bc197034e43da47e975909238daniel@transgaming.com    virtual IndexBuffer *createIndexBuffer();
1704e52b6356288e7d6aa46ae77e4b2ada8aee4e3c3shannon.woods@transgaming.com    virtual BufferStorage *createBufferStorage();
1713f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com
172cfe787e70c714a2163e67985de34d219aea7f2a7shannon.woods@transgaming.com    // Query and Fence creation
17350df6c5f8a63c7fba902e4888cf9d63830f96f1eshannon.woods@transgaming.com    virtual QueryImpl *createQuery(GLenum type);
174cfe787e70c714a2163e67985de34d219aea7f2a7shannon.woods@transgaming.com    virtual FenceImpl *createFence();
17550df6c5f8a63c7fba902e4888cf9d63830f96f1eshannon.woods@transgaming.com
1761d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    // D3D11-renderer specific methods
17725072f677ccc840ecd35b873fd59046e2e6878fcdaniel@transgaming.com    ID3D11Device *getDevice() { return mDevice; }
1781d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
179a60160b0c85ea5030edea66590e1475bed8c9a7cdaniel@transgaming.com    IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
1801d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
181d9071b19428bd58297f7dabb4c5ed4b9689dca0dshannon.woods%transgaming.com@gtempaccount.com    bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
18252edb4a46c5303a84788d9fe25a36fef70d684e8shannon.woods%transgaming.com@gtempaccount.com    void unapplyRenderTargets();
18352edb4a46c5303a84788d9fe25a36fef70d684e8shannon.woods%transgaming.com@gtempaccount.com    void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
184fdeacb8176e34112da113b3bb7e97692fb557419shannon.woods@transgaming.com
185b0f1b486b2320657f6783dd1442c9cef5f601e4bshannonwoods@chromium.org    virtual bool getLUID(LUID *adapterLuid) const;
186b0f1b486b2320657f6783dd1442c9cef5f601e4bshannonwoods@chromium.org
1871d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com  private:
1881d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(Renderer11);
1891d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
190c51143010f903323679266df2aa47a233c964f12daniel@transgaming.com    void drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer);
19100032cb2c77dfe812dda092ecfd938e66dce7f3cshannon.woods@transgaming.com    void drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer, int instances);
192c51143010f903323679266df2aa47a233c964f12daniel@transgaming.com
193ee42a0a066e2e1b2feb220e9f250b680b3536c40daniel@transgaming.com    void readTextureData(ID3D11Texture2D *texture, unsigned int subResource, const gl::Rectangle &area,
194ee42a0a066e2e1b2feb220e9f250b680b3536c40daniel@transgaming.com                         GLenum format, GLenum type, GLsizei outputPitch, bool packReverseRowOrder,
195ee42a0a066e2e1b2feb220e9f250b680b3536c40daniel@transgaming.com                         GLint packAlignment, void *pixels);
196ee42a0a066e2e1b2feb220e9f250b680b3536c40daniel@transgaming.com
197132862fa39d82da9d18120e028dae33d925a1962shannonwoods@chromium.org    void maskedClear(const gl::ClearParameters &clearParams, bool usingExtendedDrawBuffers);
1988ce2f8f8e9597c045e6cf0c150c9302e7f3466b6shannon.woods@transgaming.com    rx::Range getViewportBounds() const;
19934f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com
2000f05d80fe75dbd13728356437965aa95bf96e27cshannon.woods%transgaming.com@gtempaccount.com    bool blitRenderbufferRect(const gl::Rectangle &readRect, const gl::Rectangle &drawRect, RenderTarget *readRenderTarget,
2010f05d80fe75dbd13728356437965aa95bf96e27cshannon.woods%transgaming.com@gtempaccount.com                              RenderTarget *drawRenderTarget, bool wholeBufferCopy);
202d67f9ce00a1ff8289f330bb8ca9233fe38a48be2shannon.woods@transgaming.com    ID3D11Texture2D *resolveMultisampledTexture(ID3D11Texture2D *source, unsigned int subresource);
203d67f9ce00a1ff8289f330bb8ca9233fe38a48be2shannon.woods@transgaming.com
2041d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    HMODULE mD3d11Module;
2051d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    HMODULE mDxgiModule;
2061d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    HDC mDc;
2071d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
2081d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    bool mDeviceLost;
2091d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
2101d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    void initializeDevice();
2111d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    void releaseDeviceResources();
212ca1ac1f113e18815bab14a3465039bd57b41c10ddaniel@transgaming.com    int getMinorShaderModel() const;
213ddd6c80eaf97858d74d2e2effca558051fac5481shannon.woods@transgaming.com    void release();
2141d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
215f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    RenderStateCache mStateCache;
216f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com
2179cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    // Support flags
2189cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat16TextureSupport;
2199cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat16FilterSupport;
2209cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat16RenderSupport;
2219cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com
2229cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat32TextureSupport;
2239cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat32FilterSupport;
2249cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com    bool mFloat32RenderSupport;
2259cdced65768f4f4ee407768433e824aa385a2b18shannon.woods@transgaming.com
22609f326b0e79447d84e791c6611858e0ba67c41a5shannon.woods@transgaming.com    bool mDXT1TextureSupport;
22709f326b0e79447d84e791c6611858e0ba67c41a5shannon.woods@transgaming.com    bool mDXT3TextureSupport;
22809f326b0e79447d84e791c6611858e0ba67c41a5shannon.woods@transgaming.com    bool mDXT5TextureSupport;
22909f326b0e79447d84e791c6611858e0ba67c41a5shannon.woods@transgaming.com
230cf103f361c2ae24183f0bfd323303a97196a34d5shannon.woods@transgaming.com    bool mDepthTextureSupport;
231cf103f361c2ae24183f0bfd323303a97196a34d5shannon.woods@transgaming.com
232df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    // Multisample format support
233df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    struct MultisampleSupportInfo
234df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    {
235df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com        unsigned int qualityLevels[D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT];
236df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    };
237df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com
238df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    typedef std::unordered_map<DXGI_FORMAT, MultisampleSupportInfo> MultisampleSupportMap;
239df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    MultisampleSupportMap mMultisampleSupportMap;
240df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com
241df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com    unsigned int mMaxSupportedSamples;
242df2fd572d419751477490fef10db8608e5d73545shannon.woods@transgaming.com
2437b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com    // current render target states
244d6df671cdce86159d02b8d31485d7c6d5c4e1255shannon.woods%transgaming.com@gtempaccount.com    unsigned int mAppliedRenderTargetSerials[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS];
24580fc3326493eee780094e1f28e60d6e8c27fbdfddaniel@transgaming.com    unsigned int mAppliedDepthbufferSerial;
24680fc3326493eee780094e1f28e60d6e8c27fbdfddaniel@transgaming.com    unsigned int mAppliedStencilbufferSerial;
2477b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com    bool mDepthStencilInitialized;
2487b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com    bool mRenderTargetDescInitialized;
2497b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com    rx::RenderTarget::Desc mRenderTargetDesc;
2507b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com    unsigned int mCurDepthSize;
25180fc3326493eee780094e1f28e60d6e8c27fbdfddaniel@transgaming.com    unsigned int mCurStencilSize;
2527b6b83ea29cdea7c48f1bc3810bf66e60d9d2137daniel@transgaming.com
25354de24f9b9d5752e5385d119c2a401b89800952ddaniel@transgaming.com    // Currently applied sampler states
254233fe9548a2b166d3ccb09a4a7af273fab6dbf2cshannon.woods@transgaming.com    bool mForceSetVertexSamplerStates[gl::IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS];
255233fe9548a2b166d3ccb09a4a7af273fab6dbf2cshannon.woods@transgaming.com    gl::SamplerState mCurVertexSamplerStates[gl::IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS];
25654de24f9b9d5752e5385d119c2a401b89800952ddaniel@transgaming.com
25754de24f9b9d5752e5385d119c2a401b89800952ddaniel@transgaming.com    bool mForceSetPixelSamplerStates[gl::MAX_TEXTURE_IMAGE_UNITS];
25854de24f9b9d5752e5385d119c2a401b89800952ddaniel@transgaming.com    gl::SamplerState mCurPixelSamplerStates[gl::MAX_TEXTURE_IMAGE_UNITS];
25954de24f9b9d5752e5385d119c2a401b89800952ddaniel@transgaming.com
260e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com    // Currently applied textures
261233fe9548a2b166d3ccb09a4a7af273fab6dbf2cshannon.woods@transgaming.com    unsigned int mCurVertexTextureSerials[gl::IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS];
262e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com    unsigned int mCurPixelTextureSerials[gl::MAX_TEXTURE_IMAGE_UNITS];
263e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com
264f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    // Currently applied blend state
265f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    bool mForceSetBlendState;
266f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    gl::BlendState mCurBlendState;
267f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    gl::Color mCurBlendColor;
268f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com    unsigned int mCurSampleMask;
269f8ba1091ee5c252c430d56256d3fd081ae98689bdaniel@transgaming.com
270dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    // Currently applied rasterizer state
271dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    bool mForceSetRasterState;
272dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    gl::RasterizerState mCurRasterState;
273dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com
2745503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com    // Currently applied depth stencil state
2755503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com    bool mForceSetDepthStencilState;
2765503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com    gl::DepthStencilState mCurDepthStencilState;
2775503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com    int mCurStencilRef;
2785503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com    int mCurStencilBackRef;
2795503fd031e3e5491d998a643218b1aa6a8c022c9daniel@transgaming.com
280dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    // Currently applied scissor rectangle
281dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    bool mForceSetScissor;
282d55e8c1b48f16f93cb89798fc3640047eb74d3fddaniel@transgaming.com    bool mScissorEnabled;
283dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com    gl::Rectangle mCurScissor;
284dcf1e676adecaa793953f46739f24e7ef4efba8bdaniel@transgaming.com
2855367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com    // Currently applied viewport
2865367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com    bool mForceSetViewport;
2875367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com    gl::Rectangle mCurViewport;
2885367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com    float mCurNear;
2895367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com    float mCurFar;
2905367004c2b297b872d37e64bc83c178c6d188d83daniel@transgaming.com
29193a5ce96058074d20a7bd94185a16bde2a8aad02Geoff Lang    // Currently applied primitive topology
29293a5ce96058074d20a7bd94185a16bde2a8aad02Geoff Lang    D3D11_PRIMITIVE_TOPOLOGY mCurrentPrimitiveTopology;
29393a5ce96058074d20a7bd94185a16bde2a8aad02Geoff Lang
294c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com    unsigned int mAppliedIBSerial;
295a1229a3a67bcbe9be1381b787be3669c07548c3fshannon.woods@transgaming.com    unsigned int mAppliedStorageIBSerial;
2967fbf486e4bf16530f84a88fa139641d82b334254daniel@transgaming.com    unsigned int mAppliedIBOffset;
2977fbf486e4bf16530f84a88fa139641d82b334254daniel@transgaming.com
298e499141632259ca0189c07c5eb947b728ff4ebbedaniel@transgaming.com    unsigned int mAppliedProgramBinarySerial;
299dd2524c46ed4689c27adf3f9959435fd2906b621shannon.woods@transgaming.com    bool mIsGeometryShaderActive;
300e499141632259ca0189c07c5eb947b728ff4ebbedaniel@transgaming.com
3015fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    dx_VertexConstants mVertexConstants;
3025fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    dx_VertexConstants mAppliedVertexConstants;
3035fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    ID3D11Buffer *mDriverConstantBufferVS;
304a6abd8914f2d684023b0ec434ba8c6087905aba8Geoff Lang    ID3D11Buffer *mCurrentVertexConstantBuffer;
3055fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com
3065fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    dx_PixelConstants mPixelConstants;
3075fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    dx_PixelConstants mAppliedPixelConstants;
3085fb979d55dfac1f6509ac6d10bc8fa22719bcc29shannon.woods@transgaming.com    ID3D11Buffer *mDriverConstantBufferPS;
309a6abd8914f2d684023b0ec434ba8c6087905aba8Geoff Lang    ID3D11Buffer *mCurrentPixelConstantBuffer;
310a6abd8914f2d684023b0ec434ba8c6087905aba8Geoff Lang
311a6abd8914f2d684023b0ec434ba8c6087905aba8Geoff Lang    ID3D11Buffer *mCurrentGeometryConstantBuffer;
312ed36abd83e40bb1c0f4af9ea7314906b86ea3cdddaniel@transgaming.com
313c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com    // Vertex, index and input layouts
314c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com    VertexDataManager *mVertexDataManager;
315c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com    IndexDataManager *mIndexDataManager;
316c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com    InputLayoutCache mInputLayoutCache;
317c5431eb29f8ffa0088b750139802fceb31e1cc33daniel@transgaming.com
318c51143010f903323679266df2aa47a233c964f12daniel@transgaming.com    StreamingIndexBufferInterface *mLineLoopIB;
3194fd1f989feaadab717e505c54dee64eff756c5abdaniel@transgaming.com    StreamingIndexBufferInterface *mTriangleFanIB;
320c51143010f903323679266df2aa47a233c964f12daniel@transgaming.com
3219d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    // Texture copy resources
3229d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    bool mCopyResourcesInitialized;
3239d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11Buffer *mCopyVB;
3249d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11SamplerState *mCopySampler;
3259d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11InputLayout *mCopyIL;
3269d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11VertexShader *mCopyVS;
3279d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11PixelShader *mCopyRGBAPS;
3289d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11PixelShader *mCopyRGBPS;
3299d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11PixelShader *mCopyLumPS;
3309d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com    ID3D11PixelShader *mCopyLumAlphaPS;
3319d971ffdc1f6a082980e4a6ec4cd9c6e695460e8shannon.woods@transgaming.com
33234f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    // Masked clear resources
33334f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    bool mClearResourcesInitialized;
33434f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    ID3D11Buffer *mClearVB;
33534f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    ID3D11InputLayout *mClearIL;
33634f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    ID3D11VertexShader *mClearVS;
337132862fa39d82da9d18120e028dae33d925a1962shannonwoods@chromium.org    ID3D11PixelShader *mClearSinglePS;
338132862fa39d82da9d18120e028dae33d925a1962shannonwoods@chromium.org    ID3D11PixelShader *mClearMultiplePS;
33934f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    ID3D11RasterizerState *mClearScissorRS;
34034f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com    ID3D11RasterizerState *mClearNoScissorRS;
34134f507ce49938eb1f3cd9e2780ea53a72795a20ashannon.woods@transgaming.com
342bdf787fcd74c684f3374bbb4dc7c3e18e38996cadaniel@transgaming.com    // Sync query
343bdf787fcd74c684f3374bbb4dc7c3e18e38996cadaniel@transgaming.com    ID3D11Query *mSyncQuery;
344bdf787fcd74c684f3374bbb4dc7c3e18e38996cadaniel@transgaming.com
34525072f677ccc840ecd35b873fd59046e2e6878fcdaniel@transgaming.com    ID3D11Device *mDevice;
34625072f677ccc840ecd35b873fd59046e2e6878fcdaniel@transgaming.com    D3D_FEATURE_LEVEL mFeatureLevel;
3471d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com    ID3D11DeviceContext *mDeviceContext;
34865e653778bb96bcb8843fc86df0b9981450a9afddaniel@transgaming.com    IDXGIAdapter *mDxgiAdapter;
3491f811f55df504216a4d6c5e0921110639f138ac9daniel@transgaming.com    DXGI_ADAPTER_DESC mAdapterDescription;
3501f811f55df504216a4d6c5e0921110639f138ac9daniel@transgaming.com    char mDescription[128];
351a60160b0c85ea5030edea66590e1475bed8c9a7cdaniel@transgaming.com    IDXGIFactory *mDxgiFactory;
352bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com
353bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com    // Cached device caps
354bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com    bool mBGRATextureSupport;
3551d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com};
3561d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com
3571d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com}
3581d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com#endif // LIBGLESV2_RENDERER_RENDERER11_H_
359