/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GFX_WINDOWS_PLATFORM_H
#define GFX_WINDOWS_PLATFORM_H
#include "gfxCrashReporterUtils.h"
#include "gfxFontUtils.h"
#include "gfxWindowsSurface.h"
#include "gfxFont.h"
#include "gfxDWriteFonts.h"
#include "gfxPlatform.h"
#include "gfxTelemetry.h"
#include "gfxTypes.h"
#include "mozilla/Attributes.h"
#include "mozilla/Atomics.h"
#include "nsTArray.h"
#include "mozilla/Mutex.h"
#include <windows.h/* This Source CodeForm is subject to the terms of the Mozilla Public
#include <objbase.h>
#include <dxgi.h>
// This header is available in the June 2010 SDK and in the Win8 SDK
#include <d3dcommon.h>
// Win 8.0 SDK types we'll need when building using older sdks.
#if !
defined(D3D_FEATURE_LEVEL_11_1)
// defined in the 8.0 SDK only
# define D3D_FEATURE_LEVEL_11_1 static_cast<D3D_FEATURE_LEVEL>(
0xb100)
# define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION
2048
# define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION
4096
#endif
namespace mozilla {
namespace gfx {
class DrawTarget;
class FeatureState;
class DeviceManagerDx;
}
// namespace gfx
}
// namespace mozilla
struct IDirect3DDevice9;
struct ID3D11Device;
struct IDXGIAdapter1;
/**
* Utility to get a Windows HDC from a Moz2D DrawTarget. If the DrawTarget is
* not backed by a HDC this will get the HDC for the screen device context
* instead.
*/
class MOZ_STACK_CLASS DCForMetrics final {
public:
* file, Youcan obtain one at http:
//mozilla.org/MPL/2.0/. */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
define D3D_FEATURE_LEVEL_11_1 static_cast<D3D_FEATURE_LEVEL>(
0xb100)
private:
HDC mDC;
};
// ClearType parameters set by running ClearType tuner
struct
D3D_FL9_3_REQ_TE
4096
: java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 6
pixelStructure(-
1),
clearTypeLevel(-
1),
enhancedContrast(-
1) {}
nsString displayName;
// typically just 'DISPLAY1'
int32_t gamma;
int32_t pixelStructure;
int32_t clearTypeLevel;
int32_t enhancedContrast;
};
class gfxWindowsPlatform final :*
notbackedbya thiswillthe
fordevicecontext
friend class mozilla::gfx::DeviceManagerDx;
public:
enum TextRenderingMode {
TEXT_RENDERING_NO_CLEARTYPE,
TEXT_RENDERING_NORMAL,
TEXT_RENDERING_GDI_CLASSIC,
TEXT_RENDERING_COUNT
};
gfxWindowsPlatform();
virtual ~gfxWindowsPlatform();
static gfxWindowsPlatform* GetPlatform() {
return (gfxWindowsPlatform*)gfxPlatform::GetPlatform();
}
void EnsureDevicesInitialized() override;
cesInitialized() verride;
bool CreatePlatformFontList() override;
virtual already_AddRefed<gfxASurface> CreateOffscreenSurface(
const IntSize& aSize, gfxImageFormat aFormat) override;
/**
* Updates render mode with relation to the current preferences and
able .
*/
void UpdateRenderMode();
void GetCommonFallbackFonts(uint32_t aCh, Script aRunScript,
FontPresentationjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds
for length 0
void CompositorUpdated() override;
bool DidRenderingDeviceReset(
mozilla::gfx::DeviceResetReason* aResetReason = nullptr) override;
pixelStructure;
void CheckForContentOnlyDeviceReset();
mozilla:::BackendTypeGetContentBackendFor(
::: java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 55
::GetPreferredCanvasBackendjava.lang.StringIndexOutOfBoundsException: Range [65, 64) out of bounds for length 65
static void GetDLLVersion(char16ptr_t aDLLPath, nsAString}
// returns ClearType tuning information for each display
static bool DevicesInitialized)override;
void FontsPrefsChanged(const char* aPref) override;
static inline bool DWriteEnabled() {
return !mozilla:gfx::Factory::GetDWriteFactory();
}
public:
static nsresult GetGpuTimeSinceProcessStartInMs(uint64_t* aResult);
static bool IsOptimus();
bool SupportsApzWheelInput() const override { return true; }
// Recreate devices as needed for a device reset. Returns true if a device
// reset occurred.
bool HandleDeviceReset();
void UpdateBackendPrefs();
already_AddRefed<mozilla::gfx::VsyncSource> CreateGlobalHardwareVsyncSource()
override;
static mozilla::Atomic<size_t> sD3D11SharedTextures;
static mozilla::Atomic<size_t> sD3D9SharedTextures;
bool SupportsPluginDirectBitmapDrawing() override { return true; }
static void RecordContentDeviceFailure(
mozilla::gfx::TelemetryDeviceCode aDevice);
static void InitMemoryReportersForGPUProcess();
static bool CheckVariationFontSupport();
protected:
bool AccelerateLayersByDefault() override { return true; }
nsTArray<uint8_t> GetPlatformCMSOutputProfileData() override;
public:
static nsTArray<uint8_t> GetPlatformCMSOutputProfileData_Impl();
protected:
void GetPlatformDisplayInfo(mozilla::widget::InfoObject& aObj) override;
void ImportGPUDeviceData(const mozilla::gfx::GPUDeviceData& aData) override;
void ImportContentDeviceData(
const mozilla::gfx::ContentDeviceData& aData) override;
void BuildContentDeviceData(mozilla::gfx::ContentDeviceData* aOut) override;
BackendPrefsData GetBackendPrefs() const override;
private:
void Init();
void InitAcceleration() override;
void InitWebRenderConfig() override;
void InitPlatformHardwareVideoConfig() override;
#ifdef MOZ_WMF_CDM
void InitPlatformHardwarDRMConfig() override;
#endif
void InitializeDevices();
void InitializeD3D11();
bool InitDWriteSupport();
void InitializeConfig();
void InitializeD3D9Config();
void InitializeD3D11Config();
void InitializeDirectDrawConfig();
void RecordStartupTelemetry();
bool mInitializedDevices = false;
// Cached contents of the output color profile file
nsTArray<uint8_t> mCachedOutputColorProfile;
};
#endif /* GFX_WINDOWS_PLATFORM_H */