Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Black Screen on AMD R9 390 #10

Open
revelator opened this issue Sep 21, 2017 · 24 comments
Open

Black Screen on AMD R9 390 #10

revelator opened this issue Sep 21, 2017 · 24 comments

Comments

@revelator
Copy link

As the title says there seems to be some problem with this engine and the AMD R9 series.
I can start the game and sound works but the screen is totally black.

Might be driver related but i tried several versions and none of them work :/

@eXistence
Copy link
Owner

what version of fhDOOM?
what operating system?
what driver version?
is that a 'clean' (only unzipped fhDOOM + pak00x.pk4) fhDOOM installation?

could you please execute
fhDOOM.exe +set r_glDebugOutput 2 +set r_fullscreen 0 +condump foo.txt +quit
this should create a foo.txt in your base directory. Please post that file, thx :)

@revelator
Copy link
Author

revelator commented Sep 22, 2017

latest from here, compiled myself because the released version also did this.
OS windows 10 64 pro
driver version AMD crimson 17.7.2

And yes only unpacked fhdoom and copied the required pk4's from doom3.

log here

`fhDOOM 1.5.1 (alpha).1413 win-x86 Jun 27 2016 19:43:01
3600 MHz Intel CPU with MMX & SSE & SSE2 & SSE3 & HTT
16320 MB System Memory
-1 MB Video Memory
Winsock Initialized
Found interface: {15A6AD8C-565B-4EED-96D6-2A2B420AD19B} Intel(R) 82579V Gigabi
t Network Connection - 0.0.0.0 NULL netmask - skipped
Found interface: {73F906AE-988B-4AEA-AC87-34A5C1150E54} Bluetooth Device (Pers
onal Area Network) - 0.0.0.0 NULL netmask - skipped
Found interface: {A4D69469-59E1-49E3-AD9F-A9D0E17FBF51} Windscribe VPN - 0.0.0
.0 NULL netmask - skipped
Found interface: {0CDCA841-7B75-4989-A2CB-D3155CE3E43E} TP-LINK Wireless USB A
dapter - 192.168.87.104/255.255.255.0
Found interface: {5232EF36-89C9-4E71-B703-C7A2D2AA703C} Microsoft Wi-Fi Direct
Virtual Adapter - 0.0.0.0 NULL netmask - skipped
Sys_InitNetworking: adding loopback interface
doom using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
------ Initializing File System ------
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak000.pk4
with checksum 0x28d208f1
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak001.pk4
with checksum 0x40244be0
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak002.pk4
with checksum 0xc51ecdcd
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak003.pk4
with checksum 0xcd79d028
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak004.pk4
with checksum 0x765e4f8b
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak005.pk4
with checksum 0x8ffc3621
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak006.pk4
with checksum 0x95b65ab
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak007.pk4
with checksum 0x666bdb3c
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak008.pk4
with checksum 0x23ae5993
Loaded pk4 C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak100fhdo
om.pk4 with checksum 0x4ac36608
Current search path:
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release/base
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak100fhdoom.pk4 (80
files)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak008.pk4 (3 files)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak007.pk4 (38 files)

C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak006.pk4 (48 files)

C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak005.pk4 (63 files)

C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak004.pk4 (5137 file
s)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak003.pk4 (4676 file
s)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak002.pk4 (6120 file
s)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak001.pk4 (8972 file
s)
C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release\base\pak000.pk4 (2698 file
s)
game DLL: 0x0 in pak: 0x0
Addon pk4s:
file system initialized.

----- Initializing Decls -----

------- Initializing renderSystem --------
renderSystem initialized.

5206 strings read from strings/english.lang
Couldn't open journal files
execing editor.cfg
execing default.cfg
execing DoomConfig.cfg
couldn't exec autoexec.cfg
5206 strings read from strings/english.lang
----- Initializing Sound System ------
sound system initialized.

----- R_InitOpenGL -----
Initializing OpenGL subsystem
...registered window class
...registered fake window class
...created window @ 3,22 (1040x807)
Initializing OpenGL driver
...getting DC: succeeded
...PIXELFORMAT 11 selected
...creating GL legacy context: succeeded
...making legacy context current: succeeded
...initializing GL extensions (GLEW): succeeded
...creating GL core profile context: succeeded
...making core profile context current: succeeded
...deleting old GL legacy context...initializing GL extensions (GLEW): succeed
ed

------- Input Initialization -------
Initializing DirectInput...
mouse: DirectInput initialized.
keyboard: DirectInput initialized.

sound: STEREO
Check extension 'GL_ARB_multitexture': OK
Check extension 'GL_ARB_texture_cube_map': OK
Check extension 'GL_ARB_texture_env_dot3': OK
Check extension 'GL_ARB_texture_env_add': OK
Check extension 'GL_ARB_texture_non_power_of_two': OK
Check extension 'GL_ARB_texture_compression': OK
Check extension 'GL_EXT_texture_compression_s3tc': OK
Check extension 'GL_EXT_texture_filter_anisotropic': OK
maxTextureAnisotropy: 16.000000
Check extension 'GL_EXT_depth_bounds_test': OK
Check extension 'GL_EXT_direct_state_access': OK
Check extension 'GL_ARB_direct_state_access': OK

GL_VENDOR: ATI Technologies Inc.
GL_RENDERER: AMD Radeon (TM) R9 390 Series
GL_VERSION: 3.3.13492 Core Profile/Debug Context 22.19.676.0
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_UNITS_ARB: 16
GL_MAX_TEXTURE_COORDS_ARB: 0
GL_MAX_TEXTURE_IMAGE_UNITS_ARB: 32

PIXELFORMAT: color(32-bits) Z(24-bit) stencil(8-bits)
MODE: 5, 1024 x 768 windowed hz:N/A
CPU: Intel CPU with MMX & SSE & SSE2 & SSE3 & HTT

glFinish not forced
swapInterval not forced
load vertex shader glsl/fogLight.vp
load fragment shader glsl/fogLight.fp
load vertex shader glsl/blendLight.vp
load fragment shader glsl/blendLight.fp
load vertex shader glsl/shadow.vp
load fragment shader glsl/shadow.fp
load vertex shader glsl/depth.vp
load fragment shader glsl/depth.fp
load vertex shader glsl/shadowmap.vp
load fragment shader glsl/shadowmap.fp
load vertex shader glsl/default.vp
load fragment shader glsl/default.fp
load vertex shader glsl/depthblend.vp
load fragment shader glsl/depthblend.fp
load vertex shader glsl/skybox.vp
load fragment shader glsl/skybox.fp
load vertex shader glsl/bumpyenv.vp
load fragment shader glsl/bumpyenv.fp
load vertex shader glsl/interaction.vp
load fragment shader glsl/interaction.fp
load vertex shader glsl/vertexcolor.vp
load fragment shader glsl/vertexcolor.fp
load vertex shader glsl/flatcolor.vp
load fragment shader glsl/flatcolor.fp
load vertex shader glsl/intensity.vp
load fragment shader glsl/intensity.fp
load vertex shader glsl/debugdepth.vp
load fragment shader glsl/debugdepth.fp
load vertex shader glsl/fogLight.vp
load fragment shader glsl/fogLight.fp
load vertex shader glsl/blendLight.vp
load fragment shader glsl/blendLight.fp
load vertex shader glsl/shadow.vp
load fragment shader glsl/shadow.fp
load vertex shader glsl/depth.vp
load fragment shader glsl/depth.fp
load vertex shader glsl/shadowmap.vp
load fragment shader glsl/shadowmap.fp
load vertex shader glsl/default.vp
load fragment shader glsl/default.fp
load vertex shader glsl/depthblend.vp
load fragment shader glsl/depthblend.fp
load vertex shader glsl/skybox.vp
load fragment shader glsl/skybox.fp
load vertex shader glsl/bumpyenv.vp
load fragment shader glsl/bumpyenv.fp
load vertex shader glsl/interaction.vp
load fragment shader glsl/interaction.fp
load vertex shader glsl/vertexcolor.vp
load fragment shader glsl/vertexcolor.fp
load vertex shader glsl/flatcolor.vp
load fragment shader glsl/flatcolor.fp
load vertex shader glsl/intensity.vp
load fragment shader glsl/intensity.fp
load vertex shader glsl/debugdepth.vp
load fragment shader glsl/debugdepth.fp
DLL file name: fhGame-x86.dll
look for DLL next to executable: C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\R
elease/fhGame-x86.dll
game using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
--------- Initializing Game ----------
gamename: baseDOOM-1
gamedate: Jun 27 2016
Initializing event system
...473 event definitions
Initializing class hierarchy
...142 classes, 191092 bytes for event callbacks
Initializing scripts
Compiled 'weapon_shotgun::Lower': 481.2 ms
---------- Compile stats ----------

Memory usage:
Strings: 79, 9648 bytes
Statements: 67875, 1357500 bytes
Functions: 2109, 250532 bytes
Variables: 147376 bytes
Mem used: 2476344 bytes
Static data: 2277552 bytes
Allocated: 3281600 bytes
Thread size: 7068 bytes

...6 aas types
game initialized.

-------- Initializing Session --------
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
session initialized

--- Common Initialization Complete ---
------------- Warnings ---------------
during fhDOOM initialization...
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
1 warnings
Unknown command 'fhDOOM.exe'
Dumped console text to foo.txt.

`

@eXistence
Copy link
Owner

I am not sure what version you compiled there, but its definitely not the "latest from here".

Your file says its version '1.5.1', but latest released version is '1.5.2'.

I don't know if that changes anything, but please try again with latest official binaries (http://www.facinghell.com/fhdoom/fhDOOM-1.5.2-1414.zip) and post your results.

Please use the released binaries and don't compile from current master branch (version '1.5.3 (snaphot)'), because that code is still in a state of flux.

@eXistence
Copy link
Owner

Any news on the issue?

I am using the same opengl driver (but on a R9 280) without any problems, but it is still possible that there is a bug somewhere. If not in the code, it might be in the build system. To investigate the issue further i need to know, if the problem still occurs if you use the released binaries.

Comments from people with similar hardware are also appreciated :-)

There is something else that might be related to the problem:
why do you have a base directory and all these pk4 files in your Release directory (especially pak100fhdo om.pk4 should not be there)?
On start fhDOOM will walk up the directory path and search for the base directory. If your exe is in C:\Msys64\src\fhDOOM\build\msvc2015-x86\bin\Release it should automatically pick up C:\Msys64\src\fhDOOM\base as your base directory.

pak100fhdoom.pk4 is only created for the official ready-to-use release package, you don't need it for developing.

@revelator
Copy link
Author

I did try at first with the release binaries with no luck unfortunatly, my own build was to check if it was something related to the compiler used but i got the exact same bug with my own build.

Not sure but the R9 390 is actually just a refurbished R9 290 with higher clock speeds. It works quite well for both unmodified doom3 and with sikkmod shaders but i remember id had to take some steps to get AMD cards running even with the old ARB2 renderer.

I also have an old project by MH that does use a simple glsl backend for rendering while effects where still rendered by the ARB shaders. It did have a few pitsalls but it runs so im a bit stumped by this.

@revelator
Copy link
Author

P.s the output from the release version is exactly the same as my own compile which doe's not seem to hint at any problem with the extensions, so the card obviously supports the extensions reported.

@revelator
Copy link
Author

revelator commented Sep 29, 2017

log here

`fhDOOM 1.5.2.1414 win-x86 Aug 16 2017 22:40:18
3600 MHz Intel CPU with MMX & SSE & SSE2 & SSE3 & HTT
16320 MB System Memory
-1 MB Video Memory
Winsock Initialized
Found interface: {15A6AD8C-565B-4EED-96D6-2A2B420AD19B} Intel(R) 82579V Gigabi
t Network Connection - 0.0.0.0 NULL netmask - skipped
Found interface: {73F906AE-988B-4AEA-AC87-34A5C1150E54} Bluetooth Device (Pers
onal Area Network) - 0.0.0.0 NULL netmask - skipped
Found interface: {A4D69469-59E1-49E3-AD9F-A9D0E17FBF51} Windscribe VPN - 0.0.0
.0 NULL netmask - skipped
Found interface: {0CDCA841-7B75-4989-A2CB-D3155CE3E43E} TP-LINK Wireless USB A
dapter - 192.168.87.104/255.255.255.0
Found interface: {5232EF36-89C9-4E71-B703-C7A2D2AA703C} Microsoft Wi-Fi Direct
Virtual Adapter - 0.0.0.0 NULL netmask - skipped
Sys_InitNetworking: adding loopback interface
doom using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
------ Initializing File System ------
Loaded pk4 C:\fhDOOM\base\pak000.pk4 with checksum 0x28d208f1
Loaded pk4 C:\fhDOOM\base\pak001.pk4 with checksum 0x40244be0
Loaded pk4 C:\fhDOOM\base\pak002.pk4 with checksum 0xc51ecdcd
Loaded pk4 C:\fhDOOM\base\pak003.pk4 with checksum 0xcd79d028
Loaded pk4 C:\fhDOOM\base\pak004.pk4 with checksum 0x765e4f8b
Loaded pk4 C:\fhDOOM\base\pak005.pk4 with checksum 0x8ffc3621
Loaded pk4 C:\fhDOOM\base\pak006.pk4 with checksum 0x95b65ab
Loaded pk4 C:\fhDOOM\base\pak007.pk4 with checksum 0x666bdb3c
Loaded pk4 C:\fhDOOM\base\pak008.pk4 with checksum 0x23ae5993
Loaded pk4 C:\fhDOOM\base\pak100fhdoom.pk4 with checksum 0x447276b1
Current search path:
C:\fhDOOM/base
C:\fhDOOM\base\pak100fhdoom.pk4 (80 files)
C:\fhDOOM\base\pak008.pk4 (3 files)
C:\fhDOOM\base\pak007.pk4 (38 files)
C:\fhDOOM\base\pak006.pk4 (48 files)
C:\fhDOOM\base\pak005.pk4 (63 files)
C:\fhDOOM\base\pak004.pk4 (5137 files)
C:\fhDOOM\base\pak003.pk4 (4676 files)
C:\fhDOOM\base\pak002.pk4 (6120 files)
C:\fhDOOM\base\pak001.pk4 (8972 files)
C:\fhDOOM\base\pak000.pk4 (2698 files)
game DLL: 0x0 in pak: 0x0
Addon pk4s:
file system initialized.

----- Initializing Decls -----

------- Initializing renderSystem --------
renderSystem initialized.

5206 strings read from strings/english.lang
Couldn't open journal files
execing editor.cfg
execing default.cfg
couldn't exec DoomConfig.cfg
couldn't exec autoexec.cfg
5206 strings read from strings/english.lang
----- Initializing Sound System ------
sound system initialized.

----- R_InitOpenGL -----
Initializing OpenGL subsystem
...registered window class
...registered fake window class
...created window @ 3,22 (1040x807)
Initializing OpenGL driver
...getting DC: succeeded
...PIXELFORMAT 11 selected
...creating GL legacy context: succeeded
...making legacy context current: succeeded
...initializing GL extensions (GLEW): succeeded
...creating GL core profile context: succeeded
...making core profile context current: succeeded
...deleting old GL legacy context...initializing GL extensions (GLEW): succeed
ed

------- Input Initialization -------
Initializing DirectInput...
mouse: DirectInput initialized.
keyboard: DirectInput initialized.

sound: STEREO
Check extension 'GL_ARB_multitexture': OK
Check extension 'GL_ARB_texture_cube_map': OK
Check extension 'GL_ARB_texture_env_dot3': OK
Check extension 'GL_ARB_texture_env_add': OK
Check extension 'GL_ARB_texture_non_power_of_two': OK
Check extension 'GL_ARB_texture_compression': OK
Check extension 'GL_EXT_texture_compression_s3tc': OK
Check extension 'GL_EXT_texture_filter_anisotropic': OK
maxTextureAnisotropy: 16.000000
Check extension 'GL_EXT_depth_bounds_test': OK
Check extension 'GL_EXT_direct_state_access': OK
Check extension 'GL_ARB_direct_state_access': OK

GL_VENDOR: ATI Technologies Inc.
GL_RENDERER: AMD Radeon (TM) R9 390 Series
GL_VERSION: 3.3.13492 Core Profile/Debug Context 22.19.676.0
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_UNITS_ARB: 16
GL_MAX_TEXTURE_COORDS_ARB: 0
GL_MAX_TEXTURE_IMAGE_UNITS_ARB: 32

PIXELFORMAT: color(32-bits) Z(24-bit) stencil(8-bits)
MODE: 5, 1024 x 768 windowed hz:N/A
CPU: Intel CPU with MMX & SSE & SSE2 & SSE3 & HTT

glFinish not forced
swapInterval not forced
load vertex shader glsl/fogLight.vp
load fragment shader glsl/fogLight.fp
load vertex shader glsl/blendLight.vp
load fragment shader glsl/blendLight.fp
load vertex shader glsl/shadow.vp
load fragment shader glsl/shadow.fp
load vertex shader glsl/depth.vp
load fragment shader glsl/depth.fp
load vertex shader glsl/shadowmap.vp
load fragment shader glsl/shadowmap.fp
load vertex shader glsl/default.vp
load fragment shader glsl/default.fp
load vertex shader glsl/depthblend.vp
load fragment shader glsl/depthblend.fp
load vertex shader glsl/skybox.vp
load fragment shader glsl/skybox.fp
load vertex shader glsl/bumpyenv.vp
load fragment shader glsl/bumpyenv.fp
load vertex shader glsl/interaction.vp
load fragment shader glsl/interaction.fp
load vertex shader glsl/vertexcolor.vp
load fragment shader glsl/vertexcolor.fp
load vertex shader glsl/flatcolor.vp
load fragment shader glsl/flatcolor.fp
load vertex shader glsl/intensity.vp
load fragment shader glsl/intensity.fp
load vertex shader glsl/debugdepth.vp
load fragment shader glsl/debugdepth.fp
load vertex shader glsl/fogLight.vp
load fragment shader glsl/fogLight.fp
load vertex shader glsl/blendLight.vp
load fragment shader glsl/blendLight.fp
load vertex shader glsl/shadow.vp
load fragment shader glsl/shadow.fp
load vertex shader glsl/depth.vp
load fragment shader glsl/depth.fp
load vertex shader glsl/shadowmap.vp
load fragment shader glsl/shadowmap.fp
load vertex shader glsl/default.vp
load fragment shader glsl/default.fp
load vertex shader glsl/depthblend.vp
load fragment shader glsl/depthblend.fp
load vertex shader glsl/skybox.vp
load fragment shader glsl/skybox.fp
load vertex shader glsl/bumpyenv.vp
load fragment shader glsl/bumpyenv.fp
load vertex shader glsl/interaction.vp
load fragment shader glsl/interaction.fp
load vertex shader glsl/vertexcolor.vp
load fragment shader glsl/vertexcolor.fp
load vertex shader glsl/flatcolor.vp
load fragment shader glsl/flatcolor.fp
load vertex shader glsl/intensity.vp
load fragment shader glsl/intensity.fp
load vertex shader glsl/debugdepth.vp
load fragment shader glsl/debugdepth.fp
glGetError() = 0x500
DLL file name: fhGame-x86.dll
look for DLL next to executable: C:\fhDOOM/fhGame-x86.dll
game using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
--------- Initializing Game ----------
gamename: baseDOOM-1
gamedate: Aug 16 2017
Initializing event system
...473 event definitions
Initializing class hierarchy
...142 classes, 191092 bytes for event callbacks
Initializing scripts
Compiled 'monster_demon_archvile': 462.3 ms
---------- Compile stats ----------

Memory usage:
Strings: 79, 9648 bytes
Statements: 67875, 1357500 bytes
Functions: 2109, 250532 bytes
Variables: 147376 bytes
Mem used: 2476344 bytes
Static data: 2277552 bytes
Allocated: 3281600 bytes
Thread size: 7068 bytes

...6 aas types
game initialized.

-------- Initializing Session --------
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
Couldn't read ../base/doomkey.
Couldn't read ../base/xpkey.
session initialized

--- Common Initialization Complete ---
------------- Warnings ---------------
during fhDOOM initialization...
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
1 warnings
Dumped console text to foo.txt.

`

Here is the one with the release binaries

@revelator
Copy link
Author

Whoops just noticed glGetError() = 0x500 that seems to point to an invalid enumerator somewhere.
Might be possible to use an assert on glGetError to get the location in the shader that fails.

Not sure why a newer card than yours fails this.

@eXistence
Copy link
Owner

Thx for the update and the glGetError hint. I will look into it and get back to you.

@revelator
Copy link
Author

Np, AMD cards usually get flak for bad opengl support, in most cases its because the AMD opengl drivers are quite a bit stricter than nvidia's. But we both have AMD so this is a bit puzzling Oo.

Not sure i ever seen it work on one AMD card and with the same driver and not on another. Might also be something that would interrest AMD's devs since it would suggest breakage somewhere.

AMD has a tool for checking GLSL shaders specifically for AMD cards, might be of use to you maybe ?.
Link's for the various tools here https://gpuopen.com/archive/gpu-shaderanalyzer/

@revelator
Copy link
Author

revelator commented Oct 5, 2017

I tested my cards opengl capabilities using OpenGL extensions viewer, might be usefull comparing with yours.

log here

> Renderer: AMD Radeon (TM) R9 390 Series Vendor: ATI Technologies Inc. Memory: 4095 MB Version: 3.3.13492 Core Profile Forward-Compatible Context 22.19.677.257 Shading language version: 4.50

Max texture size: 16384 x 16384
Max vertex texture image units: 32
Max texture image units: 32
Max geometry texture units: 32
Max anisotropic filtering value: 16
Max viewport size: 16384 x 16384
Max Clip Distances: 8
Max samples: 8

GL Extensions: 312
\i0

GL_ARB_tessellation_shader
GL_ARB_half_float_pixel
GL_EXT_compiled_vertex_array
GL_AMD_shader_stencil_value_export
GL_WIN_swap_hint
GL_EXT_packed_depth_stencil
GL_EXT_texture_lod_bias
GL_EXT_provoking_vertex
GL_EXT_direct_state_access
GL_ARB_color_buffer_float
GL_ARB_shader_image_load_store
GL_ARB_texture_compression_bptc
GL_ARB_texture_compression_rgtc
GL_AMD_interleaved_elements
GL_ARB_draw_instanced
GL_ARB_derivative_control
GL_EXT_draw_buffers2
GL_ARB_viewport_array
GL_ARB_gpu_shader_fp64
GL_ARB_pipeline_statistics_query
GL_EXT_texture_shared_exponent
GL_ARB_draw_elements_base_vertex
GL_ARB_arrays_of_arrays
GL_ARB_vertex_type_10f_11f_11f_rev
GL_AMD_occlusion_query_event
GL_ARB_window_pos
GL_ARB_explicit_attrib_location
GL_EXT_texture_env_dot3
GL_ARB_texture_float
GL_AMD_blend_minmax_factor
GL_ARB_texture_snorm
GL_ARB_point_parameters
GL_ARB_texture_compression
GL_AMD_transform_feedback3_lines_triangles
GL_EXT_transform_feedback
GL_ARB_depth_buffer_float
GL_EXT_bindable_uniform
GL_ARB_shader_ballot
GL_EXT_timer_query
GL_ARB_vertex_buffer_object
GL_AMD_pinned_memory
GL_EXT_packed_float
GL_ARB_pixel_buffer_object
GL_EXT_texgen_reflection
WGL_NV_float_buffer
GL_NV_texture_barrier
GL_ATI_envmap_bumpmap
GL_ARB_separate_shader_objects
GL_ARB_buffer_storage
GL_AMD_seamless_cubemap_per_texture
GL_ARB_query_buffer_object
WGL_EXT_framebuffer_sRGB
GL_AMD_draw_buffers_blend
GL_ARB_fragment_program_shadow
GL_EXT_texture_object
WGL_EXT_swap_control
GL_ARB_shading_language_100
GL_ARB_program_interface_query
WGL_ARB_extensions_string
GL_KHR_debug
GL_ARB_compute_shader
GL_KTX_buffer_region
GL_ARB_get_texture_sub_image
GL_ARB_texture_storage
GL_EXT_packed_pixels
GL_EXT_blend_func_separate
GL_ARB_shader_viewport_layer_array
GL_ARB_gpu_shader5
GL_INTEL_fragment_shader_ordering
GL_EXT_texture3D
GL_ARB_texture_env_crossbar
GL_AMD_name_gen_delete
GL_EXT_stencil_wrap
GL_ATI_fragment_shader
GL_ARB_ES3_compatibility
GL_EXT_subtexture
GL_ARB_texture_swizzle
GL_ARB_transpose_matrix
GL_EXT_shader_image_load_store
GL_AMD_conservative_depth
GL_EXT_texture_compression_bptc
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_s3tc
GL_EXT_texture_compression_rgtc
GL_ARB_vertex_program
GL_EXT_texture_sRGB
GL_NV_copy_depth_to_color
WGL_EXT_pixel_format_packed_float
WGL_EXT_swap_control_tear
GL_NV_float_buffer
GL_ARB_texture_rectangle
GL_ARB_depth_clamp
GL_ARB_shading_language_packing
GL_ARB_texture_cube_map_array
GL_ARB_framebuffer_sRGB
GL_ARB_sparse_texture
WGL_ARB_render_texture
GL_ARB_texture_env_add
GL_AMD_shader_atomic_counter_ops
GL_ARB_texture_rg
GL_ARB_framebuffer_no_attachments
GL_ARB_blend_func_extended
GL_ATI_texture_float
WGL_EXT_extensions_string
GL_ARB_vertex_attrib_64bit
GL_AMD_shader_trinary_minmax
GL_EXT_vertex_array
GL_EXT_texture_sRGB_decode
GL_ARB_multi_draw_indirect
GL_ARB_texture_gather
GL_ARB_half_float_vertex
GL_SGIS_texture_edge_clamp
GL_ARB_debug_output
GL_EXT_copy_texture
GL_ARB_texture_cube_map
GL_EXT_shadow_funcs
GL_SGIS_texture_lod
GL_AMD_debug_output
GL_EXT_texture_filter_anisotropic
GL_ARB_shader_draw_parameters
GL_EXT_pixel_buffer_object
GL_AMD_framebuffer_sample_positions
GL_EXT_point_parameters
GL_EXT_multi_draw_arrays
WGL_ATI_render_texture_rectangle
GL_ARB_invalidate_subdata
GL_EXT_texture_rectangle
GL_ATI_draw_buffers
GL_ARB_vertex_array_object
GL_ARB_explicit_uniform_location
GL_ARB_shadow
GL_ARB_vertex_array_bgra
GL_NV_copy_image
GL_ARB_shader_group_vote
GL_ARB_shader_texture_lod
GL_AMD_gpu_shader_int64
GL_SGIS_generate_mipmap
GL_EXT_blend_minmax
WGL_ARB_pixel_format
GL_ARB_shadow_ambient
GL_ARB_texture_query_levels
GL_ARB_point_sprite
GL_ARB_depth_texture
GL_ARB_fragment_layer_viewport
GL_ARB_copy_buffer
WGL_ARB_make_current_read
WGL_ARB_pixel_format_float
GL_KHR_robustness
GL_ARB_indirect_parameters
GL_ARB_bindless_texture
GL_ARB_get_program_binary
GL_ARB_conditional_render_inverted
GL_ARB_transform_feedback2
GL_ARB_transform_feedback3
WGL_ARB_pbuffer
GL_AMD_sparse_texture
GL_EXT_vertex_array_bgra
GL_ARB_vertex_attrib_binding
GL_NV_alpha_to_coverage_dither_control
GL_ARB_map_buffer_range
WGL_AMD_gpu_association
GL_ARB_occlusion_query
WGL_ARB_create_context
GL_ARB_fragment_shader
GL_ARB_draw_buffers
GL_EXT_texture_lod
GL_EXT_vertex_attrib_64bit
GL_ARB_texture_border_clamp
GL_SUN_multi_draw_arrays
GL_AMD_vertex_shader_viewport_index
GL_ARB_copy_image
GL_NV_half_float
GL_ARB_vertex_shader
GL_ARB_texture_mirrored_repeat
GL_EXT_fog_coord
GL_NV_explicit_multisample
GL_AMD_shader_stencil_export
GL_ARB_sparse_buffer
GL_ARB_fragment_program
GL_EXT_framebuffer_blit
GL_EXT_framebuffer_sRGB
GL_ARB_draw_indirect
GL_ARB_imaging
GL_ARB_geometry_shader4
GL_ATI_separate_stencil
GL_ARB_shading_language_420pack
GL_ARB_base_instance
GL_ARB_texture_env_combine
GL_EXT_abgr
GL_EXT_bgra
GL_ARB_texture_non_power_of_two
GL_ARB_texture_buffer_object
GL_EXT_texture_cube_map
GL_AMD_texture_texture4
GL_ARB_texture_barrier
GL_KHR_robust_buffer_access_behavior
GL_EXT_texture_edge_clamp
GL_ARB_seamless_cubemap_per_texture
GL_ARB_sync
GL_ARB_texture_query_lod
GL_ARB_clear_buffer_object
GL_EXT_separate_specular_color
GL_EXT_framebuffer_object
GL_EXT_texture_integer
GL_NV_conditional_render
GL_ARB_draw_buffers_blend
GL_ARB_texture_stencil8
GL_AMD_stencil_operation_extended
GL_EXT_blend_color
GL_ARB_sample_shading
GL_EXT_gpu_program_parameters
GL_ARB_internalformat_query
GL_EXT_texture_mirror_clamp
GL_ARB_timer_query
GL_ARB_cull_distance
GL_NV_texgen_reflection
GL_AMD_query_buffer_object
GL_KHR_context_flush_control
GL_NV_depth_buffer_float
GL_AMD_texture_cube_map_array
GL_ARB_robust_buffer_access_behavior
GL_EXT_blend_subtract
GL_ARB_shader_subroutine
GL_ARB_conservative_depth
GL_EXT_gpu_shader4
WGL_ARB_multisample
GL_ARB_texture_buffer_range
GL_EXT_secondary_color
GL_EXT_texture_storage
GL_ARB_texture_mirror_clamp_to_edge
GL_ARB_transform_feedback_overflow_query
GL_ARB_shader_precision
GL_AMD_gcn_shader
GL_ARB_clip_control
GL_AMD_shader_trace
GL_EXT_texture_swizzle
GL_ATI_texture_mirror_once
GL_ARB_provoking_vertex
GL_ARB_stencil_texturing
WGL_ARB_context_flush_control
GL_ARB_shader_texture_image_samples
GL_ARB_texture_view
GL_NV_blend_square
GL_ARB_internalformat_query2
GL_OES_EGL_image
GL_EXT_texture_buffer_object
GL_ARB_shader_image_size
WGL_NV_swap_group
GL_EXT_polygon_offset_clamp
GL_EXT_texture_env_combine
GL_EXT_draw_range_elements
GL_EXT_texture_env_add
GL_AMDX_debug_output
GL_AMD_multi_draw_indirect
GL_AMD_vertex_shader_layer
GL_ATI_texture_compression_3dc
GL_ARB_compressed_texture_pixel_storage
GL_ARB_multisample
GL_ARB_shader_objects
GL_ARB_ES3_1_compatibility
WGL_NV_DX_interop
GL_EXT_geometry_shader4
GL_ARB_direct_state_access
GL_AMD_depth_clamp_separate
GL_ARB_texture_env_dot3
GL_NV_primitive_restart
GL_EXT_rescale_normal
GL_EXT_blend_equation_separate
GL_ARB_vertex_type_2_10_10_10_rev
GL_ATI_texture_env_combine3
GL_ARB_shader_storage_buffer_object
GL_EXT_draw_instanced
WGL_ARB_create_context_profile
WGL_I3D_genlock
WGL_ARB_buffer_region
GL_ARB_transform_feedback_instanced
WGL_ATI_pixel_format_float
GL_ARB_texture_buffer_object_rgb32
GL_EXT_histogram
GL_ARB_instanced_arrays
GL_ARB_texture_storage_multisample
GL_IBM_texture_mirrored_repeat
GL_ARB_gl_spirv
GL_ARB_shader_stencil_export
GL_ARB_ES2_compatibility
GL_ARB_uniform_buffer_object
GL_AMD_sparse_texture_pool
GL_EXT_framebuffer_multisample
GL_EXT_copy_buffer
GL_ARB_texture_multisample
GL_ARB_shader_atomic_counters
GL_EXT_shader_integer_mix
GL_ARB_map_buffer_alignment
GL_ARB_sampler_objects
GL_AMD_sample_positions
GL_ARB_occlusion_query2
GL_ARB_framebuffer_object
GL_ARB_enhanced_layouts
GL_ARB_multi_bind
WGL_NV_DX_interop2
GL_AMD_transform_feedback4
WGL_AMDX_gpu_association
GL_EXT_depth_bounds_test
GL_ARB_multitexture
GL_EXT_texture_array
GL_ARB_seamless_cube_map
GL_EXT_texture_snorm
GL_ARB_texture_rgb10_a2ui
GL_ARB_fragment_coord_conventions
GL_ARB_clear_texture
GL_AMD_performance_monitor
GL_ARB_shader_bit_encoding

Core features
v3.0 (100 % - 23/23)
v3.1 (100 % - 8/8)
v3.2 (100 % - 10/10)
v3.3 (100 % - 10/10)
v4.0 (100 % - 14/14)
v4.1 (100 % - 7/7)
v4.2 (92 % - 12/13)
v4.3 (86 % - 20/23)
v4.4 (100 % - 10/10)
v4.5 (100 % - 11/11)
v4.6 (45 % - 5/11)
vARB 2015 (16 % - 2/12)
OpenGL driver version check (Current: 3.3.13492 Core Profile Forward-Compatible Context 22.19.677.257, Latest known: ):
Latest version of display drivers found
According the database, you are running the latest display drivers for your video card.
No ICD registry entry
The current OpenGL driver doesn't expose the SOFTWARE/Microsoft/Windows (NT)/CurrentVersion/OpenGLDrivers registry entry. Unable to detect the driver version, driver revision name and filename.
Extension verification:
GL_APPLE_texture_range was not found, but has the entry point glGetTexParameterPointervAPPLE
GL_APPLE_texture_range was not found, but has the entry point glTextureRangeAPPLE
GL_NV_gpu_shader5 was not found, but has the entry point glGetUniformi64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glGetUniformui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform1i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform1i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform1ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform1ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform2i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform2i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform2ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform2ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform3i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform3i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform3ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform3ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform4i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform4i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform4ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glProgramUniform4ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform1i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform1i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform1ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform1ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform2i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform2i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform2ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform2ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform3i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform3i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform3ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform3ui64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform4i64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform4i64vNV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform4ui64NV
GL_NV_gpu_shader5 was not found, but has the entry point glUniform4ui64vNV
GL_EXT_vertex_shader was not found, but has the entry point glBeginVertexShaderEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindLightParameterEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindMaterialParameterEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindParameterEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindTexGenParameterEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindTextureUnitParameterEXT
GL_EXT_vertex_shader was not found, but has the entry point glBindVertexShaderEXT
GL_EXT_vertex_shader was not found, but has the entry point glDeleteVertexShaderEXT
GL_EXT_vertex_shader was not found, but has the entry point glDisableVariantClientStateEXT
GL_EXT_vertex_shader was not found, but has the entry point glEnableVariantClientStateEXT
GL_EXT_vertex_shader was not found, but has the entry point glEndVertexShaderEXT
GL_EXT_vertex_shader was not found, but has the entry point glExtractComponentEXT
GL_EXT_vertex_shader was not found, but has the entry point glGenSymbolsEXT
GL_EXT_vertex_shader was not found, but has the entry point glGenVertexShadersEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetInvariantBooleanvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetInvariantFloatvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetInvariantIntegervEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetLocalConstantBooleanvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetLocalConstantFloatvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetLocalConstantIntegervEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetVariantBooleanvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetVariantFloatvEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetVariantIntegervEXT
GL_EXT_vertex_shader was not found, but has the entry point glGetVariantPointervEXT
GL_EXT_vertex_shader was not found, but has the entry point glInsertComponentEXT
GL_EXT_vertex_shader was not found, but has the entry point glIsVariantEnabledEXT
GL_EXT_vertex_shader was not found, but has the entry point glSetInvariantEXT
GL_EXT_vertex_shader was not found, but has the entry point glSetLocalConstantEXT
GL_EXT_vertex_shader was not found, but has the entry point glShaderOp1EXT
GL_EXT_vertex_shader was not found, but has the entry point glShaderOp2EXT
GL_EXT_vertex_shader was not found, but has the entry point glShaderOp3EXT
GL_EXT_vertex_shader was not found, but has the entry point glSwizzleEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantPointerEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantbvEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantdvEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantfvEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantivEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantsvEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantubvEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantuivEXT
GL_EXT_vertex_shader was not found, but has the entry point glVariantusvEXT
GL_EXT_vertex_shader was not found, but has the entry point glWriteMaskEXT
GL_ARB_robustness was not found, but has the entry point glGetGraphicsResetStatusARB
GL_ARB_robustness was not found, but has the entry point glGetnColorTableARB
GL_ARB_robustness was not found, but has the entry point glGetnCompressedTexImageARB
GL_ARB_robustness was not found, but has the entry point glGetnConvolutionFilterARB
GL_ARB_robustness was not found, but has the entry point glGetnHistogramARB
GL_ARB_robustness was not found, but has the entry point glGetnMapdvARB
GL_ARB_robustness was not found, but has the entry point glGetnMapfvARB
GL_ARB_robustness was not found, but has the entry point glGetnMapivARB
GL_ARB_robustness was not found, but has the entry point glGetnMinmaxARB
GL_ARB_robustness was not found, but has the entry point glGetnPixelMapfvARB
GL_ARB_robustness was not found, but has the entry point glGetnPixelMapuivARB
GL_ARB_robustness was not found, but has the entry point glGetnPixelMapusvARB
GL_ARB_robustness was not found, but has the entry point glGetnPolygonStippleARB
GL_ARB_robustness was not found, but has the entry point glGetnSeparableFilterARB
GL_ARB_robustness was not found, but has the entry point glGetnTexImageARB
GL_ARB_robustness was not found, but has the entry point glGetnUniformdvARB
GL_ARB_robustness was not found, but has the entry point glGetnUniformfvARB
GL_ARB_robustness was not found, but has the entry point glGetnUniformivARB
GL_ARB_robustness was not found, but has the entry point glGetnUniformuivARB
GL_ARB_robustness was not found, but has the entry point glReadnPixelsARB
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUFiniNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUGetSurfaceivNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUInitNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUIsSurfaceNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUMapSurfacesNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAURegisterOutputSurfaceNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAURegisterVideoSurfaceNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUSurfaceAccessNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUUnmapSurfacesNV
GL_NV_vdpau_interop was not found, but has the entry point glVDPAUUnregisterSurfaceNV
GL_VERSION_1_2 was not found, but has the entry point glCopyTexSubImage3D
GL_VERSION_1_2 was not found, but has the entry point glDrawRangeElements
GL_VERSION_1_2 was not found, but has the entry point glTexImage3D
GL_VERSION_1_2 was not found, but has the entry point glTexSubImage3D
GL_VERSION_1_3 was not found, but has the entry point glActiveTexture
GL_VERSION_1_3 was not found, but has the entry point glClientActiveTexture
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexImage1D
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexImage2D
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexImage3D
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexSubImage1D
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexSubImage2D
GL_VERSION_1_3 was not found, but has the entry point glCompressedTexSubImage3D
GL_VERSION_1_3 was not found, but has the entry point glGetCompressedTexImage
GL_VERSION_1_3 was not found, but has the entry point glLoadTransposeMatrixd
GL_VERSION_1_3 was not found, but has the entry point glLoadTransposeMatrixf
GL_VERSION_1_3 was not found, but has the entry point glMultTransposeMatrixd
GL_VERSION_1_3 was not found, but has the entry point glMultTransposeMatrixf
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1d
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1dv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1f
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1fv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1i
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1iv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1s
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord1sv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2d
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2dv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2f
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2fv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2i
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2iv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2s
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord2sv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3d
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3dv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3f
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3fv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3i
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3iv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3s
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord3sv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4d
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4dv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4f
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4fv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4i
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4iv
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4s
GL_VERSION_1_3 was not found, but has the entry point glMultiTexCoord4sv
GL_VERSION_1_3 was not found, but has the entry point glSampleCoverage
GL_VERSION_1_4 was not found, but has the entry point glBlendColor
GL_VERSION_1_4 was not found, but has the entry point glBlendEquation
GL_VERSION_1_4 was not found, but has the entry point glBlendFuncSeparate
GL_VERSION_1_4 was not found, but has the entry point glFogCoordPointer
GL_VERSION_1_4 was not found, but has the entry point glFogCoordd
GL_VERSION_1_4 was not found, but has the entry point glFogCoorddv
GL_VERSION_1_4 was not found, but has the entry point glFogCoordf
GL_VERSION_1_4 was not found, but has the entry point glFogCoordfv
GL_VERSION_1_4 was not found, but has the entry point glMultiDrawArrays
GL_VERSION_1_4 was not found, but has the entry point glMultiDrawElements
GL_VERSION_1_4 was not found, but has the entry point glPointParameterf
GL_VERSION_1_4 was not found, but has the entry point glPointParameterfv
GL_VERSION_1_4 was not found, but has the entry point glPointParameteri
GL_VERSION_1_4 was not found, but has the entry point glPointParameteriv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3b
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3bv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3d
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3dv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3f
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3fv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3i
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3iv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3s
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3sv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3ub
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3ubv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3ui
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3uiv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3us
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColor3usv
GL_VERSION_1_4 was not found, but has the entry point glSecondaryColorPointer
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2d
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2dv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2f
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2fv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2i
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2iv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2s
GL_VERSION_1_4 was not found, but has the entry point glWindowPos2sv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3d
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3dv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3f
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3fv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3i
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3iv
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3s
GL_VERSION_1_4 was not found, but has the entry point glWindowPos3sv
GL_VERSION_1_5 was not found, but has the entry point glBeginQuery
GL_VERSION_1_5 was not found, but has the entry point glBindBuffer
GL_VERSION_1_5 was not found, but has the entry point glBufferData
GL_VERSION_1_5 was not found, but has the entry point glBufferSubData
GL_VERSION_1_5 was not found, but has the entry point glDeleteBuffers
GL_VERSION_1_5 was not found, but has the entry point glDeleteQueries
GL_VERSION_1_5 was not found, but has the entry point glEndQuery
GL_VERSION_1_5 was not found, but has the entry point glGenBuffers
GL_VERSION_1_5 was not found, but has the entry point glGenQueries
GL_VERSION_1_5 was not found, but has the entry point glGetBufferParameteriv
GL_VERSION_1_5 was not found, but has the entry point glGetBufferPointerv
GL_VERSION_1_5 was not found, but has the entry point glGetBufferSubData
GL_VERSION_1_5 was not found, but has the entry point glGetQueryObjectiv
GL_VERSION_1_5 was not found, but has the entry point glGetQueryObjectuiv
GL_VERSION_1_5 was not found, but has the entry point glGetQueryiv
GL_VERSION_1_5 was not found, but has the entry point glIsBuffer
GL_VERSION_1_5 was not found, but has the entry point glIsQuery
GL_VERSION_1_5 was not found, but has the entry point glMapBuffer
GL_VERSION_1_5 was not found, but has the entry point glUnmapBuffer
GL_VERSION_2_0 was not found, but has the entry point glAttachShader
GL_VERSION_2_0 was not found, but has the entry point glBindAttribLocation
GL_VERSION_2_0 was not found, but has the entry point glBlendEquationSeparate
GL_VERSION_2_0 was not found, but has the entry point glCompileShader
GL_VERSION_2_0 was not found, but has the entry point glCreateProgram
GL_VERSION_2_0 was not found, but has the entry point glCreateShader
GL_VERSION_2_0 was not found, but has the entry point glDeleteProgram
GL_VERSION_2_0 was not found, but has the entry point glDeleteShader
GL_VERSION_2_0 was not found, but has the entry point glDetachShader
GL_VERSION_2_0 was not found, but has the entry point glDisableVertexAttribArray
GL_VERSION_2_0 was not found, but has the entry point glDrawBuffers
GL_VERSION_2_0 was not found, but has the entry point glEnableVertexAttribArray
GL_VERSION_2_0 was not found, but has the entry point glGetActiveAttrib
GL_VERSION_2_0 was not found, but has the entry point glGetActiveUniform
GL_VERSION_2_0 was not found, but has the entry point glGetAttachedShaders
GL_VERSION_2_0 was not found, but has the entry point glGetAttribLocation
GL_VERSION_2_0 was not found, but has the entry point glGetProgramInfoLog
GL_VERSION_2_0 was not found, but has the entry point glGetProgramiv
GL_VERSION_2_0 was not found, but has the entry point glGetShaderInfoLog
GL_VERSION_2_0 was not found, but has the entry point glGetShaderSource
GL_VERSION_2_0 was not found, but has the entry point glGetShaderiv
GL_VERSION_2_0 was not found, but has the entry point glGetUniformLocation
GL_VERSION_2_0 was not found, but has the entry point glGetUniformfv
GL_VERSION_2_0 was not found, but has the entry point glGetUniformiv
GL_VERSION_2_0 was not found, but has the entry point glGetVertexAttribPointerv
GL_VERSION_2_0 was not found, but has the entry point glGetVertexAttribdv
GL_VERSION_2_0 was not found, but has the entry point glGetVertexAttribfv
GL_VERSION_2_0 was not found, but has the entry point glGetVertexAttribiv
GL_VERSION_2_0 was not found, but has the entry point glIsProgram
GL_VERSION_2_0 was not found, but has the entry point glIsShader
GL_VERSION_2_0 was not found, but has the entry point glLinkProgram
GL_VERSION_2_0 was not found, but has the entry point glShaderSource
GL_VERSION_2_0 was not found, but has the entry point glStencilFuncSeparate
GL_VERSION_2_0 was not found, but has the entry point glStencilMaskSeparate
GL_VERSION_2_0 was not found, but has the entry point glStencilOpSeparate
GL_VERSION_2_0 was not found, but has the entry point glUniform1f
GL_VERSION_2_0 was not found, but has the entry point glUniform1fv
GL_VERSION_2_0 was not found, but has the entry point glUniform1i
GL_VERSION_2_0 was not found, but has the entry point glUniform1iv
GL_VERSION_2_0 was not found, but has the entry point glUniform2f
GL_VERSION_2_0 was not found, but has the entry point glUniform2fv
GL_VERSION_2_0 was not found, but has the entry point glUniform2i
GL_VERSION_2_0 was not found, but has the entry point glUniform2iv
GL_VERSION_2_0 was not found, but has the entry point glUniform3f
GL_VERSION_2_0 was not found, but has the entry point glUniform3fv
GL_VERSION_2_0 was not found, but has the entry point glUniform3i
GL_VERSION_2_0 was not found, but has the entry point glUniform3iv
GL_VERSION_2_0 was not found, but has the entry point glUniform4f
GL_VERSION_2_0 was not found, but has the entry point glUniform4fv
GL_VERSION_2_0 was not found, but has the entry point glUniform4i
GL_VERSION_2_0 was not found, but has the entry point glUniform4iv
GL_VERSION_2_0 was not found, but has the entry point glUniformMatrix2fv
GL_VERSION_2_0 was not found, but has the entry point glUniformMatrix3fv
GL_VERSION_2_0 was not found, but has the entry point glUniformMatrix4fv
GL_VERSION_2_0 was not found, but has the entry point glUseProgram
GL_VERSION_2_0 was not found, but has the entry point glValidateProgram
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1d
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1dv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1f
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1fv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1s
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib1sv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2d
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2dv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2f
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2fv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2s
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib2sv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3d
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3dv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3f
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3fv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3s
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib3sv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nbv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Niv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nsv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nub
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nubv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nuiv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4Nusv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4bv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4d
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4dv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4f
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4fv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4iv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4s
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4sv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4ubv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4uiv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttrib4usv
GL_VERSION_2_0 was not found, but has the entry point glVertexAttribPointer
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix2x3fv
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix2x4fv
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix3x2fv
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix3x4fv
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix4x2fv
GL_VERSION_2_1 was not found, but has the entry point glUniformMatrix4x3fv
GL_VERSION_3_0 was not found, but has the entry point glBeginConditionalRender
GL_VERSION_3_0 was not found, but has the entry point glBeginTransformFeedback
GL_VERSION_3_0 was not found, but has the entry point glBindFragDataLocation
GL_VERSION_3_0 was not found, but has the entry point glClampColor
GL_VERSION_3_0 was not found, but has the entry point glClearBufferfi
GL_VERSION_3_0 was not found, but has the entry point glClearBufferfv
GL_VERSION_3_0 was not found, but has the entry point glClearBufferiv
GL_VERSION_3_0 was not found, but has the entry point glClearBufferuiv
GL_VERSION_3_0 was not found, but has the entry point glColorMaski
GL_VERSION_3_0 was not found, but has the entry point glDisablei
GL_VERSION_3_0 was not found, but has the entry point glEnablei
GL_VERSION_3_0 was not found, but has the entry point glEndConditionalRender
GL_VERSION_3_0 was not found, but has the entry point glEndTransformFeedback
GL_VERSION_3_0 was not found, but has the entry point glGetBooleani_v
GL_VERSION_3_0 was not found, but has the entry point glGetFragDataLocation
GL_VERSION_3_0 was not found, but has the entry point glGetStringi
GL_VERSION_3_0 was not found, but has the entry point glGetTexParameterIiv
GL_VERSION_3_0 was not found, but has the entry point glGetTexParameterIuiv
GL_VERSION_3_0 was not found, but has the entry point glGetTransformFeedbackVarying
GL_VERSION_3_0 was not found, but has the entry point glGetUniformuiv
GL_VERSION_3_0 was not found, but has the entry point glGetVertexAttribIiv
GL_VERSION_3_0 was not found, but has the entry point glGetVertexAttribIuiv
GL_VERSION_3_0 was not found, but has the entry point glIsEnabledi
GL_VERSION_3_0 was not found, but has the entry point glTexParameterIiv
GL_VERSION_3_0 was not found, but has the entry point glTexParameterIuiv
GL_VERSION_3_0 was not found, but has the entry point glTransformFeedbackVaryings
GL_VERSION_3_0 was not found, but has the entry point glUniform1ui
GL_VERSION_3_0 was not found, but has the entry point glUniform1uiv
GL_VERSION_3_0 was not found, but has the entry point glUniform2ui
GL_VERSION_3_0 was not found, but has the entry point glUniform2uiv
GL_VERSION_3_0 was not found, but has the entry point glUniform3ui
GL_VERSION_3_0 was not found, but has the entry point glUniform3uiv
GL_VERSION_3_0 was not found, but has the entry point glUniform4ui
GL_VERSION_3_0 was not found, but has the entry point glUniform4uiv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI1i
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI1iv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI1ui
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI1uiv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI2i
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI2iv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI2ui
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI2uiv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI3i
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI3iv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI3ui
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI3uiv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4bv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4i
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4iv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4sv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4ubv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4ui
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4uiv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribI4usv
GL_VERSION_3_0 was not found, but has the entry point glVertexAttribIPointer
GL_VERSION_3_1 was not found, but has the entry point glDrawArraysInstanced
GL_VERSION_3_1 was not found, but has the entry point glDrawElementsInstanced
GL_VERSION_3_1 was not found, but has the entry point glPrimitiveRestartIndex
GL_VERSION_3_1 was not found, but has the entry point glTexBuffer
GL_VERSION_3_2 was not found, but has the entry point glFramebufferTexture
GL_VERSION_3_2 was not found, but has the entry point glGetBufferParameteri64v
GL_VERSION_3_2 was not found, but has the entry point glGetInteger64i_v
GL_VERSION_3_3 was not found, but has the entry point glVertexAttribDivisor
GL_VERSION_4_0 was not found, but has the entry point glBlendEquationSeparatei
GL_VERSION_4_0 was not found, but has the entry point glBlendEquationi
GL_VERSION_4_0 was not found, but has the entry point glBlendFuncSeparatei
GL_VERSION_4_0 was not found, but has the entry point glBlendFunci
GL_VERSION_4_0 was not found, but has the entry point glMinSampleShading

the 390 actually has full OpenGL 4.5 support but the card only reports 4.4 because of a string error (found info when looking at some comments at AMD forums).

@revelator
Copy link
Author

Enabled some more debugging and ??? wtf
GL_VENDOR: ATI Technologies Inc.
GL_RENDERER: AMD Radeon (TM) R9 390 Series
GL_VERSION: 3.3.13492 Core Profile/Debug Context 22.19.677.257
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_UNITS_ARB: 0
GL_MAX_TEXTURE_COORDS_ARB: 0
GL_MAX_TEXTURE_IMAGE_UNITS_ARB: 32

It reports multitexturing as broken with 0 texture units, hmm something is fubar here, i use glew myself in my revelation engine and it reports 4 texture units and runs fine, sadly my engine uses the old ARB2 shaders still.

@revelator
Copy link
Author

revelator commented Oct 10, 2017

Ok, some more info.

The WMI code for getting videoram does not work on win 10 because it requires the executable to be signed, atm it returns -1mb. Could possibly use direct3d or even dxdiag to get the same result though it kinda stinks to have D3D code in an opengl engine.

P.s Olliver mc fadden (diseased) had a project going porting Doom3 to GLSL, and he had the missing GLSL shaders for ROE like the Bloodorb. Maybe you can use these ?.

And i tried out the engine on my HTPC which has an older Nvidia 560 gtx and it works rather well there except for ROE which shows some graphics glitches due to the missing shaders i presume.

@eXistence
Copy link
Owner

you could try to disable core profile:

fhDOOM.exe +set r_glCoreProfile 0

This should fix at least the reported multitexturing.

I am aware of the video ram issue. I already tinkered with some alternatives, but haven't put much effort into it. The video ram is only used to automatically select reasonable quality settings. On modern hardware (everything released within the last 6 years) it's not that important anymore.

@revelator
Copy link
Author

Aye could do away with it completely.
Ill try a run with coreprofile off :).

And blimey... now it works ? im at a loss.

@revelator
Copy link
Author

I made a piece of code to check for compatibilty profile

` // core or compatibility profile
glConfig.compatibility = R_DoubleCheckExtension("GL_ARB_compatibility");

	if (glConfig.compatibility) {
		common->Printf("GL_ARB_compatibility: core profile not availiable!\n");
		r_glCoreProfile.SetBool( false );
	} 
	else {
		common->Printf("GL_ARB_compatibility: core profile availiable!\n");
		r_glCoreProfile.SetBool( true );
	}`

This atleast works for my card.

@revelator
Copy link
Author

Hmm after searching a bit i stumbled upon this.

https://www.opengl.org/discussion_boards/showthread.php/186183-Unable-to-create-core-profile

Seems glew does not handle core profile correctly atm.

@revelator
Copy link
Author

Ok played a bit and hydrocon map hangs after you enter the room with the videodesk and the pda when the screen turns red and monsters spawn. Ill see if i can debug it somehow. If interrested i do have a piece of code for VBO made by MH some time back that uses ARBMapBufferRange instead of just copying the VBO. It does net a bit of a speedup compared to the old version.

Else it looks pretty purty :) and i like that you batched up the render calls, MH would certainly approve.
Im not good with shaders but any other code i might be able to throw a hand in with.

@revelator
Copy link
Author

Ok after some tinkering about i can say that my card runs core profile in compatibility context for sure.
That's rather annoying since the card has 100% support for core profile but AMD seems to not care much for this card anymore.

I can force it on by initializing WGL_ARB_create_context in win_glimp.cpp and then it works, but its not optimal.

@revelator
Copy link
Author

revelator commented Oct 14, 2017

Ok i have fixed it, this also takes care of the invalid enum glGetError() reported.


void R_CheckPortableExtensions( void ) {
		glConfig.glVersion = atof( glConfig.version_string );

		// core or compatibility profile. need to use this cause it breaks on some AMD cards.
		glConfig.compatibility = (R_DoubleCheckExtension( "GL_ARB_compatibility" ));
		if (glConfig.compatibility) {
			common->Printf("GL_ARB_compatibility: core profile not fully supported\n" 
						   "running in compatibility context!\n");
			r_glCoreProfile.SetBool(R_DoubleCheckExtension( "GL_ARB_create_context" ));
		} 
		else {
			common->Printf("GL_ARB_compatibility: core profile fully supported\n" 
						   "not running in compatibility context!\n");
			r_glCoreProfile.SetBool(R_DoubleCheckExtension( "GL_ARB_create_context" ));
		}

		// GL_ARB_multitexture
		if (R_DoubleCheckExtension("GL_ARB_multitexture") || glConfig.glVersion >= 1.3) {
			glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint *)&glConfig.maxTextureUnits);
			if (glConfig.maxTextureUnits > MAX_MULTITEXTURE_UNITS) {
				glConfig.maxTextureUnits = MAX_MULTITEXTURE_UNITS;
			}
			glGetIntegerv(GL_MAX_TEXTURE_COORDS_ARB, (GLint *)&glConfig.maxTextureCoords);
			glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, (GLint *)&glConfig.maxTextureImageUnits);
		}
		else {
			common->Printf("GL_ARB_multitexture: not availiable!\n");
		}
		
		// GL_ARB_texture_compression + GL_S3_s3tc
		// DRI drivers may have GL_ARB_texture_compression but no GL_EXT_texture_compression_s3tc
		bool arb_texture_compression = R_DoubleCheckExtension( "GL_ARB_texture_compression" );
		bool ext_texture_compression_s3tc = R_DoubleCheckExtension( "GL_EXT_texture_compression_s3tc" ); //should be available!
		glConfig.textureCompressionAvailable = arb_texture_compression && ext_texture_compression_s3tc;

		// GL_EXT_texture_filter_anisotropic
		glConfig.anisotropicAvailable = R_DoubleCheckExtension( "GL_EXT_texture_filter_anisotropic" );  //should be available!
		if (glConfig.anisotropicAvailable) {
			glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxTextureAnisotropy );
			common->Printf( "   maxTextureAnisotropy: %f\n", glConfig.maxTextureAnisotropy );
		}
		else {
			glConfig.maxTextureAnisotropy = 1;
		}

		// GL_EXT_depth_bounds_test
		glConfig.depthBoundsTestAvailable = R_DoubleCheckExtension( "GL_EXT_depth_bounds_test" );

		glConfig.extDirectStateAccessAvailable = R_DoubleCheckExtension( "GL_EXT_direct_state_access" );
		glConfig.arbDirectStateAccessAvailable = R_DoubleCheckExtension( "GL_ARB_direct_state_access" );

		// ARB_mapbuffer_range
		glConfig.arbMapBufferRangeAvailable = R_DoubleCheckExtension("GL_ARB_map_buffer_range");
	}

and in win_glimp.cpp just before this codepiece

if(parms.coreProfile) {
	int flags = WGL_CONTEXT_CORE_PROFILE_BIT_ARB;
	if (parms.debug) {
		flags |= WGL_CONTEXT_DEBUG_BIT_ARB;
	}

add


  // hrmf why the fuck do i need to also initialize this here ?!?
  r_glCoreProfile.SetBool(wglewIsSupported( "WGL_ARB_create_context" ) == GL_TRUE);

It sucks i agree but it is the only thing that works for this card.
It does not break my nvidia card so i would assume its safe.

EDIT: based on wrong assumption, disregard the above, also it seems its fixed now.

Im also posting the optimized VBO code from MH below, up to you if you want to use it :) but it works like a charm.


/*
===========================================================================

Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.

This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).

Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.

In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.

If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.

===========================================================================
*/

#include "../idlib/precompiled.h"
#pragma hdrstop

#include "tr_local.h"


static const int	FRAME_MEMORY_BYTES = 0x200000;
static const int	EXPAND_HEADERS = 1024;

// in case r_useArbBufferRange fails (happens on some AMD cards) turn it off.
idCVar idVertexCache::r_showVertexCache("r_showVertexCache", "0", CVAR_INTEGER | CVAR_RENDERER, "show vertex cache");
idCVar idVertexCache::r_useArbBufferRange("r_useArbBufferRange", "1", CVAR_BOOL | CVAR_RENDERER, "use ARB_map_buffer_range for optimization");
idCVar idVertexCache::r_reuseVertexCacheSooner("r_reuseVertexCacheSooner", "1", CVAR_BOOL | CVAR_RENDERER, "reuse vertex buffers as soon as possible after freeing");

idVertexCache		vertexCache;

/*
==============
R_ListVertexCache_f
==============
*/
static void R_ListVertexCache_f( const idCmdArgs &args ) {
	vertexCache.List();
}

/*
==============
idVertexCache::ActuallyFree
==============
*/
void idVertexCache::ActuallyFree(vertCache_t *block) {
	if (!block) {
		common->Error("idVertexCache Free: null pointer");
	}
	// temp blocks are in a shared space that won't be freed
	if (block->tag != TAG_TEMP) {
		staticAllocTotal -= block->size;
		staticCountTotal--;
	}
	block->tag = TAG_FREE;     // mark as free

    // unlink stick it back on the free list
	block->next->prev = block->prev;
	block->prev->next = block->next;

	if (r_reuseVertexCacheSooner.GetBool()) {
		// stick it on the front of the free list so it will be reused immediately
		block->next = freeStaticHeaders.next;
		block->prev = &freeStaticHeaders;
	}
	else {
		// stick it on the back of the free list so it won't be reused soon (just for debugging)
		block->next = &freeStaticHeaders;
		block->prev = freeStaticHeaders.prev;
	}
	block->next->prev = block;
	block->prev->next = block;
}

/*
==============
idVertexCache::OffSet

it will be an int offset cast to a pointer with
ARB_vertex_buffer_object

The ARB_vertex_buffer_object will be bound
==============
*/
int idVertexCache::OffSet(const vertCache_t *buffer) {
	if (!buffer || buffer->tag == TAG_FREE) {
		common->FatalError("idVertexCache::Position: bad vertCache_t");
	}
	
	if (r_showVertexCache.GetInteger() == 2) {
		if (buffer->tag == TAG_TEMP) {
			common->Printf("GL_ARRAY_BUFFER_ARB = %i + %i (%i bytes)\n", buffer->vbo, buffer->offset, buffer->size);
		}
		else {
			common->Printf("GL_ARRAY_BUFFER_ARB = %i (%i bytes)\n", buffer->vbo, buffer->size);
		}
	}
	GLenum target = (buffer->indexBuffer ? GL_ELEMENT_ARRAY_BUFFER_ARB : GL_ARRAY_BUFFER_ARB);
	BindIndex(target, buffer->vbo);
	return buffer->offset;

}

/*
==============
idVertexCache::Position

this will be a real pointer with virtual memory,
but it will be an int offset cast to a pointer with
ARB_vertex_buffer_object

The ARB_vertex_buffer_object will be bound
==============
*/
const void *idVertexCache::Position(const vertCache_t *buffer) {
	if (!buffer || buffer->tag == TAG_FREE) {
		common->FatalError("idVertexCache::Position: bad vertCache_t");
	}

	// the ARB vertex object just uses an offset
	if (r_showVertexCache.GetInteger() == 2) {
		if (buffer->tag == TAG_TEMP) {
			common->Printf("GL_ARRAY_BUFFER_ARB = %i + %i (%i bytes)\n", buffer->vbo, buffer->offset, buffer->size);
		}
		else {
			common->Printf("GL_ARRAY_BUFFER_ARB = %i (%i bytes)\n", buffer->vbo, buffer->size);
		}
	}
	GLenum target = (buffer->indexBuffer ? GL_ELEMENT_ARRAY_BUFFER_ARB : GL_ARRAY_BUFFER_ARB);
	BindIndex(target, buffer->vbo);
	return reinterpret_cast<const void *>(buffer->offset);
}

/*
===========
idVertexCache::BindIndex

Makes sure it only allocates the right buffers once.
===========
*/
void idVertexCache::BindIndex(GLenum target, GLuint vbo) {
	switch (target) {
	case GL_ARRAY_BUFFER_ARB:
		if (vertexBuffer != vbo) {
			// this happens more often than you might think :(
			glBindBufferARB(target, vbo);
			vertexBuffer = vbo;
			return;
		}
		break;
	case GL_ELEMENT_ARRAY_BUFFER_ARB:
		if (indexBuffer != vbo) {
			// this happens more often than you might think :(
			glBindBufferARB(target, vbo);
			indexBuffer = vbo;
			return;
		}
		break;
	default:
		common->FatalError("BindIndex : unknown buffer target : %i\n", static_cast<int>(target));
		break;
	}
}

/*
===========
idVertexCache::UnbindIndex

Makes sure it only deallocates the right buffers once.
===========
*/
void idVertexCache::UnbindIndex(GLenum target) {
	switch (target) {
	case GL_ARRAY_BUFFER_ARB:
		if (vertexBuffer != GL_ZERO) {
			// this happens more often than you might think :(
			glBindBufferARB(target, GL_ZERO);
			vertexBuffer = GL_ZERO;
			return;
		}
		break;
	case GL_ELEMENT_ARRAY_BUFFER_ARB:
		if (indexBuffer != GL_ZERO) {
			// this happens more often than you might think :(
			glBindBufferARB(target, GL_ZERO);
			indexBuffer = GL_ZERO;
			return;
		}
		break;
	default:
		common->FatalError("UnbindIndex : unknown buffer target : %i\n", static_cast<int>(target));
		break;
	}
}

//================================================================================

/*
===========
idVertexCache::Init
===========
*/
void idVertexCache::Init() {
	cmdSystem->AddCommand("ListVBOMem", R_ListVertexCache_f, CMD_FL_RENDERER, "lists Objects Allocated in Vertex Cache");

	// not initialized yet
	vertexBuffer = GL_ZERO;
	indexBuffer = GL_ZERO;

	// initialize the cache memory blocks
	freeStaticHeaders.next = freeStaticHeaders.prev = &freeStaticHeaders;
	staticHeaders.next = staticHeaders.prev = &staticHeaders;
	freeDynamicHeaders.next = freeDynamicHeaders.prev = &freeDynamicHeaders;
	dynamicHeaders.next = dynamicHeaders.prev = &dynamicHeaders;
	deferredFreeList.next = deferredFreeList.prev = &deferredFreeList;

	// set up the dynamic frame memory
	frameBytes = FRAME_MEMORY_BYTES;
	staticAllocTotal = 0;

	// allocate a dummy buffer
	byte *frameBuffer = new byte[frameBytes];
	for (int i = 0; i < NUM_VERTEX_FRAMES; i++) {
		// force the alloc to use GL_STREAM_DRAW_ARB
		allocatingTempBuffer = true;
		Alloc(frameBuffer, frameBytes, &tempBuffers[i]);
		allocatingTempBuffer = false;
		tempBuffers[i]->tag = TAG_FIXED;

		// unlink these from the static list, so they won't ever get purged
		tempBuffers[i]->next->prev = tempBuffers[i]->prev;
		tempBuffers[i]->prev->next = tempBuffers[i]->next;
	}

	// use C++ allocators
	delete[] frameBuffer;
	frameBuffer = nullptr;
	EndFrame();
}

/*
===========
idVertexCache::PurgeAll

Used when toggling vertex programs on or off, because
the cached data isn't valid
===========
*/
void idVertexCache::PurgeAll() {
	while( staticHeaders.next != &staticHeaders ) {
		ActuallyFree( staticHeaders.next );
	}
}

/*
===========
idVertexCache::Shutdown
===========
*/
void idVertexCache::Shutdown() {
	headerAllocator.Shutdown();
}

/*
===========
idVertexCache::Alloc
===========
*/
void idVertexCache::Alloc(void *data, int size, vertCache_t **buffer, bool doIndex) {
	vertCache_t *block;

	if (size <= 0) {
		common->Error("idVertexCache::Alloc: size = %i\n", size);
	}

	// if we can't find anything, it will be NULL
	*buffer = nullptr;

	// if we don't have any remaining unused headers, allocate some more
	if (freeStaticHeaders.next == &freeStaticHeaders) {
		for (int i = 0; i < EXPAND_HEADERS; i++) {
			block = headerAllocator.Alloc();
			block->next = freeStaticHeaders.next;
			block->prev = &freeStaticHeaders;
			block->next->prev = block;
			block->prev->next = block;

			glGenBuffersARB(1, &block->vbo);
		}
	}
	GLenum target = (doIndex ? GL_ELEMENT_ARRAY_BUFFER_ARB : GL_ARRAY_BUFFER_ARB);
	GLenum usage = (allocatingTempBuffer ? GL_STREAM_DRAW : GL_STATIC_DRAW);

	// try to find a matching block to replace so that we're not continually respecifying vbo data each frame
	for (vertCache_t *findblock = freeStaticHeaders.next; /**/; findblock = findblock->next) {
		if (findblock == &freeStaticHeaders) {
			block = freeStaticHeaders.next;
			break;
		}

		if (findblock->target != target) {
			continue;
		}

		if (findblock->usage != usage) {
			continue;
		}

		if (findblock->size != size) {
			continue;
		}
		block = findblock;
		break;
	}

	// move it from the freeStaticHeaders list to the staticHeaders list
	block->next->prev = block->prev;
	block->prev->next = block->next;

	block->next = staticHeaders.next;
	block->prev = &staticHeaders;

	block->next->prev = block;
	block->prev->next = block;

	block->size = size;
	block->offset = GL_ZERO;
	block->tag = TAG_USED;

	// save data for debugging
	staticAllocThisFrame += block->size;
	staticCountThisFrame++;
	staticCountTotal++;
	staticAllocTotal += block->size;

	// done put it in the buffer
	*buffer = block;

	// allocation doesn't imply used-for-drawing, because at level
	// load time lots of things may be created, but they aren't
	// referenced by the GPU yet, and can be purged if needed.
	block->frameUsed = currentFrame - NUM_VERTEX_FRAMES;
	block->indexBuffer = doIndex;

	// copy the data
	block->target = target;
	block->usage = usage;

	// orphan the buffer in case it needs respecifying (it usually will)
	BindIndex(target, block->vbo);
	glBufferDataARB(target, static_cast<GLsizeiptr>(size), nullptr, usage);
	glBufferDataARB(target, static_cast<GLsizeiptr>(size), data, usage);
}

/*
===========
idVertexCache::Touch
===========
*/
void idVertexCache::Touch( vertCache_t *block ) {
	if ( !block ) {
		common->Error( "idVertexCache Touch: NULL pointer" );
	}

	if ( block->tag == TAG_FREE ) {
		common->FatalError( "idVertexCache Touch: freed pointer" );
	}

	if ( block->tag == TAG_TEMP ) {
		common->FatalError( "idVertexCache Touch: temporary pointer" );
	}
	block->frameUsed = currentFrame;

	// move to the head of the LRU list
	block->next->prev = block->prev;
	block->prev->next = block->next;

	block->next = staticHeaders.next;
	block->prev = &staticHeaders;

	staticHeaders.next->prev = block;
	staticHeaders.next = block;
}

/*
===========
idVertexCache::Free
===========
*/
void idVertexCache::Free( vertCache_t *block ) {
	if (!block) {
		return;
	}

	if ( block->tag == TAG_FREE ) {
		common->FatalError( "idVertexCache Free: freed pointer" );
	}
	if ( block->tag == TAG_TEMP ) {
		common->FatalError( "idVertexCache Free: temporary pointer" );
	}
	block->next->prev = block->prev;
	block->prev->next = block->next;

	block->next = deferredFreeList.next;
	block->prev = &deferredFreeList;

	deferredFreeList.next->prev = block;
	deferredFreeList.next = block;
}

/*
===========
idVertexCache::AllocFrameTemp

A frame temp allocation must never be allowed to fail due to overflow.
We can't simply sync with the GPU and overwrite what we have, because
there may still be future references to dynamically created surfaces.
===========
*/
vertCache_t *idVertexCache::AllocFrameTemp(void *data, int size) {
	vertCache_t *block;

	if (size <= 0) {
		common->Error("idVertexCache::AllocFrameTemp: size = %i\n", size);
	}

	if (dynamicAllocThisFrame + size > frameBytes) {
		// if we don't have enough room in the temp block, allocate a static block,
		// but immediately free it so it will get freed at the next frame
		tempOverflow = true;
		Alloc(data, size, &block);
		Free(block);
		return block;
	}

	// this data is just going on the shared dynamic list
	// if we don't have any remaining unused headers, allocate some more
	if (freeDynamicHeaders.next == &freeDynamicHeaders) {
		for (int i = 0; i < EXPAND_HEADERS; i++) {
			block = headerAllocator.Alloc();
			block->next = freeDynamicHeaders.next;
			block->prev = &freeDynamicHeaders;
			block->next->prev = block;
			block->prev->next = block;
		}
	}

	// move it from the freeDynamicHeaders list to the dynamicHeaders list
	block = freeDynamicHeaders.next;
	block->next->prev = block->prev;
	block->prev->next = block->next;
	block->next = dynamicHeaders.next;
	block->prev = &dynamicHeaders;
	block->next->prev = block;
	block->prev->next = block;
	block->size = size;
	block->tag = TAG_TEMP;
	block->indexBuffer = false;
	block->offset = dynamicAllocThisFrame;
	dynamicAllocThisFrame += block->size;
	dynamicCountThisFrame++;
	block->frameUsed = GL_ZERO;

	// copy the data
	block->vbo = tempBuffers[listNum]->vbo;

	// asserts can be usefull but lets not overdo it :)
	BindIndex(GL_ARRAY_BUFFER_ARB, block->vbo);

	if (glConfig.arbMapBufferRangeAvailable && r_useArbBufferRange.GetBool()) {
		GLbitfield	access = (GL_MAP_WRITE_BIT | ((block->offset == 0) ? GL_MAP_INVALIDATE_BUFFER_BIT : GL_MAP_UNSYNCHRONIZED_BIT));
		GLvoid      *ptr = glMapBufferRange(GL_ARRAY_BUFFER_ARB, static_cast<GLintptr>(block->offset), static_cast<GLsizeiptr>(size), access);

		// try to get an unsynchronized map if at all possible
		if (ptr) {
			// if the buffer has wrapped then we orphan it
			SIMDProcessor->Memcpy(reinterpret_cast<byte *>(ptr), data, size);
			glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
		}
		else {
			// glMapBufferRange failed argh.
			glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, static_cast<GLintptrARB>(block->offset), static_cast<GLsizeiptr>(size), data);
		}
	}
	else {
		// just upload the whole shebang.
		glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, static_cast<GLintptrARB>(block->offset), static_cast<GLsizeiptr>(size), data);
	}
	return block;
}

/*
===========
idVertexCache::EndFrame
===========
*/
void idVertexCache::EndFrame() {
	// display debug information
	if ( r_showVertexCache.GetBool() ) {
		int	staticUseCount = 0;
		int staticUseSize = 0;

		for ( vertCache_t *block = staticHeaders.next ; block != &staticHeaders ; block = block->next ) {
			if ( block->frameUsed == currentFrame ) {
				staticUseCount++;
				staticUseSize += block->size;
			}
		}
		const char *frameOverflow = tempOverflow ? "(OVERFLOW)" : "";

		common->Printf( "vertex dynamic:%i=%ik%s, static alloc:%i=%ik used:%i=%ik total:%i=%ik\n",
			dynamicCountThisFrame, dynamicAllocThisFrame/1024, frameOverflow,
			staticCountThisFrame, staticAllocThisFrame/1024,
			staticUseCount, staticUseSize/1024,
			staticCountTotal, staticAllocTotal/1024 );
	}
	
	// unbind vertex buffers so normal virtual memory will be used in case
	// r_useVertexBuffers / r_useIndexBuffers
	UnbindIndex(GL_ARRAY_BUFFER_ARB);
	UnbindIndex(GL_ELEMENT_ARRAY_BUFFER_ARB);

	currentFrame = tr.frameCount;
	listNum = currentFrame % NUM_VERTEX_FRAMES;
	staticAllocThisFrame = 0;
	staticCountThisFrame = 0;
	dynamicAllocThisFrame = 0;
	dynamicCountThisFrame = 0;
	tempOverflow = false;

	// free all the deferred free headers
	while( deferredFreeList.next != &deferredFreeList ) {
		ActuallyFree( deferredFreeList.next );
	}

	// free all the frame temp headers
	vertCache_t	*block = dynamicHeaders.next;
	if ( block != &dynamicHeaders ) {
		block->prev = &freeDynamicHeaders;
		dynamicHeaders.prev->next = freeDynamicHeaders.next;
		freeDynamicHeaders.next->prev = dynamicHeaders.prev;
		freeDynamicHeaders.next = block;

		dynamicHeaders.next = dynamicHeaders.prev = &dynamicHeaders;
	}
}

/*
=============
idVertexCache::List
=============
*/
void idVertexCache::List( void ) {
	int	numActive = 0;
	int	numDeferred = 0;
	int frameStatic = 0;
	int	totalStatic = 0;
	int	deferredSpace = 0;

	vertCache_t *block;

	for ( block = staticHeaders.next ; block != &staticHeaders ; block = block->next) {
		numActive++;

		totalStatic += block->size;
		if ( block->frameUsed == currentFrame ) {
			frameStatic += block->size;
		}
	}
	int	numFreeStaticHeaders = 0;

	for ( block = freeStaticHeaders.next ; block != &freeStaticHeaders ; block = block->next ) {
		numFreeStaticHeaders++;
	}
	int	numFreeDynamicHeaders = 0;

	for ( block = freeDynamicHeaders.next ; block != &freeDynamicHeaders ; block = block->next ) {
		numFreeDynamicHeaders++;
	}
	common->Printf( "%i dynamic temp buffers of %ik\n", NUM_VERTEX_FRAMES, frameBytes / 1024 );
	common->Printf( "%5i active static headers\n", numActive );
	common->Printf( "%5i free static headers\n", numFreeStaticHeaders );
	common->Printf( "%5i free dynamic headers\n", numFreeDynamicHeaders );
	common->Printf( "Vertex cache is in ARB_vertex_buffer_object memory (FAST).\n");

	if ( r_useIndexBuffers.GetBool() ) {
		common->Printf( "Index buffers are accelerated.\n" );
	} else {
		common->Printf( "Index buffers are not used.\n" );
	}
}
`

`/*
===========================================================================

Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.

This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).

Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.

In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.

If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.

===========================================================================
*/

// vertex cache calls should only be made by the front end

const int NUM_VERTEX_FRAMES = 2;

typedef enum {
	TAG_FREE,
	TAG_USED,
	TAG_FIXED,		// for the temp buffers
	TAG_TEMP		// in frame temp area, not static area
} vertBlockTag_t;

typedef struct vertCache_s {
	GLuint				vbo;
	GLenum				target;				// determine if using element array or just array buffers
	GLenum				usage;				// determine if we are using stream ot static drawing
	bool				indexBuffer;		// holds indexes instead of vertexes

	int					offset;
	int					size;				// may be larger than the amount asked for, due to round up and minimum fragment sizes
	int					tag;				// a tag of 0 is a free block
	struct vertCache_s  *next, *prev;		// may be on the static list or one of the frame lists
	int					frameUsed;			// it can't be purged if near the current frame
} vertCache_t;

class idVertexCache {
public:
	void			Init();
	void			Shutdown();

	// called when vertex programs are enabled or disabled, because
	// the cached data is no longer valid
	void			PurgeAll();

	// Tries to allocate space for the given data in fast vertex
	// memory, and copies it over.
	// Alloc does NOT do a touch, which allows purging of things
	// created at level load time even if a frame hasn't passed yet.
	// These allocations can be purged, which will zero the pointer.
	void			Alloc(void *data, int bytes, vertCache_t **buffer, bool indexBuffer = false);

	// same as below but just returns the offset not the full pointer
	int				OffSet(const vertCache_t *buffer);

	// This will be a real pointer with virtual memory,
	// but it will be an int offset cast to a pointer of ARB_vertex_buffer_object
	const void		*Position(const vertCache_t *buffer);

	// initialize the element array buffers
	void			BindIndex(GLenum target, GLuint vbo);

	// if you need to draw something without an indexCache,
	// this must be called to reset GL_ELEMENT_ARRAY_BUFFER_ARB
	void			UnbindIndex(GLenum target);

	// automatically freed at the end of the next frame
	// used for specular texture coordinates and gui drawing, which
	// will change every frame.
	// will return NULL if the vertex cache is completely full
	// As with Position(), this may not actually be a pointer you can access.
	vertCache_t    *AllocFrameTemp(void *data, int bytes);

	// notes that a buffer is used this frame, so it can't be purged
	// out from under the GPU
	void			Touch(vertCache_t *buffer);

	// this block won't have to zero a buffer pointer when it is purged,
	// but it must still wait for the frames to pass, in case the GPU
	// is still referencing it
	void			Free(vertCache_t *buffer);

	// updates the counter for determining which temp space to use
	// and which blocks can be purged
	// Also prints debugging info when enabled
	void			EndFrame();

	// listVBOMem calls this
	void			List();

private:
	void			ActuallyFree(vertCache_t *block);

	static idCVar   r_showVertexCache;
	static idCVar   r_useArbBufferRange;
	static idCVar   r_reuseVertexCacheSooner;

	int				staticCountTotal;
	int				staticAllocTotal;		// for end of frame purging

	int				staticAllocThisFrame;   // debug counter
	int				staticCountThisFrame;
	int				dynamicAllocThisFrame;
	int				dynamicCountThisFrame;

	int				currentFrame;			// for purgable block tracking
	int				listNum;				// currentFrame % NUM_VERTEX_FRAMES, determines which tempBuffers to use

	bool			virtualMemory;			// not fast stuff

	bool			allocatingTempBuffer;   // force GL_STREAM_DRAW_ARB

	GLuint			vertexBuffer;
	GLuint			indexBuffer;

	vertCache_t     *tempBuffers[NUM_VERTEX_FRAMES];    // allocated at startup
	bool			tempOverflow;						// had to alloc a temp in static memory

	idBlockAlloc<vertCache_t, 1024> headerAllocator;

	vertCache_t     freeStaticHeaders;      // head of doubly linked list
	vertCache_t     freeDynamicHeaders;     // head of doubly linked list
	vertCache_t     dynamicHeaders;         // head of doubly linked list
	vertCache_t		deferredFreeList;		// head of doubly linked list
	vertCache_t     staticHeaders;			// head of doubly linked list in MRU order, staticHeaders.next is most recently used
	int				frameBytes;				// for each of NUM_VERTEX_FRAMES frames
};

extern	idVertexCache	vertexCache;

@eXistence
Copy link
Owner

eXistence commented Oct 17, 2017

Please don't post longer logs or code snippets like this, your post is an unreadable mess (i already cleaned up your previous posts).

  • wrap it in <detail> tags or
  • attach a file (better) or
  • make a pull request (only acceptable option for non-trivial code changes)

Please keep issues separated. How is that VBO stuff related to this? How is that hydrocon map hang related to this?

Now back to the actual issue:

There are bugs in current AMD drivers, but i am pretty sure creating a core profile context on a modern AMD card is totally fine. OpenGL 3.3 core context is nothing new and there is a ton of software that uses it. Its easy to blame the driver, but it is way more likely that there is a bug or something weird in fhDOOM that the driver is picky about.

I am not sure how your "fix" is supposed to work:

  • GL_MAX_TEXTURE_COORDS_ARB and GL_MAX_TEXTURE_IMAGE_UNITS_ARB can be ignored. Its deprecated fixed-function stuff and is not used or needed by fhDOOM.
  • Does 'wglewIsSupported( "WGL_ARB_create_context" )' return false on your system? That alone is weird and should be analyzed, since it should be supported (it's even on your list of supported extension you posted earlier).
  • Do you want to disable core profile this way? Even if you set r_glCoreProfile to false this way, 'parms.coreProfile' is still true!?
  • Where does that GL error (from one of your previous posts) came from? It seems you did not really analyzed or fixed that, you just covered it up by disabling(?) core profile.

There is a snapshot available that contains several changes and has a lot more error checking at startup and that might give a hint: http://facinghell.com/fhdoom/fhDOOM-1.5.3-snapshot-1415.zip
Please execute like before (fresh install, no modified cfg, fhDOOM.exe +set r_glDebugOutput 2 +condump foo.txt +quit) and post result (attach the file!).

Thx!

@revelator
Copy link
Author

Yeah it became a bit messy, sorry about that, i thought wrapping it in code tags would have worked like on other sites but seems i was wrong. WGL_ARB_create_context is not initialized by default on my card, i can get around the problem now by initializing it but it will not run unless i do so.
The enum error also seems related to the above as it dissapears if i initialize the extension.

The codepiece for bufferrange was not related to this error i just posted it because it might be of some interrest if you want some better optimization of VBO's (not as good as BFG's but better than what was).

GL_MAX_TEXTURE_COORDS_ARB hmm i was not aware multitexturing had been deprecated ? ok you learn something new every day.

@revelator
Copy link
Author

revelator commented Oct 24, 2017

Ok tried the snapshot, and it works ?!? log below.

fhDOOM 1.5.3 (snapshot).1415 win-x86 Oct 16 2017 19:10:07
3600 MHz Intel CPU with MMX & SSE & SSE2 & SSE3 & HTT
16320 MB System Memory
-1 MB Video Memory
Winsock Initialized
Found interface: {15A6AD8C-565B-4EED-96D6-2A2B420AD19B} Intel(R) 82579V Gigabi
t Network Connection - 0.0.0.0 NULL netmask - skipped
Found interface: {73F906AE-988B-4AEA-AC87-34A5C1150E54} Bluetooth Device (Pers
onal Area Network) - 0.0.0.0 NULL netmask - skipped
Found interface: {A4D69469-59E1-49E3-AD9F-A9D0E17FBF51} Windscribe VPN - 0.0.0
.0 NULL netmask - skipped
Found interface: {0CDCA841-7B75-4989-A2CB-D3155CE3E43E} TP-LINK Wireless USB A
dapter - 192.168.87.104/255.255.255.0
Found interface: {5232EF36-89C9-4E71-B703-C7A2D2AA703C} Microsoft Wi-Fi Direct
Virtual Adapter - 0.0.0.0 NULL netmask - skipped
Sys_InitNetworking: adding loopback interface
doom using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
------ Initializing File System ------
Loaded pk4 H:\fhdoom\base\pak000.pk4 with checksum 0x28d208f1
Loaded pk4 H:\fhdoom\base\pak001.pk4 with checksum 0x40244be0
Loaded pk4 H:\fhdoom\base\pak002.pk4 with checksum 0xc51ecdcd
Loaded pk4 H:\fhdoom\base\pak003.pk4 with checksum 0xcd79d028
Loaded pk4 H:\fhdoom\base\pak004.pk4 with checksum 0x765e4f8b
Loaded pk4 H:\fhdoom\base\pak005.pk4 with checksum 0x8ffc3621
Loaded pk4 H:\fhdoom\base\pak006.pk4 with checksum 0x95b65ab
Loaded pk4 H:\fhdoom\base\pak007.pk4 with checksum 0x666bdb3c
Loaded pk4 H:\fhdoom\base\pak008.pk4 with checksum 0x23ae5993
Loaded pk4 H:\fhdoom\base\pak100fhdoom.pk4 with checksum 0x1eaae864
Current search path:
H:\fhdoom/base
H:\fhdoom\base\pak100fhdoom.pk4 (84 files)
H:\fhdoom\base\pak008.pk4 (3 files)
H:\fhdoom\base\pak007.pk4 (38 files)
H:\fhdoom\base\pak006.pk4 (48 files)
H:\fhdoom\base\pak005.pk4 (63 files)
H:\fhdoom\base\pak004.pk4 (5137 files)
H:\fhdoom\base\pak003.pk4 (4676 files)
H:\fhdoom\base\pak002.pk4 (6120 files)
H:\fhdoom\base\pak001.pk4 (8972 files)
H:\fhdoom\base\pak000.pk4 (2698 files)
game DLL: 0x0 in pak: 0x0
Addon pk4s:
file system initialized.

----- Initializing Decls -----

------- Initializing renderSystem --------
renderSystem initialized.

5206 strings read from strings/english.lang
Couldn't open journal files
execing editor.cfg
execing default.cfg
execing DoomConfig.cfg
couldn't exec autoexec.cfg
5206 strings read from strings/english.lang
----- Initializing Sound System ------
sound system initialized.

----- R_InitOpenGL -----
found 1 displays:
0: \.\DISPLAY1 1680x1050 @ 0x1050
Initializing OpenGL subsystem
...registered window class
...registered fake window class
...created window @ 462,57 (1040x807)
Initializing OpenGL driver
...getting DC: succeeded
...PIXELFORMAT 11 selected
...creating GL legacy context: succeeded
...making legacy context current: succeeded
...initializing GL extensions (GLEW): succeeded
...creating GL core profile context: succeeded
...making core profile context current: succeeded
...deleting old GL legacy context...initializing GL extensions (GLEW): succeed
ed

------- Input Initialization -------
Initializing DirectInput...
mouse: DirectInput initialized.
keyboard: DirectInput initialized.

sound: STEREO
Check extension 'GL_ARB_texture_compression': OK
Check extension 'GL_EXT_texture_compression_s3tc': OK
Check extension 'GL_EXT_texture_filter_anisotropic': OK
maxTextureAnisotropy: 16.000000
Check extension 'GL_EXT_depth_bounds_test': OK
Check extension 'GL_EXT_direct_state_access': OK
Check extension 'GL_ARB_direct_state_access': OK

GL_VENDOR: ATI Technologies Inc.
GL_RENDERER: AMD Radeon (TM) R9 390 Series
GL_VERSION: 3.3.13491 Core Profile/Debug Context 22.19.662.4
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_IMAGE_UNITS_ARB: 32

PIXELFORMAT: color(32-bits) Z(24-bit) stencil(8-bits)
MODE: 5, 1024 x 768 windowed hz:CPU: Intel CPU with MMX & SSE & SSE2 & SSE3 &
HTT

glFinish not forced
swapInterval not forced
OpenGL: debug output enabled (sync)
OpenGL: core profile enabled, creating global vao
OpenGL: vertex cache initialized
load vertex shader glsl/fogLight.vp
load fragment shader glsl/fogLight.fp
load vertex shader glsl/blendLight.vp
load fragment shader glsl/blendLight.fp
load vertex shader glsl/shadow.vp
load fragment shader glsl/shadow.fp
load vertex shader glsl/depth.vp
load fragment shader glsl/depth.fp
load vertex shader glsl/shadowmap.vp
load fragment shader glsl/shadowmap.fp
load vertex shader glsl/default.vp
load fragment shader glsl/default.fp
load vertex shader glsl/depthblend.vp
load fragment shader glsl/depthblend.fp
load vertex shader glsl/skybox.vp
load fragment shader glsl/skybox.fp
load vertex shader glsl/bumpyenv.vp
load fragment shader glsl/bumpyenv.fp
load vertex shader glsl/interaction.vp
load fragment shader glsl/interaction.fp
load vertex shader glsl/vertexcolor.vp
load fragment shader glsl/vertexcolor.fp
load vertex shader glsl/flatcolor.vp
load fragment shader glsl/flatcolor.fp
load vertex shader glsl/intensity.vp
load fragment shader glsl/intensity.fp
load vertex shader glsl/debugdepth.vp
load fragment shader glsl/debugdepth.fp
load vertex shader glsl/postprocess.vp
load fragment shader glsl/postprocess.fp
load vertex shader glsl/default.vp
load fragment shader glsl/bloom.fp
load vertex shader glsl/default.vp
load fragment shader glsl/blur.fp
OpenGL: render programs initialized
OpenGL: immediate mode initialized
OpenGL: frame data initialized
DLL file name: fhGame-x86.dll
look for DLL next to executable: H:\fhdoom/fhGame-x86.dll
game using MMX & SSE & SSE2 & SSE3 for SIMD processing
enabled Flush-To-Zero mode
enabled Denormals-Are-Zero mode
--------- Initializing Game ----------
gamename: baseDOOM-1
gamedate: Oct 16 2017
Initializing event system
...473 event definitions
Initializing class hierarchy
...142 classes, 191092 bytes for event callbacks
Initializing scripts
Compiled 'monster_demon_archvile': 535.7 ms
---------- Compile stats ----------

Memory usage:
Strings: 79, 9648 bytes
Statements: 67875, 1357500 bytes
Functions: 2109, 250532 bytes
Variables: 147376 bytes
Mem used: 2476344 bytes
Static data: 2277552 bytes
Allocated: 3281600 bytes
Thread size: 7068 bytes

...6 aas types
game initialized.

-------- Initializing Session --------
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
session initialized

--- Common Initialization Complete ---
------------- Warnings ---------------
during fhDOOM initialization...
WARNING: idChoiceWindow::InitVars: gui 'guis/mainmenu.gui' window 'SNDBPrimary
' references undefined cvar 's_driver'
1 warnings
Dumped console text to foo.txt.

@revelator
Copy link
Author

Formatted my previous comment with fence tags, cannot for the life of me get it to accept wrapping in detail tags when using fences though. Also updated my fix since it turns out i been on the wrong track with this.

As i said im not to used to shaders since i came from the quake1/2 world when i started learning C++, so im quite a bit behind in regards to the newer extensions / capabilities.

Ill do a git pull with the VBO code in place so you can look it over.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants