1
// Copyright 2013 Dolphin Emulator Project
2
// Licensed under GPLv2
3
// Refer to the license.txt file included.
5
#include "CommonTypes.h"
7
namespace DriverDetails
9
// Enum of known vendors
10
// Tegra and Nvidia are separated out due to such substantial differences
26
// Enum of known drivers
30
DRIVER_NVIDIA, // Official Nvidia, including mobile GPU
31
DRIVER_NOUVEAU, // OSS nouveau
32
DRIVER_ATI, // Official ATI
33
DRIVER_R600, // OSS Radeon
34
DRIVER_INTEL, // Official Intel
35
DRIVER_I965, // OSS Intel
36
DRIVER_ARM_4XX, // Official Mali driver
37
DRIVER_ARM_T6XX, // Official Mali driver
38
DRIVER_LIMA, // OSS Mali driver
39
DRIVER_QUALCOMM_3XX, // Official Adreno driver 3xx
40
DRIVER_QUALCOMM_2XX, // Official Adreno driver 2xx
41
DRIVER_FREEDRENO, // OSS Adreno driver
42
DRIVER_IMGTEC, // OSS PowerVR driver
43
DRIVER_VIVANTE, // Official vivante driver
44
DRIVER_UNKNOWN // Unknown driver, default to official hardware driver
48
// These can be vendor specific, but we put them all in here
49
// For putting a new bug in here, make sure to put a detailed comment above the enum
50
// This'll ensure we know exactly what the issue is.
53
// Bug: No Dynamic UBO array object access
54
// Affected Devices: Qualcomm/Adreno
55
// Started Version: 14
57
// Accessing UBO array members dynamically causes the Adreno shader compiler to crash
58
// Errors out with "Internal Error"
59
BUG_NODYNUBOACCESS = 0,
60
// Bug: Centroid is broken in shaders
61
// Affected devices: Qualcomm/Adreno
62
// Started Version: 14
64
// Centroid in/out, used in the shaders, is used for multisample buffers to get the texel correctly
65
// When MSAA is disabled, it acts like a regular in/out
66
// Tends to cause the driver to render full white or black
68
// Bug: INFO_LOG_LENGTH broken
69
// Affected devices: Qualcomm/Adreno
70
// Started Version: ? (Noticed on v14)
72
// When compiling a shader, it is important that when it fails,
73
// you first get the length of the information log prior to grabbing it.
74
// This allows you to allocate an array to store all of the log
75
// Adreno devices /always/ return 0 when querying GL_INFO_LOG_LENGTH
76
// They also max out at 1024 bytes(1023 characters + null terminator) for the log
78
// Bug: UBO buffer offset broken
79
// Affected devices: all mesa drivers
80
// Started Version: 9.0 (mesa doesn't support ubo before)
81
// Ended Version: up to 9.2
82
// The offset of glBindBufferRange was ignored on all Mesa Gallium3D drivers until 9.1.3
83
// Nouveau stored the offset as u16 which isn't enough for all cases with range until 9.1.6
84
// I965 has broken data fetches from uniform buffers which results in a dithering until 9.2.0
86
// Bug: The hacked buffer upload method isn't working
87
// This isn't a bug as the hacked buffer itself isn't used to work.
88
// I'm still surprised that it works on so many drivers.
89
// Affected devices: - amd close sourced driver
91
// - maybe also some others
92
// This hack is evil. It's like free(pointer); *pointer = data;
93
BUG_BROKENHACKEDBUFFER,
94
// Bug: The pinned memory extension isn't working for index buffers
95
// Affected devices: AMD as they are the only vendor providing this extension
98
// Pinned memory is disabled for index buffer as the amd driver (the only one with pinned memory support) seems
99
// to be broken. We just get flickering/black rendering when using pinned memory here -- degasus - 2013/08/20
100
// Please see issue #6105 on google code. Let's hope buffer storage solves this issues.
101
BUG_BROKENPINNEDMEMORY,
102
// Bug: Entirely broken UBOs
103
// Affected devices: Qualcomm/Adreno
104
// Started Version: ? (Noticed on v45)
106
// Uniform buffers are entirely broken on Qualcomm drivers with v45
107
// Trying to use the uniform buffers causes a malloc to fail inside the driver
108
// To be safe, blanket drivers from v41 - v45
110
// Bug : Can't draw on screen text and clear correctly.
111
// Affected devices: Qualcomm/Adreno
112
// Started Version: ?
114
// Current code for drawing on screen text and clearing the framebuffer doesn't work on Adreno
115
// Drawing on screen text causes the whole screen to swizzle in a terrible fashion
116
// Clearing the framebuffer causes one to never see a frame.
118
// Bug: Running on a Tegra 4 device
119
// Affected devices: Nvidia Tegra
120
// Started Version: 4
122
// Tegra 4 hardware limitations don't allow it to support OpenGL ES 3
123
// This is fixed in Tegra 5
125
// Bug: Running on a PowerVR5 device
126
// Affected devices: PowerVR54x
127
// Started Version: 540
128
// Ended Version: 6xxx
129
// PowerVR 5 hardware limitations don't allow it to support OpenGL ES 3
130
// This is fixed in PowerVR6
132
// Bug: glBufferSubData/glMapBufferRange stalls + OOM
133
// Affected devices: Adreno a3xx/Mali-t6xx
134
// Started Version: -1
136
// Both Adreno and Mali have issues when you call glBufferSubData or glMapBufferRange
137
// The driver stalls in each instance no matter what you do
138
// Apparently Mali and Adreno share code in this regard since it was wrote by the same person.
139
BUG_BROKENBUFFERSTREAM,
142
// Initializes our internal vendor, device family, and driver version
143
void Init(Vendor vendor, Driver driver, const double version);
145
// Once Vendor and driver version is set, this will return if it has the applicable bug passed to it.
146
bool HasBug(Bug bug);