Commit 81ab9c90 by Lee Salzman Committed by Geoff Lang

Use image upload workaround for Intel Ivy Bridge with D3D11 renderer.

Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1578910 Bug: angleproject:3980 Change-Id: Ia14c5afd989365975bc57b303e59b4ef7669d522 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1845664Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent 2d0e5b55
...@@ -2388,6 +2388,7 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps, ...@@ -2388,6 +2388,7 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps,
bool isSkylake = false; bool isSkylake = false;
bool isBroadwell = false; bool isBroadwell = false;
bool isHaswell = false; bool isHaswell = false;
bool isIvyBridge = false;
bool isAMD = IsAMD(adapterDesc.VendorId); bool isAMD = IsAMD(adapterDesc.VendorId);
bool isFeatureLevel9_3 = (deviceCaps.featureLevel <= D3D_FEATURE_LEVEL_9_3); bool isFeatureLevel9_3 = (deviceCaps.featureLevel <= D3D_FEATURE_LEVEL_9_3);
IntelDriverVersion capsVersion = IntelDriverVersion(0); IntelDriverVersion capsVersion = IntelDriverVersion(0);
...@@ -2398,6 +2399,7 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps, ...@@ -2398,6 +2399,7 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps,
isSkylake = IsSkylake(adapterDesc.DeviceId); isSkylake = IsSkylake(adapterDesc.DeviceId);
isBroadwell = IsBroadwell(adapterDesc.DeviceId); isBroadwell = IsBroadwell(adapterDesc.DeviceId);
isHaswell = IsHaswell(adapterDesc.DeviceId); isHaswell = IsHaswell(adapterDesc.DeviceId);
isIvyBridge = IsIvyBridge(adapterDesc.DeviceId);
} }
if (isNvidia) if (isNvidia)
...@@ -2447,8 +2449,9 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps, ...@@ -2447,8 +2449,9 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps,
ANGLE_FEATURE_CONDITION(features, addDummyTextureNoRenderTarget, ANGLE_FEATURE_CONDITION(features, addDummyTextureNoRenderTarget,
isIntel && capsVersion < IntelDriverVersion(4815)) isIntel && capsVersion < IntelDriverVersion(4815))
// Haswell drivers occasionally corrupt (small?) (vertex?) texture data uploads. // Haswell/Ivybridge drivers occasionally corrupt (small?) (vertex?) texture data uploads.
ANGLE_FEATURE_CONDITION(features, setDataFasterThanImageUpload, !(isBroadwell || isHaswell)) ANGLE_FEATURE_CONDITION(features, setDataFasterThanImageUpload,
!(isIvyBridge || isBroadwell || isHaswell))
ANGLE_FEATURE_CONDITION(features, disableB5G6R5Support, ANGLE_FEATURE_CONDITION(features, disableB5G6R5Support,
(isIntel && capsVersion < IntelDriverVersion(4539)) || isAMD) (isIntel && capsVersion < IntelDriverVersion(4539)) || isAMD)
......
...@@ -23,6 +23,8 @@ namespace rx ...@@ -23,6 +23,8 @@ namespace rx
namespace namespace
{ {
// gen7 // gen7
const uint32_t IvyBridge[] = {0x0152, 0x0156, 0x015A, 0x0162, 0x0166, 0x016A};
const uint32_t Haswell[] = { const uint32_t Haswell[] = {
0x0402, 0x0406, 0x040A, 0x040B, 0x040E, 0x0C02, 0x0C06, 0x0C0A, 0x0C0B, 0x0C0E, 0x0402, 0x0406, 0x040A, 0x040B, 0x040E, 0x0C02, 0x0C06, 0x0C0A, 0x0C0B, 0x0C0E,
0x0A02, 0x0A06, 0x0A0A, 0x0A0B, 0x0A0E, 0x0D02, 0x0D06, 0x0D0A, 0x0D0B, 0x0D0E, // hsw_gt1 0x0A02, 0x0A06, 0x0A0A, 0x0A0B, 0x0A0E, 0x0D02, 0x0D06, 0x0D0A, 0x0D0B, 0x0D0E, // hsw_gt1
...@@ -90,6 +92,11 @@ bool IntelDriverVersion::operator>=(const IntelDriverVersion &version) ...@@ -90,6 +92,11 @@ bool IntelDriverVersion::operator>=(const IntelDriverVersion &version)
return !(*this < version); return !(*this < version);
} }
bool IsIvyBridge(uint32_t DeviceId)
{
return std::find(std::begin(IvyBridge), std::end(IvyBridge), DeviceId) != std::end(IvyBridge);
}
bool IsHaswell(uint32_t DeviceId) bool IsHaswell(uint32_t DeviceId)
{ {
return std::find(std::begin(Haswell), std::end(Haswell), DeviceId) != std::end(Haswell); return std::find(std::begin(Haswell), std::end(Haswell), DeviceId) != std::end(Haswell);
......
...@@ -95,6 +95,7 @@ class IntelDriverVersion ...@@ -95,6 +95,7 @@ class IntelDriverVersion
uint16_t mVersionPart; uint16_t mVersionPart;
}; };
bool IsIvyBridge(uint32_t DeviceId);
bool IsHaswell(uint32_t DeviceId); bool IsHaswell(uint32_t DeviceId);
bool IsBroadwell(uint32_t DeviceId); bool IsBroadwell(uint32_t DeviceId);
bool IsCherryView(uint32_t DeviceId); bool IsCherryView(uint32_t DeviceId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment