12507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com// 2eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang// Copyright (c) 2012-2014 The ANGLE Project Authors. All rights reserved. 32507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 42507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com// found in the LICENSE file. 52507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com// 62507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 71d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com// Renderer9.h: Defines a back-end specific class for the D3D9 renderer. 82507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 92507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com#ifndef LIBGLESV2_RENDERER_RENDERER9_H_ 102507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com#define LIBGLESV2_RENDERER_RENDERER9_H_ 112507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 122507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com#include "common/angleutils.h" 13a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org#include "common/mathutil.h" 14dad5ed3953e4f31c35b9fd67901fb78dbe140dd0Geoff Lang#include "libGLESv2/renderer/d3d/HLSLCompiler.h" 15c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d9/ShaderCache.h" 16c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d9/VertexDeclarationCache.h" 172507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com#include "libGLESv2/renderer/Renderer.h" 18d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com#include "libGLESv2/renderer/RenderTarget.h" 1967094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.com 20486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comnamespace gl 21486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com{ 223c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madillclass FramebufferAttachment; 23486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com} 24486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com 25312404870905e1eff46e21632c1c2f2143af4694daniel@transgaming.comnamespace rx 2667094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.com{ 2767094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.comclass VertexDataManager; 28486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass IndexDataManager; 2950cc725131415c0448592104ae2ad5f2079ebc1bdaniel@transgaming.comclass StreamingIndexBufferInterface; 3023ba30e4b0028998ca2a53f0553e2002bf755d74Geoff Langclass StaticIndexBufferInterface; 3191207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.comstruct TranslatedAttribute; 32dce735c3ee9d17f1b8f1174a82ce7bac61b78c50Geoff Langclass Blit9; 332507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 342507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.comclass Renderer9 : public Renderer 352507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com{ 362507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com public: 37591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang Renderer9(egl::Display *display, EGLNativeDisplayType hDc, EGLint requestedDisplay); 382507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual ~Renderer9(); 392507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 40b64ed2824bfd5d67acb415300427edc40ae79253daniel@transgaming.com static Renderer9 *makeRenderer9(Renderer *renderer); 41b64ed2824bfd5d67acb415300427edc40ae79253daniel@transgaming.com 422507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual EGLint initialize(); 432507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual bool resetDevice(); 442507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 452507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual int generateConfigs(ConfigDesc **configDescList); 462507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual void deleteConfigs(ConfigDesc *configDescList); 472507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 4891207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com void startScene(); 4991207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com void endScene(); 502507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 512507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual void sync(bool block); 52b9bb27938fae86822453d7cba1bba6c704000a8adaniel@transgaming.com 53b9bb27938fae86822453d7cba1bba6c704000a8adaniel@transgaming.com virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat); 54b9bb27938fae86822453d7cba1bba6c704000a8adaniel@transgaming.com 552507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com IDirect3DQuery9* allocateEventQuery(); 562507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com void freeEventQuery(IDirect3DQuery9* query); 572507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 582507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com // resource creation 59113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com IDirect3DVertexShader9 *createVertexShader(const DWORD *function, size_t length); 60113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com IDirect3DPixelShader9 *createPixelShader(const DWORD *function, size_t length); 61113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com HRESULT createVertexBuffer(UINT Length, DWORD Usage, IDirect3DVertexBuffer9 **ppVertexBuffer); 62113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com HRESULT createIndexBuffer(UINT Length, DWORD Usage, D3DFORMAT Format, IDirect3DIndexBuffer9 **ppIndexBuffer); 63e2e0ce0cd1b4b1845c5df4fc87d75b36ef6a8d6cGeoff Lang virtual void generateSwizzle(gl::Texture *texture); 642507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler); 652507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture); 662507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 671bddfb984b4ce6f8422a877097e60aca956f5661shannonwoods@chromium.org virtual bool setUniformBuffers(const gl::Buffer *vertexUniformBuffers[], const gl::Buffer *fragmentUniformBuffers[]); 681bddfb984b4ce6f8422a877097e60aca956f5661shannonwoods@chromium.org 69237bc7e55bb631ebd1f5e7981b30b8a2eafbb606daniel@transgaming.com virtual void setRasterizerState(const gl::RasterizerState &rasterState); 70c142e9da6a66c447bc0e519505fe9cf6adcc6ee6Geoff Lang virtual void setBlendState(gl::Framebuffer *framebuffer, const gl::BlendState &blendState, const gl::ColorF &blendColor, 71493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com unsigned int sampleMask); 7208c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, 733a0ef48010e6a3e95c9d72f982ab6d3d4cad0c6fdaniel@transgaming.com int stencilBackRef, bool frontFaceCCW); 74493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 75d55e8c1b48f16f93cb89798fc3640047eb74d3fddaniel@transgaming.com virtual void setScissorRectangle(const gl::Rectangle &scissor, bool enabled); 7602f18b883992598ffc22c2747720f17da65a330eGeoff Lang virtual void setViewport(const gl::Rectangle &viewport, float zNear, float zFar, GLenum drawMode, GLenum frontFace, 770b236e2ec3c32b79d1abca881a32cbf53027e3d3shannon.woods@transgaming.com bool ignoreViewport); 78493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 79ae39ee280d5e15b8064402b75e8daecbe4146b98daniel@transgaming.com virtual bool applyRenderTarget(gl::Framebuffer *frameBuffer); 8004fb89ad059cba1fbd14507fe58c9a700fe0de08Geoff Lang virtual void applyShaders(gl::ProgramBinary *programBinary, const gl::VertexFormat inputLayout[], const gl::Framebuffer *framebuffer, 8104fb89ad059cba1fbd14507fe58c9a700fe0de08Geoff Lang bool rasterizerDiscard, bool transformFeedbackActive); 828ff21aeaabebd0877c1cc48fdac718509f23617aJamie Madill virtual void applyUniforms(const gl::ProgramBinary &programBinary); 8391207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com virtual bool applyPrimitiveType(GLenum primitiveType, GLsizei elementCount); 84f7100b981f0856b238252e6052509eecf8e5adedGeoff Lang virtual gl::Error applyVertexBuffer(gl::ProgramBinary *programBinary, const gl::VertexAttribute vertexAttributes[], const gl::VertexAttribCurrentValueData currentValues[], 85f7100b981f0856b238252e6052509eecf8e5adedGeoff Lang GLint first, GLsizei count, GLsizei instances); 86c9e69b1941522095a3878d9e1501511ab4722139Geoff Lang virtual gl::Error applyIndexBuffer(const GLvoid *indices, gl::Buffer *elementArrayBuffer, GLsizei count, GLenum mode, GLenum type, TranslatedIndexData *indexInfo); 87493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 88eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang virtual void applyTransformFeedbackBuffers(gl::Buffer *transformFeedbackBuffers[], GLintptr offsets[]); 89eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang 904c5c6bbb82f96de2d3abe0c7c7c7d72fba5217c9Geoff Lang virtual void drawArrays(GLenum mode, GLsizei count, GLsizei instances, bool transformFeedbackActive); 914c5c6bbb82f96de2d3abe0c7c7c7d72fba5217c9Geoff Lang virtual void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, 924c5c6bbb82f96de2d3abe0c7c7c7d72fba5217c9Geoff Lang gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances); 9367094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.com 94cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang virtual gl::Error clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer); 95d084c620c0d275be03b10e1f802582dd278ff6fedaniel@transgaming.com 96c43a60557d5e25cfb80cb0cd3c2a01920251745fdaniel@transgaming.com virtual void markAllStateDirty(); 97c43a60557d5e25cfb80cb0cd3c2a01920251745fdaniel@transgaming.com 982507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com // lost device 99eb049e2c2de52176f2a755460d421889fda9ed19shannon.woods@transgaming.com void notifyDeviceLost(); 1002507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual bool isDeviceLost(); 1012507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual bool testDeviceLost(bool notify); 1022507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual bool testDeviceResettable(); 1032507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 1041d6aff2bc3bdd2c58e051f61cbeb491c30ec852fdaniel@transgaming.com IDirect3DDevice9 *getDevice() { return mDevice; } 1052507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual DWORD getAdapterVendor() const; 106ca1ac1f113e18815bab14a3465039bd57b41c10ddaniel@transgaming.com virtual std::string getRendererDescription() const; 1072507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual GUID getAdapterIdentifier() const; 1082507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 109d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com virtual unsigned int getReservedVertexUniformVectors() const; 110d8136cbbc2a2d9249ef1acad54fb875fe521eee5shannon.woods@transgaming.com virtual unsigned int getReservedFragmentUniformVectors() const; 1112b5442236b5acaa150e1a608fa7c97c5e1b2e19eshannonwoods@chromium.org virtual unsigned int getReservedVertexUniformBuffers() const; 1122b5442236b5acaa150e1a608fa7c97c5e1b2e19eshannonwoods@chromium.org virtual unsigned int getReservedFragmentUniformBuffers() const; 1132507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual bool getShareHandleSupport() const; 1148d2f086ad33f82aa1a01fe86a1bbfa6eba47e224shannon.woods@transgaming.com virtual bool getPostSubBufferSupport() const; 1152507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 1169549bead5dc8bb07a21296ea8bea97939285c699daniel@transgaming.com virtual int getMajorShaderModel() const; 117204677af271502bb1f91d4abd0cf8ab4ab5b49d0daniel@transgaming.com DWORD getCapsDeclTypes() const; 1182507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual int getMinSwapInterval() const; 1192507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com virtual int getMaxSwapInterval() const; 1202507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 121a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com // Pixel operations 1222f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source); 1232f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source); 1242f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source); 1252f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source); 126856d9d4b6c3ddf302a988037151a2d98334fa2ddJamie Madill 127856d9d4b6c3ddf302a988037151a2d98334fa2ddJamie Madill virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, 1282f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level); 129856d9d4b6c3ddf302a988037151a2d98334fa2ddJamie Madill virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, 1302f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level); 131856d9d4b6c3ddf302a988037151a2d98334fa2ddJamie Madill virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, 1322f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level); 133856d9d4b6c3ddf302a988037151a2d98334fa2ddJamie Madill virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, 1342f06dbfb3f4bd815a3fe5b52638b091c1e356a04Jamie Madill GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level); 135de8a7fff02ab478458e4f511719e15f141c90fe7daniel@transgaming.com 136ea4a0c6671ab0b079ed5e0313699742d1c6a9bd1shannon.woods@transgaming.com virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, 137125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter); 13863d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang 13963d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang virtual gl::Error readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, 14063d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels); 1416c87217467896d150743db19e2ed664ceec56785daniel@transgaming.com 142a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com // RenderTarget creation 143f2423659230818b46346496f5212fc3d1f0b537fdaniel@transgaming.com virtual RenderTarget *createRenderTarget(SwapChain *swapChain, bool depth); 144a2d97f13f648c978e942ce55df7a940d9944ef2eGeoff Lang virtual RenderTarget *createRenderTarget(int width, int height, GLenum format, GLsizei samples); 145f2423659230818b46346496f5212fc3d1f0b537fdaniel@transgaming.com 146f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones // Shader creation 147f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones virtual ShaderImpl *createShader(GLenum type); 148c9610c51e9c02ba67c735ff449a70164cda12a60Brandon Jones virtual ProgramImpl *createProgram(); 149f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones 150a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com // Shader operations 151f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones virtual void releaseShaderCompiler(); 15248dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang virtual ShaderExecutable *loadExecutable(const void *function, size_t length, rx::ShaderType type, 15348dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang const std::vector<gl::LinkedVarying> &transformFeedbackVaryings, 15448dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang bool separatedOutputBuffers); 15548dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang virtual ShaderExecutable *compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, rx::ShaderType type, 15648dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang const std::vector<gl::LinkedVarying> &transformFeedbackVaryings, 15748dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang bool separatedOutputBuffers, D3DWorkaroundType workaround); 1588ff21aeaabebd0877c1cc48fdac718509f23617aJamie Madill virtual UniformStorage *createUniformStorage(size_t storageSize); 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); 164bf712d0a32847868913a3521b44912a5c29f08b8Nicolas Capens virtual TextureStorage *createTextureStorage2D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels); 165bf712d0a32847868913a3521b44912a5c29f08b8Nicolas Capens virtual TextureStorage *createTextureStorageCube(GLenum internalformat, bool renderTarget, int size, int levels); 166bf712d0a32847868913a3521b44912a5c29f08b8Nicolas Capens virtual TextureStorage *createTextureStorage3D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels); 167bf712d0a32847868913a3521b44912a5c29f08b8Nicolas Capens virtual TextureStorage *createTextureStorage2DArray(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels); 168244e1838a3d475c26e6bc1830aab5e87f8bf8c48daniel@transgaming.com 169f47bebc401c034519a805fcdb28e7e456776115cBrandon Jones // Texture creation 1706053a52e8d529c1bc7d35a8f92430bf8d93938b2Brandon Jones virtual TextureImpl *createTexture(GLenum target); 171f47bebc401c034519a805fcdb28e7e456776115cBrandon Jones 1723f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com // Buffer creation 173d38f926ad0a14e8927db2468df840a3ecf330924Brandon Jones virtual BufferImpl *createBuffer(); 1743f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com virtual VertexBuffer *createVertexBuffer(); 1750b6d7741f627082bc197034e43da47e975909238daniel@transgaming.com virtual IndexBuffer *createIndexBuffer(); 1763f255b48a70b8f720d5da7cf2046eb81ba6606c2daniel@transgaming.com 1775bf98290459ca4ccab2f5be62f5fba2337fe8b7aBrandon Jones // Vertex Array creation 1785bf98290459ca4ccab2f5be62f5fba2337fe8b7aBrandon Jones virtual VertexArrayImpl *createVertexArray(); 1795bf98290459ca4ccab2f5be62f5fba2337fe8b7aBrandon Jones 180cfe787e70c714a2163e67985de34d219aea7f2a7shannon.woods@transgaming.com // Query and Fence creation 18150df6c5f8a63c7fba902e4888cf9d63830f96f1eshannon.woods@transgaming.com virtual QueryImpl *createQuery(GLenum type); 182cfe787e70c714a2163e67985de34d219aea7f2a7shannon.woods@transgaming.com virtual FenceImpl *createFence(); 18350df6c5f8a63c7fba902e4888cf9d63830f96f1eshannon.woods@transgaming.com 184db8ae16b8bbf6999a4f07dc65b0918938d78394cKenneth Russell // Transform Feedback creation 185db8ae16b8bbf6999a4f07dc65b0918938d78394cKenneth Russell virtual TransformFeedbackImpl* createTransformFeedback(); 186db8ae16b8bbf6999a4f07dc65b0918938d78394cKenneth Russell 187a21eea36fbb03d7d680ca7f472fcf96b1bbc1f63Jamie Madill // Buffer-to-texture and Texture-to-buffer copies 188005df41f8900641ed1df60700c8e2eca659a33cbGeoff Lang virtual bool supportsFastCopyBufferToTexture(GLenum internalFormat) const; 189a21eea36fbb03d7d680ca7f472fcf96b1bbc1f63Jamie Madill virtual bool fastCopyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTarget *destRenderTarget, 190a21eea36fbb03d7d680ca7f472fcf96b1bbc1f63Jamie Madill GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea); 191a21eea36fbb03d7d680ca7f472fcf96b1bbc1f63Jamie Madill 192a9c7142435f100d43684a0efe8894cbe42ee8fccdaniel@transgaming.com // D3D9-renderer specific methods 193de8a7fff02ab478458e4f511719e15f141c90fe7daniel@transgaming.com bool boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest); 194de8a7fff02ab478458e4f511719e15f141c90fe7daniel@transgaming.com 1952507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com D3DPOOL getTexturePool(DWORD usage) const; 1962507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 1976e4f2a6b70e12750a1e79c3dcee6c6dd5cfb67feshannonwoods@chromium.org virtual bool getLUID(LUID *adapterLuid) const; 19895ffb8683f3bf1874f0b4c41491633098ee08ab7Jamie Madill virtual rx::VertexConversionType getVertexConversionType(const gl::VertexFormat &vertexFormat) const; 19995ffb8683f3bf1874f0b4c41491633098ee08ab7Jamie Madill virtual GLenum getVertexComponentType(const gl::VertexFormat &vertexFormat) const; 2006e4f2a6b70e12750a1e79c3dcee6c6dd5cfb67feshannonwoods@chromium.org 2012507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com private: 2022507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(Renderer9); 2032507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 204c0b9ef4bce04077046ca57b9bc249f26e42d07caGeoff Lang virtual void generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps, gl::Extensions *outExtensions) const; 205cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang 206cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang void release(); 207b7935e51b6f3d163c29137da9ad72ecb8dad59c8Jamie Madill 208834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill void applyUniformnfv(gl::LinkedUniform *targetUniform, const GLfloat *v); 209834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill void applyUniformniv(gl::LinkedUniform *targetUniform, const GLint *v); 210834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill void applyUniformnbv(gl::LinkedUniform *targetUniform, const GLint *v); 211b6e55102440fb32157ee2cbc2d35aa21d46454f7daniel@transgaming.com 21291207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com void drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer); 213f8c2f5cbfd1b2b75501b6e8a5539f491f4f0a5c7Geoff Lang void drawIndexedPoints(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer); 21491207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com 21523ba30e4b0028998ca2a53f0553e2002bf755d74Geoff Lang StaticIndexBufferInterface *getCountingIB(size_t count); 21623ba30e4b0028998ca2a53f0553e2002bf755d74Geoff Lang 2171d80eeec4391c7b9606baf759b830cd4d69acd28daniel@transgaming.com bool copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged); 2183c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madill gl::FramebufferAttachment *getNullColorbuffer(gl::FramebufferAttachment *depthbuffer); 2192507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 220113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com D3DPOOL getBufferPool(DWORD usage) const; 221113f0eb7172eb8d3a31a8224d555db10458bde08daniel@transgaming.com 2222507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com HMODULE mD3d9Module; 2232507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com HDC mDc; 2242507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 2252507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com void initializeDevice(); 2262507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com D3DPRESENT_PARAMETERS getDefaultPresentParameters(); 2272507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com void releaseDeviceResources(); 2282507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 229b7935e51b6f3d163c29137da9ad72ecb8dad59c8Jamie Madill HRESULT getDeviceStatusCode(); 23088f779dd08d4fb0593cc2ec9bfd908e90146c16eJamie Madill bool isRemovedDeviceResettable() const; 23188f779dd08d4fb0593cc2ec9bfd908e90146c16eJamie Madill bool resetRemovedDevice(); 232b7935e51b6f3d163c29137da9ad72ecb8dad59c8Jamie Madill 2332507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com UINT mAdapter; 2342507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com D3DDEVTYPE mDeviceType; 2352507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com IDirect3D9 *mD3d9; // Always valid after successful initialization. 2362507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com IDirect3D9Ex *mD3d9Ex; // Might be null if D3D9Ex is not supported. 2372507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com IDirect3DDevice9 *mDevice; 2382507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com IDirect3DDevice9Ex *mDeviceEx; // Might be null if D3D9Ex is not supported. 2392507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 240dad5ed3953e4f31c35b9fd67901fb78dbe140dd0Geoff Lang HLSLCompiler mCompiler; 241dad5ed3953e4f31c35b9fd67901fb78dbe140dd0Geoff Lang 242dce735c3ee9d17f1b8f1174a82ce7bac61b78c50Geoff Lang Blit9 *mBlit; 243de8a7fff02ab478458e4f511719e15f141c90fe7daniel@transgaming.com 2442507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com HWND mDeviceWindow; 2452507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 2462507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com bool mDeviceLost; 2472507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com D3DCAPS9 mDeviceCaps; 2482507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com D3DADAPTER_IDENTIFIER9 mAdapterIdentifier; 2492507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 25091207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com D3DPRIMITIVETYPE mPrimitiveType; 25191207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com int mPrimitiveCount; 25291207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com GLsizei mRepeatDraw; 25391207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com 2542507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com bool mSceneStarted; 2552507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com int mMinSwapInterval; 2562507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com int mMaxSwapInterval; 2572507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 258669c99595066ec7476be84a4efc9895d49515fecdaniel@transgaming.com bool mVertexTextureSupport; 259669c99595066ec7476be84a4efc9895d49515fecdaniel@transgaming.com 260220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com // current render target states 261220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com unsigned int mAppliedRenderTargetSerial; 262220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com unsigned int mAppliedDepthbufferSerial; 263220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com unsigned int mAppliedStencilbufferSerial; 264220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com bool mDepthStencilInitialized; 265220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com bool mRenderTargetDescInitialized; 266220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com rx::RenderTarget::Desc mRenderTargetDesc; 2673a0ef48010e6a3e95c9d72f982ab6d3d4cad0c6fdaniel@transgaming.com unsigned int mCurStencilSize; 268237bc7e55bb631ebd1f5e7981b30b8a2eafbb606daniel@transgaming.com unsigned int mCurDepthSize; 269220e79a62ebbafd52e64ced02bc965c3f5ad5f4bdaniel@transgaming.com 2700393e5b5ba8a142cea876743b848de129b17a11bdaniel@transgaming.com IDirect3DStateBlock9 *mMaskedClearSavedState; 2710393e5b5ba8a142cea876743b848de129b17a11bdaniel@transgaming.com 272493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com // previously set render states 273493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com bool mForceSetDepthStencilState; 274493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com gl::DepthStencilState mCurDepthStencilState; 27508c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com int mCurStencilRef; 27608c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com int mCurStencilBackRef; 277493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com bool mCurFrontFaceCCW; 278493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 279493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com bool mForceSetRasterState; 280493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com gl::RasterizerState mCurRasterState; 281493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 282493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com bool mForceSetScissor; 283493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com gl::Rectangle mCurScissor; 284d55e8c1b48f16f93cb89798fc3640047eb74d3fddaniel@transgaming.com bool mScissorEnabled; 285493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 28683e80ee442d5f793b89aaef7d1b5db3cde2f4b4ddaniel@transgaming.com bool mForceSetViewport; 28783e80ee442d5f793b89aaef7d1b5db3cde2f4b4ddaniel@transgaming.com gl::Rectangle mCurViewport; 28883e80ee442d5f793b89aaef7d1b5db3cde2f4b4ddaniel@transgaming.com float mCurNear; 28983e80ee442d5f793b89aaef7d1b5db3cde2f4b4ddaniel@transgaming.com float mCurFar; 290de14d6070d51532380cc954ec3627d20c769fcb6Geoff Lang float mCurDepthFront; 29183e80ee442d5f793b89aaef7d1b5db3cde2f4b4ddaniel@transgaming.com 292493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com bool mForceSetBlendState; 293493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com gl::BlendState mCurBlendState; 2942a64ee4479728d804e1ecd8d0d10e83f00cf4f29Geoff Lang gl::ColorF mCurBlendColor; 295493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com GLuint mCurSampleMask; 296493d4f872b528410dee998b38c89a31492a23895daniel@transgaming.com 297e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com // Currently applied sampler states 29876b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<bool> mForceSetVertexSamplerStates; 29976b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<gl::SamplerState> mCurVertexSamplerStates; 300e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com 30176b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<bool> mForceSetPixelSamplerStates; 30276b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<gl::SamplerState> mCurPixelSamplerStates; 303e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com 304e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com // Currently applied textures 30576b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<unsigned int> mCurVertexTextureSerials; 30676b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang std::vector<unsigned int> mCurPixelTextureSerials; 307e33c8bfa0799f8dcd74a0ac88aacd4247f302386daniel@transgaming.com 30891207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com unsigned int mAppliedIBSerial; 3096246dc8fecf658cd200a33aa15c7677054daa0d3Jamie Madill IDirect3DVertexShader9 *mAppliedVertexShader; 3106246dc8fecf658cd200a33aa15c7677054daa0d3Jamie Madill IDirect3DPixelShader9 *mAppliedPixelShader; 311a5c9a144eb1e99255a7b2c30d19606c43a936bd5Jamie Madill unsigned int mAppliedProgramSerial; 312a5c9a144eb1e99255a7b2c30d19606c43a936bd5Jamie Madill 313ed36abd83e40bb1c0f4af9ea7314906b86ea3cdddaniel@transgaming.com rx::dx_VertexConstants mVertexConstants; 314ed36abd83e40bb1c0f4af9ea7314906b86ea3cdddaniel@transgaming.com rx::dx_PixelConstants mPixelConstants; 315ed36abd83e40bb1c0f4af9ea7314906b86ea3cdddaniel@transgaming.com bool mDxUniformsDirty; 31691207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com 3172507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com // A pool of event queries that are currently unused. 3182507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com std::vector<IDirect3DQuery9*> mEventQueryPool; 3192507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com VertexShaderCache mVertexShaderCache; 3202507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com PixelShaderCache mPixelShaderCache; 32167094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.com 322312404870905e1eff46e21632c1c2f2143af4694daniel@transgaming.com VertexDataManager *mVertexDataManager; 32367094ee41f584b02e81dba8b2dd4c29463a67880daniel@transgaming.com VertexDeclarationCache mVertexDeclarationCache; 32491207b79c85830aff4420dea395fb12ff20c3f4edaniel@transgaming.com 325312404870905e1eff46e21632c1c2f2143af4694daniel@transgaming.com IndexDataManager *mIndexDataManager; 32650cc725131415c0448592104ae2ad5f2079ebc1bdaniel@transgaming.com StreamingIndexBufferInterface *mLineLoopIB; 32723ba30e4b0028998ca2a53f0553e2002bf755d74Geoff Lang StaticIndexBufferInterface *mCountingIB; 328e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com 329e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com enum { NUM_NULL_COLORBUFFER_CACHE_ENTRIES = 12 }; 330e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com struct NullColorbufferCacheEntry 331e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com { 332e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com UINT lruCount; 333e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com int width; 334e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com int height; 3353c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madill gl::FramebufferAttachment *buffer; 336e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com } mNullColorbufferCache[NUM_NULL_COLORBUFFER_CACHE_ENTRIES]; 337e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com UINT mMaxNullColorbufferLRU; 338e4e1a33c92ac29b3ff561bba6c7975afc7a01f17daniel@transgaming.com 3392507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com}; 3402507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com 3412507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com} 3422507f41e4f22f24046ba4d55d13e070d8ea2c9cadaniel@transgaming.com#endif // LIBGLESV2_RENDERER_RENDERER9_H_ 343