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 angle::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; } 297 void *getD3DDevice() override; getDeviceContext()298 ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; } getDeviceContext1IfSupported()299 ID3D11DeviceContext1 *getDeviceContext1IfSupported() { return mDeviceContext1; } getDxgiFactory()300 IDXGIFactory *getDxgiFactory() { return mDxgiFactory; } 301 302 angle::Result getBlendState(const gl::Context *context, 303 const d3d11::BlendStateKey &key, 304 const d3d11::BlendState **outBlendState); 305 angle::Result getRasterizerState(const gl::Context *context, 306 const gl::RasterizerState &rasterState, 307 bool scissorEnabled, 308 ID3D11RasterizerState **outRasterizerState); 309 angle::Result getDepthStencilState(const gl::Context *context, 310 const gl::DepthStencilState &dsState, 311 const d3d11::DepthStencilState **outDSState); 312 angle::Result getSamplerState(const gl::Context *context, 313 const gl::SamplerState &samplerState, 314 ID3D11SamplerState **outSamplerState); 315 UINT getSampleDescQuality(GLuint supportedSamples) const; 316 getBlitter()317 Blit11 *getBlitter() { return mBlit; } getClearer()318 Clear11 *getClearer() { return mClear; } 319 gl::DebugAnnotator *getAnnotator(); 320 321 // Buffer-to-texture and Texture-to-buffer copies 322 bool supportsFastCopyBufferToTexture(GLenum internalFormat) const override; 323 angle::Result fastCopyBufferToTexture(const gl::Context *context, 324 const gl::PixelUnpackState &unpack, 325 gl::Buffer *unpackBuffer, 326 unsigned int offset, 327 RenderTargetD3D *destRenderTarget, 328 GLenum destinationFormat, 329 GLenum sourcePixelsType, 330 const gl::Box &destArea) override; 331 332 angle::Result packPixels(const gl::Context *context, 333 const TextureHelper11 &textureHelper, 334 const PackPixelsParams ¶ms, 335 uint8_t *pixelsOut); 336 337 bool getLUID(LUID *adapterLuid) const override; 338 VertexConversionType getVertexConversionType(angle::FormatID vertexFormatID) const override; 339 GLenum getVertexComponentType(angle::FormatID vertexFormatID) const override; 340 341 // Warning: you should ensure binding really matches attrib.bindingIndex before using this 342 // function. 343 angle::Result getVertexSpaceRequired(const gl::Context *context, 344 const gl::VertexAttribute &attrib, 345 const gl::VertexBinding &binding, 346 size_t count, 347 GLsizei instances, 348 GLuint baseInstance, 349 unsigned int *bytesRequiredOut) const override; 350 351 angle::Result readFromAttachment(const gl::Context *context, 352 const gl::FramebufferAttachment &srcAttachment, 353 const gl::Rectangle &sourceArea, 354 GLenum format, 355 GLenum type, 356 GLuint outputPitch, 357 const gl::PixelPackState &pack, 358 uint8_t *pixels); 359 360 angle::Result blitRenderbufferRect(const gl::Context *context, 361 const gl::Rectangle &readRect, 362 const gl::Rectangle &drawRect, 363 RenderTargetD3D *readRenderTarget, 364 RenderTargetD3D *drawRenderTarget, 365 GLenum filter, 366 const gl::Rectangle *scissor, 367 bool colorBlit, 368 bool depthBlit, 369 bool stencilBlit); 370 371 bool isES3Capable() const; getRenderer11DeviceCaps()372 const Renderer11DeviceCaps &getRenderer11DeviceCaps() const { return mRenderer11DeviceCaps; } 373 374 RendererClass getRendererClass() const override; getStateManager()375 StateManager11 *getStateManager() { return &mStateManager; } 376 377 void onSwap(); 378 void onBufferCreate(const Buffer11 *created); 379 void onBufferDelete(const Buffer11 *deleted); 380 381 DeviceImpl *createEGLDevice() override; 382 383 angle::Result drawArrays(const gl::Context *context, 384 gl::PrimitiveMode mode, 385 GLint firstVertex, 386 GLsizei vertexCount, 387 GLsizei instanceCount, 388 GLuint baseInstance); 389 angle::Result drawElements(const gl::Context *context, 390 gl::PrimitiveMode mode, 391 GLint startVertex, 392 GLsizei indexCount, 393 gl::DrawElementsType indexType, 394 const void *indices, 395 GLsizei instanceCount, 396 GLint baseVertex, 397 GLuint baseInstance); 398 angle::Result drawArraysIndirect(const gl::Context *context, const void *indirect); 399 angle::Result drawElementsIndirect(const gl::Context *context, const void *indirect); 400 401 // Necessary hack for default framebuffers in D3D. 402 FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) override; 403 404 angle::Result getScratchMemoryBuffer(Context11 *context11, 405 size_t requestedSize, 406 angle::MemoryBuffer **bufferOut); 407 408 gl::Version getMaxSupportedESVersion() const override; 409 gl::Version getMaxConformantESVersion() const override; 410 411 angle::Result dispatchCompute(const gl::Context *context, 412 GLuint numGroupsX, 413 GLuint numGroupsY, 414 GLuint numGroupsZ); 415 angle::Result dispatchComputeIndirect(const gl::Context *context, GLintptr indirect); 416 417 angle::Result createStagingTexture(const gl::Context *context, 418 ResourceType textureType, 419 const d3d11::Format &formatSet, 420 const gl::Extents &size, 421 StagingAccess readAndWriteAccess, 422 TextureHelper11 *textureOut); 423 424 template <typename DescT, typename ResourceT> allocateResource(d3d::Context * context,const DescT & desc,ResourceT * resourceOut)425 angle::Result allocateResource(d3d::Context *context, const DescT &desc, ResourceT *resourceOut) 426 { 427 return mResourceManager11.allocate(context, this, &desc, nullptr, resourceOut); 428 } 429 430 template <typename DescT, typename InitDataT, typename ResourceT> allocateResource(d3d::Context * context,const DescT & desc,InitDataT * initData,ResourceT * resourceOut)431 angle::Result allocateResource(d3d::Context *context, 432 const DescT &desc, 433 InitDataT *initData, 434 ResourceT *resourceOut) 435 { 436 return mResourceManager11.allocate(context, this, &desc, initData, resourceOut); 437 } 438 439 template <typename InitDataT, typename ResourceT> allocateResourceNoDesc(d3d::Context * context,InitDataT * initData,ResourceT * resourceOut)440 angle::Result allocateResourceNoDesc(d3d::Context *context, 441 InitDataT *initData, 442 ResourceT *resourceOut) 443 { 444 return mResourceManager11.allocate(context, this, nullptr, initData, resourceOut); 445 } 446 447 template <typename DescT> allocateTexture(d3d::Context * context,const DescT & desc,const d3d11::Format & format,TextureHelper11 * textureOut)448 angle::Result allocateTexture(d3d::Context *context, 449 const DescT &desc, 450 const d3d11::Format &format, 451 TextureHelper11 *textureOut) 452 { 453 return allocateTexture(context, desc, format, nullptr, textureOut); 454 } 455 456 angle::Result allocateTexture(d3d::Context *context, 457 const D3D11_TEXTURE2D_DESC &desc, 458 const d3d11::Format &format, 459 const D3D11_SUBRESOURCE_DATA *initData, 460 TextureHelper11 *textureOut); 461 462 angle::Result allocateTexture(d3d::Context *context, 463 const D3D11_TEXTURE3D_DESC &desc, 464 const d3d11::Format &format, 465 const D3D11_SUBRESOURCE_DATA *initData, 466 TextureHelper11 *textureOut); 467 468 angle::Result clearRenderTarget(const gl::Context *context, 469 RenderTargetD3D *renderTarget, 470 const gl::ColorF &clearColorValue, 471 const float clearDepthValue, 472 const unsigned int clearStencilValue) override; 473 474 bool canSelectViewInVertexShader() const override; 475 476 angle::Result mapResource(const gl::Context *context, 477 ID3D11Resource *resource, 478 UINT subResource, 479 D3D11_MAP mapType, 480 UINT mapFlags, 481 D3D11_MAPPED_SUBRESOURCE *mappedResource); 482 483 angle::Result getIncompleteTexture(const gl::Context *context, 484 gl::TextureType type, 485 gl::Texture **textureOut) override; 486 487 void setGlobalDebugAnnotator() override; 488 489 std::string getRendererDescription() const override; 490 std::string getVendorString() const override; 491 std::string getVersionString() const override; 492 493 private: 494 void generateCaps(gl::Caps *outCaps, 495 gl::TextureCapsMap *outTextureCaps, 496 gl::Extensions *outExtensions, 497 gl::Limitations *outLimitations) const override; 498 499 void initializeFeatures(angle::FeaturesD3D *features) const override; 500 501 angle::Result drawLineLoop(const gl::Context *context, 502 GLuint count, 503 gl::DrawElementsType type, 504 const void *indices, 505 int baseVertex, 506 int instances); 507 angle::Result drawTriangleFan(const gl::Context *context, 508 GLuint count, 509 gl::DrawElementsType type, 510 const void *indices, 511 int baseVertex, 512 int instances); 513 514 angle::Result resolveMultisampledTexture(const gl::Context *context, 515 RenderTarget11 *renderTarget, 516 bool depth, 517 bool stencil, 518 TextureHelper11 *textureOut); 519 520 void populateRenderer11DeviceCaps(); 521 522 void updateHistograms(); 523 524 angle::Result copyImageInternal(const gl::Context *context, 525 const gl::Framebuffer *framebuffer, 526 const gl::Rectangle &sourceRect, 527 GLenum destFormat, 528 const gl::Offset &destOffset, 529 RenderTargetD3D *destRenderTarget); 530 531 gl::SupportedSampleSet generateSampleSetForEGLConfig( 532 const gl::TextureCaps &colorBufferFormatCaps, 533 const gl::TextureCaps &depthStencilBufferFormatCaps) const; 534 535 HRESULT callD3D11CreateDevice(PFN_D3D11_CREATE_DEVICE createDevice, bool debug); 536 HRESULT callD3D11On12CreateDevice(PFN_D3D12_CREATE_DEVICE createDevice12, 537 PFN_D3D11ON12_CREATE_DEVICE createDevice11on12, 538 bool debug); 539 egl::Error initializeD3DDevice(); 540 egl::Error initializeDevice(); 541 void releaseDeviceResources(); 542 void release(); 543 544 d3d11::ANGLED3D11DeviceType getDeviceType() const; 545 546 // Make sure that the raw buffer is the latest buffer. 547 angle::Result markRawBufferUsage(const gl::Context *context); 548 angle::Result markTransformFeedbackUsage(const gl::Context *context); 549 angle::Result drawWithGeometryShaderAndTransformFeedback(Context11 *context11, 550 gl::PrimitiveMode mode, 551 UINT instanceCount, 552 UINT vertexCount); 553 554 HMODULE mD3d11Module; 555 HMODULE mD3d12Module; 556 HMODULE mDxgiModule; 557 HMODULE mDCompModule; 558 std::vector<D3D_FEATURE_LEVEL> mAvailableFeatureLevels; 559 D3D_DRIVER_TYPE mRequestedDriverType; 560 bool mCreateDebugDevice; 561 bool mCreatedWithDeviceEXT; 562 563 HLSLCompiler mCompiler; 564 565 RenderStateCache mStateCache; 566 567 StateManager11 mStateManager; 568 569 StreamingIndexBufferInterface *mLineLoopIB; 570 StreamingIndexBufferInterface *mTriangleFanIB; 571 572 // Texture copy resources 573 Blit11 *mBlit; 574 PixelTransfer11 *mPixelTransfer; 575 576 // Masked clear resources 577 Clear11 *mClear; 578 579 // Perform trim for D3D resources 580 Trim11 *mTrim; 581 582 // Sync query 583 d3d11::Query mSyncQuery; 584 585 // Created objects state tracking 586 std::set<const Buffer11 *> mAliveBuffers; 587 588 double mLastHistogramUpdateTime; 589 590 angle::ComPtr<ID3D12Device> mDevice12; 591 angle::ComPtr<ID3D12CommandQueue> mCommandQueue; 592 593 ID3D11Device *mDevice; 594 Renderer11DeviceCaps mRenderer11DeviceCaps; 595 ID3D11DeviceContext *mDeviceContext; 596 ID3D11DeviceContext1 *mDeviceContext1; 597 ID3D11DeviceContext3 *mDeviceContext3; 598 IDXGIAdapter *mDxgiAdapter; 599 DXGI_ADAPTER_DESC mAdapterDescription; 600 char mDescription[128]; 601 IDXGIFactory *mDxgiFactory; 602 ID3D11Debug *mDebug; 603 604 std::vector<GLuint> mScratchIndexDataBuffer; 605 606 angle::ScratchBuffer mScratchMemoryBuffer; 607 608 DebugAnnotator11 mAnnotator; 609 610 mutable Optional<bool> mSupportsShareHandles; 611 ResourceManager11 mResourceManager11; 612 613 TextureHelper11 mCachedResolveTexture; 614 }; 615 616 } // namespace rx 617 #endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERER11_H_ 618