1 // 2 // Copyright 2012 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // Renderer11.h: Defines a back-end specific class for the D3D11 renderer. 8 9 #ifndef LIBANGLE_RENDERER_D3D_D3D11_RENDERER11_H_ 10 #define LIBANGLE_RENDERER_D3D_D3D11_RENDERER11_H_ 11 12 #include "common/angleutils.h" 13 #include "common/mathutil.h" 14 #include "libANGLE/AttributeMap.h" 15 #include "libANGLE/angletypes.h" 16 #include "libANGLE/renderer/d3d/HLSLCompiler.h" 17 #include "libANGLE/renderer/d3d/ProgramD3D.h" 18 #include "libANGLE/renderer/d3d/RenderTargetD3D.h" 19 #include "libANGLE/renderer/d3d/RendererD3D.h" 20 #include "libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h" 21 #include "libANGLE/renderer/d3d/d3d11/RenderStateCache.h" 22 #include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h" 23 #include "libANGLE/renderer/d3d/d3d11/StateManager11.h" 24 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" 25 26 namespace gl 27 { 28 class FramebufferAttachment; 29 class ImageIndex; 30 } // namespace gl 31 32 namespace rx 33 { 34 class Blit11; 35 class Buffer11; 36 class Clear11; 37 class Context11; 38 class IndexDataManager; 39 struct PackPixelsParams; 40 class PixelTransfer11; 41 class RenderTarget11; 42 class StreamingIndexBufferInterface; 43 class Trim11; 44 class VertexDataManager; 45 46 struct Renderer11DeviceCaps 47 { 48 Renderer11DeviceCaps(); 49 50 D3D_FEATURE_LEVEL featureLevel; 51 bool supportsDXGI1_2; // Support for DXGI 1.2 52 bool supportsClearView; // Support for ID3D11DeviceContext1::ClearView 53 bool supportsConstantBufferOffsets; // Support for Constant buffer offset 54 bool supportsVpRtIndexWriteFromVertexShader; // VP/RT can be selected in the Vertex Shader 55 // stage. 56 bool supportsMultisampledDepthStencilSRVs; // D3D feature level 10.0 no longer allows creation 57 // of textures with both the bind SRV and DSV flags 58 // when multisampled. Textures will need to be 59 // resolved before reading. crbug.com/656989 60 bool allowES3OnFL10_0; 61 UINT B5G6R5support; // Bitfield of D3D11_FORMAT_SUPPORT values for DXGI_FORMAT_B5G6R5_UNORM 62 UINT B5G6R5maxSamples; // Maximum number of samples supported by DXGI_FORMAT_B5G6R5_UNORM 63 UINT B4G4R4A4support; // Bitfield of D3D11_FORMAT_SUPPORT values for DXGI_FORMAT_B4G4R4A4_UNORM 64 UINT B4G4R4A4maxSamples; // Maximum number of samples supported by DXGI_FORMAT_B4G4R4A4_UNORM 65 UINT B5G5R5A1support; // Bitfield of D3D11_FORMAT_SUPPORT values for DXGI_FORMAT_B5G5R5A1_UNORM 66 UINT B5G5R5A1maxSamples; // Maximum number of samples supported by DXGI_FORMAT_B5G5R5A1_UNORM 67 Optional<LARGE_INTEGER> driverVersion; // Four-part driver version number. 68 }; 69 70 enum 71 { 72 MAX_VERTEX_UNIFORM_VECTORS_D3D11 = 1024, 73 MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024 74 }; 75 76 class Renderer11 : public RendererD3D 77 { 78 public: 79 explicit Renderer11(egl::Display *display); 80 ~Renderer11() override; 81 82 egl::Error initialize() override; 83 bool resetDevice() override; 84 85 egl::ConfigSet generateConfigs() override; 86 void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const override; 87 88 ContextImpl *createContext(const gl::State &state, gl::ErrorSet *errorSet) override; 89 90 angle::Result flush(Context11 *context11); 91 angle::Result finish(Context11 *context11); 92 93 bool isValidNativeWindow(EGLNativeWindowType window) const override; 94 NativeWindowD3D *createNativeWindow(EGLNativeWindowType window, 95 const egl::Config *config, 96 const egl::AttributeMap &attribs) const override; 97 98 SwapChainD3D *createSwapChain(NativeWindowD3D *nativeWindow, 99 HANDLE shareHandle, 100 IUnknown *d3dTexture, 101 GLenum backBufferFormat, 102 GLenum depthBufferFormat, 103 EGLint orientation, 104 EGLint samples) override; 105 egl::Error getD3DTextureInfo(const egl::Config *configuration, 106 IUnknown *d3dTexture, 107 const egl::AttributeMap &attribs, 108 EGLint *width, 109 EGLint *height, 110 GLsizei *samples, 111 gl::Format *glFormat, 112 const angle::Format **angleFormat, 113 UINT *arraySlice) const override; 114 egl::Error validateShareHandle(const egl::Config *config, 115 HANDLE shareHandle, 116 const egl::AttributeMap &attribs) const override; 117 118 // lost device 119 bool testDeviceLost() override; 120 bool testDeviceResettable() override; 121 122 DeviceIdentifier getAdapterIdentifier() const override; 123 124 unsigned int getReservedVertexUniformVectors() const; 125 unsigned int getReservedFragmentUniformVectors() const; 126 gl::ShaderMap<unsigned int> getReservedShaderUniformBuffers() const; 127 128 bool getShareHandleSupport() const; 129 130 int getMajorShaderModel() const override; 131 int getMinorShaderModel() const override; 132 std::string getShaderModelSuffix() const override; 133 134 // Pixel operations 135 angle::Result copyImage2D(const gl::Context *context, 136 const gl::Framebuffer *framebuffer, 137 const gl::Rectangle &sourceRect, 138 GLenum destFormat, 139 const gl::Offset &destOffset, 140 TextureStorage *storage, 141 GLint level) override; 142 angle::Result copyImageCube(const gl::Context *context, 143 const gl::Framebuffer *framebuffer, 144 const gl::Rectangle &sourceRect, 145 GLenum destFormat, 146 const gl::Offset &destOffset, 147 TextureStorage *storage, 148 gl::TextureTarget target, 149 GLint level) override; 150 angle::Result copyImage3D(const gl::Context *context, 151 const gl::Framebuffer *framebuffer, 152 const gl::Rectangle &sourceRect, 153 GLenum destFormat, 154 const gl::Offset &destOffset, 155 TextureStorage *storage, 156 GLint level) override; 157 angle::Result copyImage2DArray(const gl::Context *context, 158 const gl::Framebuffer *framebuffer, 159 const gl::Rectangle &sourceRect, 160 GLenum destFormat, 161 const gl::Offset &destOffset, 162 TextureStorage *storage, 163 GLint level) override; 164 165 angle::Result copyTexture(const gl::Context *context, 166 const gl::Texture *source, 167 GLint sourceLevel, 168 gl::TextureTarget srcTarget, 169 const gl::Box &sourceBox, 170 GLenum destFormat, 171 GLenum destType, 172 const gl::Offset &destOffset, 173 TextureStorage *storage, 174 gl::TextureTarget destTarget, 175 GLint destLevel, 176 bool unpackFlipY, 177 bool unpackPremultiplyAlpha, 178 bool unpackUnmultiplyAlpha) override; 179 angle::Result copyCompressedTexture(const gl::Context *context, 180 const gl::Texture *source, 181 GLint sourceLevel, 182 TextureStorage *storage, 183 GLint destLevel) override; 184 185 // RenderTarget creation 186 angle::Result createRenderTarget(const gl::Context *context, 187 int width, 188 int height, 189 GLenum format, 190 GLsizei samples, 191 RenderTargetD3D **outRT) override; 192 angle::Result createRenderTargetCopy(const gl::Context *context, 193 RenderTargetD3D *source, 194 RenderTargetD3D **outRT) override; 195 196 // Shader operations 197 angle::Result loadExecutable(d3d::Context *context, 198 const uint8_t *function, 199 size_t length, 200 gl::ShaderType type, 201 const std::vector<D3DVarying> &streamOutVaryings, 202 bool separatedOutputBuffers, 203 ShaderExecutableD3D **outExecutable) override; 204 angle::Result compileToExecutable(d3d::Context *context, 205 gl::InfoLog &infoLog, 206 const std::string &shaderHLSL, 207 gl::ShaderType type, 208 const std::vector<D3DVarying> &streamOutVaryings, 209 bool separatedOutputBuffers, 210 const CompilerWorkaroundsD3D &workarounds, 211 ShaderExecutableD3D **outExectuable) override; 212 angle::Result ensureHLSLCompilerInitialized(d3d::Context *context) override; 213 214 UniformStorageD3D *createUniformStorage(size_t storageSize) override; 215 216 // Image operations 217 ImageD3D *createImage() override; 218 ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context, 219 EGLenum target, 220 EGLClientBuffer buffer, 221 const egl::AttributeMap &attribs) override; 222 angle::Result generateMipmap(const gl::Context *context, 223 ImageD3D *dest, 224 ImageD3D *source) override; 225 angle::Result generateMipmapUsingD3D(const gl::Context *context, 226 TextureStorage *storage, 227 const gl::TextureState &textureState) override; 228 angle::Result copyImage(const gl::Context *context, 229 ImageD3D *dest, 230 ImageD3D *source, 231 const gl::Box &sourceBox, 232 const gl::Offset &destOffset, 233 bool unpackFlipY, 234 bool unpackPremultiplyAlpha, 235 bool unpackUnmultiplyAlpha) override; 236 237 TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain, 238 const std::string &label) override; 239 TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage, 240 RenderTargetD3D *renderTargetD3D, 241 const std::string &label) override; 242 TextureStorage *createTextureStorageExternal(egl::Stream *stream, 243 const egl::Stream::GLTextureDescription &desc, 244 const std::string &label) override; 245 TextureStorage *createTextureStorage2D(GLenum internalformat, 246 bool renderTarget, 247 GLsizei width, 248 GLsizei height, 249 int levels, 250 const std::string &label, 251 bool hintLevelZeroOnly) override; 252 TextureStorage *createTextureStorageCube(GLenum internalformat, 253 bool renderTarget, 254 int size, 255 int levels, 256 bool hintLevelZeroOnly, 257 const std::string &label) override; 258 TextureStorage *createTextureStorage3D(GLenum internalformat, 259 bool renderTarget, 260 GLsizei width, 261 GLsizei height, 262 GLsizei depth, 263 int levels, 264 const std::string &label) override; 265 TextureStorage *createTextureStorage2DArray(GLenum internalformat, 266 bool renderTarget, 267 GLsizei width, 268 GLsizei height, 269 GLsizei depth, 270 int levels, 271 const std::string &label) override; 272 TextureStorage *createTextureStorage2DMultisample(GLenum internalformat, 273 GLsizei width, 274 GLsizei height, 275 int levels, 276 int samples, 277 bool fixedSampleLocations, 278 const std::string &label) override; 279 TextureStorage *createTextureStorage2DMultisampleArray(GLenum internalformat, 280 GLsizei width, 281 GLsizei height, 282 GLsizei depth, 283 int levels, 284 int samples, 285 bool fixedSampleLocations, 286 const std::string &label) override; 287 288 VertexBuffer *createVertexBuffer() override; 289 IndexBuffer *createIndexBuffer() override; 290 291 // Stream Creation 292 StreamProducerImpl *createStreamProducerD3DTexture(egl::Stream::ConsumerType consumerType, 293 const egl::AttributeMap &attribs) override; 294 295 // D3D11-renderer specific methods getDevice()296 ID3D11Device *getDevice() { return mDevice; } getDevice1()297 ID3D11Device1 *getDevice1() { return mDevice1; } 298 void *getD3DDevice() override; getDeviceContext()299 ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; } getDeviceContext1IfSupported()300 ID3D11DeviceContext1 *getDeviceContext1IfSupported() { return mDeviceContext1; } getDxgiFactory()301 IDXGIFactory *getDxgiFactory() { return mDxgiFactory; } 302 303 angle::Result getBlendState(const gl::Context *context, 304 const d3d11::BlendStateKey &key, 305 const d3d11::BlendState **outBlendState); 306 angle::Result getRasterizerState(const gl::Context *context, 307 const gl::RasterizerState &rasterState, 308 bool scissorEnabled, 309 ID3D11RasterizerState **outRasterizerState); 310 angle::Result getDepthStencilState(const gl::Context *context, 311 const gl::DepthStencilState &dsState, 312 const d3d11::DepthStencilState **outDSState); 313 angle::Result getSamplerState(const gl::Context *context, 314 const gl::SamplerState &samplerState, 315 ID3D11SamplerState **outSamplerState); 316 UINT getSampleDescQuality(GLuint supportedSamples) const; 317 getBlitter()318 Blit11 *getBlitter() { return mBlit; } getClearer()319 Clear11 *getClearer() { return mClear; } 320 gl::DebugAnnotator *getAnnotator(); 321 322 // Buffer-to-texture and Texture-to-buffer copies 323 bool supportsFastCopyBufferToTexture(GLenum internalFormat) const override; 324 angle::Result fastCopyBufferToTexture(const gl::Context *context, 325 const gl::PixelUnpackState &unpack, 326 gl::Buffer *unpackBuffer, 327 unsigned int offset, 328 RenderTargetD3D *destRenderTarget, 329 GLenum destinationFormat, 330 GLenum sourcePixelsType, 331 const gl::Box &destArea) override; 332 333 angle::Result packPixels(const gl::Context *context, 334 const TextureHelper11 &textureHelper, 335 const PackPixelsParams ¶ms, 336 uint8_t *pixelsOut); 337 338 bool getLUID(LUID *adapterLuid) const override; 339 VertexConversionType getVertexConversionType(angle::FormatID vertexFormatID) const override; 340 GLenum getVertexComponentType(angle::FormatID vertexFormatID) const override; 341 342 // Warning: you should ensure binding really matches attrib.bindingIndex before using this 343 // function. 344 angle::Result getVertexSpaceRequired(const gl::Context *context, 345 const gl::VertexAttribute &attrib, 346 const gl::VertexBinding &binding, 347 size_t count, 348 GLsizei instances, 349 GLuint baseInstance, 350 unsigned int *bytesRequiredOut) const override; 351 352 angle::Result readFromAttachment(const gl::Context *context, 353 const gl::FramebufferAttachment &srcAttachment, 354 const gl::Rectangle &sourceArea, 355 GLenum format, 356 GLenum type, 357 GLuint outputPitch, 358 const gl::PixelPackState &pack, 359 uint8_t *pixels); 360 361 angle::Result blitRenderbufferRect(const gl::Context *context, 362 const gl::Rectangle &readRect, 363 const gl::Rectangle &drawRect, 364 RenderTargetD3D *readRenderTarget, 365 RenderTargetD3D *drawRenderTarget, 366 GLenum filter, 367 const gl::Rectangle *scissor, 368 bool colorBlit, 369 bool depthBlit, 370 bool stencilBlit); 371 372 bool isES3Capable() const; getRenderer11DeviceCaps()373 const Renderer11DeviceCaps &getRenderer11DeviceCaps() const { return mRenderer11DeviceCaps; } 374 375 RendererClass getRendererClass() const override; getStateManager()376 StateManager11 *getStateManager() { return &mStateManager; } 377 378 void onSwap(); 379 void onBufferCreate(const Buffer11 *created); 380 void onBufferDelete(const Buffer11 *deleted); 381 382 DeviceImpl *createEGLDevice() override; 383 384 angle::Result drawArrays(const gl::Context *context, 385 gl::PrimitiveMode mode, 386 GLint firstVertex, 387 GLsizei vertexCount, 388 GLsizei instanceCount, 389 GLuint baseInstance, 390 bool isInstancedDraw); 391 angle::Result drawElements(const gl::Context *context, 392 gl::PrimitiveMode mode, 393 GLint startVertex, 394 GLsizei indexCount, 395 gl::DrawElementsType indexType, 396 const void *indices, 397 GLsizei instanceCount, 398 GLint baseVertex, 399 GLuint baseInstance, 400 bool isInstancedDraw); 401 angle::Result drawArraysIndirect(const gl::Context *context, const void *indirect); 402 angle::Result drawElementsIndirect(const gl::Context *context, const void *indirect); 403 404 // Necessary hack for default framebuffers in D3D. 405 FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) override; 406 407 angle::Result getScratchMemoryBuffer(Context11 *context11, 408 size_t requestedSize, 409 angle::MemoryBuffer **bufferOut); 410 411 gl::Version getMaxSupportedESVersion() const override; 412 gl::Version getMaxConformantESVersion() const override; 413 414 angle::Result dispatchCompute(const gl::Context *context, 415 GLuint numGroupsX, 416 GLuint numGroupsY, 417 GLuint numGroupsZ); 418 angle::Result dispatchComputeIndirect(const gl::Context *context, GLintptr indirect); 419 420 angle::Result createStagingTexture(const gl::Context *context, 421 ResourceType textureType, 422 const d3d11::Format &formatSet, 423 const gl::Extents &size, 424 StagingAccess readAndWriteAccess, 425 TextureHelper11 *textureOut); 426 427 template <typename DescT, typename ResourceT> allocateResource(d3d::Context * context,const DescT & desc,ResourceT * resourceOut)428 angle::Result allocateResource(d3d::Context *context, const DescT &desc, ResourceT *resourceOut) 429 { 430 return mResourceManager11.allocate(context, this, &desc, nullptr, resourceOut); 431 } 432 433 template <typename DescT, typename InitDataT, typename ResourceT> allocateResource(d3d::Context * context,const DescT & desc,InitDataT * initData,ResourceT * resourceOut)434 angle::Result allocateResource(d3d::Context *context, 435 const DescT &desc, 436 InitDataT *initData, 437 ResourceT *resourceOut) 438 { 439 return mResourceManager11.allocate(context, this, &desc, initData, resourceOut); 440 } 441 442 template <typename InitDataT, typename ResourceT> allocateResourceNoDesc(d3d::Context * context,InitDataT * initData,ResourceT * resourceOut)443 angle::Result allocateResourceNoDesc(d3d::Context *context, 444 InitDataT *initData, 445 ResourceT *resourceOut) 446 { 447 return mResourceManager11.allocate(context, this, nullptr, initData, resourceOut); 448 } 449 450 template <typename DescT> allocateTexture(d3d::Context * context,const DescT & desc,const d3d11::Format & format,TextureHelper11 * textureOut)451 angle::Result allocateTexture(d3d::Context *context, 452 const DescT &desc, 453 const d3d11::Format &format, 454 TextureHelper11 *textureOut) 455 { 456 return allocateTexture(context, desc, format, nullptr, textureOut); 457 } 458 459 angle::Result allocateTexture(d3d::Context *context, 460 const D3D11_TEXTURE2D_DESC &desc, 461 const d3d11::Format &format, 462 const D3D11_SUBRESOURCE_DATA *initData, 463 TextureHelper11 *textureOut); 464 465 angle::Result allocateTexture(d3d::Context *context, 466 const D3D11_TEXTURE3D_DESC &desc, 467 const d3d11::Format &format, 468 const D3D11_SUBRESOURCE_DATA *initData, 469 TextureHelper11 *textureOut); 470 471 angle::Result clearRenderTarget(const gl::Context *context, 472 RenderTargetD3D *renderTarget, 473 const gl::ColorF &clearColorValue, 474 const float clearDepthValue, 475 const unsigned int clearStencilValue) override; 476 477 bool canSelectViewInVertexShader() const override; 478 479 angle::Result mapResource(const gl::Context *context, 480 ID3D11Resource *resource, 481 UINT subResource, 482 D3D11_MAP mapType, 483 UINT mapFlags, 484 D3D11_MAPPED_SUBRESOURCE *mappedResource); 485 486 angle::Result getIncompleteTexture(const gl::Context *context, 487 gl::TextureType type, 488 gl::Texture **textureOut) override; 489 490 void setGlobalDebugAnnotator() override; 491 492 std::string getRendererDescription() const override; 493 std::string getVendorString() const override; 494 std::string getVersionString(bool includeFullVersion) const override; 495 496 private: 497 void generateCaps(gl::Caps *outCaps, 498 gl::TextureCapsMap *outTextureCaps, 499 gl::Extensions *outExtensions, 500 gl::Limitations *outLimitations) const override; 501 502 void initializeFeatures(angle::FeaturesD3D *features) const override; 503 504 angle::Result drawLineLoop(const gl::Context *context, 505 GLuint count, 506 gl::DrawElementsType type, 507 const void *indices, 508 int baseVertex, 509 int instances); 510 angle::Result drawTriangleFan(const gl::Context *context, 511 GLuint count, 512 gl::DrawElementsType type, 513 const void *indices, 514 int baseVertex, 515 int instances); 516 517 angle::Result resolveMultisampledTexture(const gl::Context *context, 518 RenderTarget11 *renderTarget, 519 bool depth, 520 bool stencil, 521 TextureHelper11 *textureOut); 522 523 void populateRenderer11DeviceCaps(); 524 525 void updateHistograms(); 526 527 angle::Result copyImageInternal(const gl::Context *context, 528 const gl::Framebuffer *framebuffer, 529 const gl::Rectangle &sourceRect, 530 GLenum destFormat, 531 const gl::Offset &destOffset, 532 RenderTargetD3D *destRenderTarget); 533 534 gl::SupportedSampleSet generateSampleSetForEGLConfig( 535 const gl::TextureCaps &colorBufferFormatCaps, 536 const gl::TextureCaps &depthStencilBufferFormatCaps) const; 537 538 HRESULT callD3D11CreateDevice(PFN_D3D11_CREATE_DEVICE createDevice, bool debug); 539 HRESULT callD3D11On12CreateDevice(PFN_D3D12_CREATE_DEVICE createDevice12, 540 PFN_D3D11ON12_CREATE_DEVICE createDevice11on12, 541 bool debug); 542 egl::Error initializeD3DDevice(); 543 egl::Error initializeDevice(); 544 void releaseDeviceResources(); 545 void release(); 546 547 d3d11::ANGLED3D11DeviceType getDeviceType() const; 548 549 // Make sure that the raw buffer is the latest buffer. 550 angle::Result markRawBufferUsage(const gl::Context *context); 551 angle::Result markTransformFeedbackUsage(const gl::Context *context); 552 angle::Result drawWithGeometryShaderAndTransformFeedback(Context11 *context11, 553 gl::PrimitiveMode mode, 554 UINT instanceCount, 555 UINT vertexCount); 556 557 HMODULE mD3d11Module; 558 HMODULE mD3d12Module; 559 HMODULE mDxgiModule; 560 HMODULE mDCompModule; 561 std::vector<D3D_FEATURE_LEVEL> mAvailableFeatureLevels; 562 D3D_DRIVER_TYPE mRequestedDriverType; 563 bool mCreateDebugDevice; 564 bool mCreatedWithDeviceEXT; 565 566 HLSLCompiler mCompiler; 567 568 RenderStateCache mStateCache; 569 570 StateManager11 mStateManager; 571 572 StreamingIndexBufferInterface *mLineLoopIB; 573 StreamingIndexBufferInterface *mTriangleFanIB; 574 575 // Texture copy resources 576 Blit11 *mBlit; 577 PixelTransfer11 *mPixelTransfer; 578 579 // Masked clear resources 580 Clear11 *mClear; 581 582 // Perform trim for D3D resources 583 Trim11 *mTrim; 584 585 // Sync query 586 d3d11::Query mSyncQuery; 587 588 // Created objects state tracking 589 std::set<const Buffer11 *> mAliveBuffers; 590 591 double mLastHistogramUpdateTime; 592 593 angle::ComPtr<ID3D12Device> mDevice12; 594 angle::ComPtr<ID3D12CommandQueue> mCommandQueue; 595 596 ID3D11Device *mDevice; 597 ID3D11Device1 *mDevice1; 598 Renderer11DeviceCaps mRenderer11DeviceCaps; 599 ID3D11DeviceContext *mDeviceContext; 600 ID3D11DeviceContext1 *mDeviceContext1; 601 ID3D11DeviceContext3 *mDeviceContext3; 602 IDXGIAdapter *mDxgiAdapter; 603 DXGI_ADAPTER_DESC mAdapterDescription; 604 char mDescription[128]; 605 IDXGIFactory *mDxgiFactory; 606 ID3D11Debug *mDebug; 607 608 std::vector<GLuint> mScratchIndexDataBuffer; 609 610 angle::ScratchBuffer mScratchMemoryBuffer; 611 612 DebugAnnotator11 mAnnotator; 613 614 mutable Optional<bool> mSupportsShareHandles; 615 ResourceManager11 mResourceManager11; 616 617 TextureHelper11 mCachedResolveTexture; 618 }; 619 620 } // namespace rx 621 #endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERER11_H_ 622