~registry/dolphin-emu/triforce

« back to all changes in this revision

Viewing changes to Source/Core/VideoCommon/Src/DriverDetails.h

  • Committer: Sérgio Benjamim
  • Date: 2015-02-13 05:54:40 UTC
  • Revision ID: sergio_br2@yahoo.com.br-20150213055440-ey2rt3sjpy27km78
Dolphin Triforce branch from code.google, commit b957980 (4.0-315).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2013 Dolphin Emulator Project
 
2
// Licensed under GPLv2
 
3
// Refer to the license.txt file included.
 
4
#pragma once
 
5
#include "CommonTypes.h"
 
6
 
 
7
namespace DriverDetails
 
8
{
 
9
        // Enum of known vendors
 
10
        // Tegra and Nvidia are separated out due to such substantial differences
 
11
        enum Vendor
 
12
        {
 
13
                VENDOR_ALL = 0,
 
14
                VENDOR_NVIDIA,
 
15
                VENDOR_ATI,
 
16
                VENDOR_INTEL,
 
17
                VENDOR_ARM,
 
18
                VENDOR_QUALCOMM,
 
19
                VENDOR_IMGTEC,
 
20
                VENDOR_TEGRA,
 
21
                VENDOR_VIVANTE,
 
22
                VENDOR_MESA,
 
23
                VENDOR_UNKNOWN
 
24
        };
 
25
 
 
26
        // Enum of known drivers
 
27
        enum Driver
 
28
        {
 
29
                DRIVER_ALL = 0,
 
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
 
45
        };
 
46
 
 
47
        // Enum of known bugs
 
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.
 
51
        enum Bug
 
52
        {
 
53
                // Bug: No Dynamic UBO array object access
 
54
                // Affected Devices: Qualcomm/Adreno
 
55
                // Started Version: 14
 
56
                // Ended Version: -1
 
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
 
63
                // Ended Version: -1
 
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
 
67
                BUG_BROKENCENTROID,
 
68
                // Bug: INFO_LOG_LENGTH broken
 
69
                // Affected devices: Qualcomm/Adreno
 
70
                // Started Version: ? (Noticed on v14)
 
71
                // Ended Version: -1
 
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
 
77
                BUG_BROKENINFOLOG,
 
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
 
85
                BUG_BROKENUBO,
 
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
 
90
                //                   - nouveau
 
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
 
96
                // Started Version: ?
 
97
                // Ended Version: -1
 
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)
 
105
                // Ended Version: -1
 
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
 
109
                BUG_ANNIHILATEDUBOS,
 
110
                // Bug : Can't draw on screen text and clear correctly.
 
111
                // Affected devices: Qualcomm/Adreno
 
112
                // Started Version: ?
 
113
                // Ended 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.
 
117
                BUG_BROKENSWAP,
 
118
                // Bug: Running on a Tegra 4 device
 
119
                // Affected devices: Nvidia Tegra
 
120
                // Started Version: 4
 
121
                // Ended Version: 5
 
122
                // Tegra 4 hardware limitations don't allow it to support OpenGL ES 3
 
123
                // This is fixed in Tegra 5
 
124
                BUG_ISTEGRA,
 
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
 
131
                BUG_ISPOWERVR,
 
132
                // Bug: glBufferSubData/glMapBufferRange stalls + OOM 
 
133
                // Affected devices: Adreno a3xx/Mali-t6xx
 
134
                // Started Version: -1
 
135
                // Ended 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,
 
140
        };
 
141
        
 
142
        // Initializes our internal vendor, device family, and driver version   
 
143
        void Init(Vendor vendor, Driver driver, const double version);
 
144
        
 
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);
 
147
}