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