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