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