mirror of
https://github.com/PabloMK7/citra.git
synced 2024-11-19 22:16:36 +00:00
video_core: Fix fragment shader interlock usage on OpenGL. (#7144)
This commit is contained in:
parent
13d02c14e0
commit
d4f31bc617
8 changed files with 69 additions and 14 deletions
6
externals/glad/Readme.md
vendored
6
externals/glad/Readme.md
vendored
|
@ -3,3 +3,9 @@ These files were generated by the [glad](https://github.com/Dav1dde/glad) OpenGL
|
||||||
```
|
```
|
||||||
python -m glad --profile core --out-path glad/ --api "gl=4.3,gles2=3.2" --generator=c
|
python -m glad --profile core --out-path glad/ --api "gl=4.3,gles2=3.2" --generator=c
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can also generate the source using [this site](https://glad.dav1d.de/):
|
||||||
|
1. Select '4.3' for GL, '3.2' for GLES2, and 'Core' for Profile.
|
||||||
|
2. Input the currently supported extensions from [here](https://github.com/citra-emu/citra/blob/master/externals/glad/include/glad/glad.h#L9), plus any new required extensions.
|
||||||
|
3. Click Generate and download the generated source zip.
|
||||||
|
4. Unzip the new source over the current glad source files.
|
27
externals/glad/include/glad/glad.h
vendored
27
externals/glad/include/glad/glad.h
vendored
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
OpenGL, OpenGL ES loader generated by glad 0.1.34 on Sat Aug 26 18:38:43 2023.
|
OpenGL, OpenGL ES loader generated by glad 0.1.36 on Fri Nov 10 04:24:01 2023.
|
||||||
|
|
||||||
Language/Generator: C/C++
|
Language/Generator: C/C++
|
||||||
Specification: gl
|
Specification: gl
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
GL_AMD_blend_minmax_factor,
|
GL_AMD_blend_minmax_factor,
|
||||||
GL_ARB_buffer_storage,
|
GL_ARB_buffer_storage,
|
||||||
GL_ARB_clear_texture,
|
GL_ARB_clear_texture,
|
||||||
|
GL_ARB_fragment_shader_interlock,
|
||||||
GL_ARB_get_texture_sub_image,
|
GL_ARB_get_texture_sub_image,
|
||||||
GL_ARB_texture_compression_bptc,
|
GL_ARB_texture_compression_bptc,
|
||||||
GL_ARM_shader_framebuffer_fetch,
|
GL_ARM_shader_framebuffer_fetch,
|
||||||
|
@ -17,16 +18,18 @@
|
||||||
GL_EXT_clip_cull_distance,
|
GL_EXT_clip_cull_distance,
|
||||||
GL_EXT_shader_framebuffer_fetch,
|
GL_EXT_shader_framebuffer_fetch,
|
||||||
GL_EXT_texture_compression_s3tc,
|
GL_EXT_texture_compression_s3tc,
|
||||||
GL_NV_blend_minmax_factor
|
GL_INTEL_fragment_shader_ordering,
|
||||||
|
GL_NV_blend_minmax_factor,
|
||||||
|
GL_NV_fragment_shader_interlock
|
||||||
Loader: True
|
Loader: True
|
||||||
Local files: False
|
Local files: False
|
||||||
Omit khrplatform: False
|
Omit khrplatform: False
|
||||||
Reproducible: False
|
Reproducible: False
|
||||||
|
|
||||||
Commandline:
|
Commandline:
|
||||||
--profile="core" --api="gl=4.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_AMD_blend_minmax_factor,GL_ARB_buffer_storage,GL_ARB_clear_texture,GL_ARB_get_texture_sub_image,GL_ARB_texture_compression_bptc,GL_ARM_shader_framebuffer_fetch,GL_EXT_buffer_storage,GL_EXT_clip_cull_distance,GL_EXT_shader_framebuffer_fetch,GL_EXT_texture_compression_s3tc,GL_NV_blend_minmax_factor"
|
--profile="core" --api="gl=4.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_AMD_blend_minmax_factor,GL_ARB_buffer_storage,GL_ARB_clear_texture,GL_ARB_fragment_shader_interlock,GL_ARB_get_texture_sub_image,GL_ARB_texture_compression_bptc,GL_ARM_shader_framebuffer_fetch,GL_EXT_buffer_storage,GL_EXT_clip_cull_distance,GL_EXT_shader_framebuffer_fetch,GL_EXT_texture_compression_s3tc,GL_INTEL_fragment_shader_ordering,GL_NV_blend_minmax_factor,GL_NV_fragment_shader_interlock"
|
||||||
Online:
|
Online:
|
||||||
https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.3&api=gles2%3D3.2&extensions=GL_AMD_blend_minmax_factor&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_clear_texture&extensions=GL_ARB_get_texture_sub_image&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARM_shader_framebuffer_fetch&extensions=GL_EXT_buffer_storage&extensions=GL_EXT_clip_cull_distance&extensions=GL_EXT_shader_framebuffer_fetch&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_NV_blend_minmax_factor
|
https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.3&api=gles2%3D3.2&extensions=GL_AMD_blend_minmax_factor&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_clear_texture&extensions=GL_ARB_fragment_shader_interlock&extensions=GL_ARB_get_texture_sub_image&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARM_shader_framebuffer_fetch&extensions=GL_EXT_buffer_storage&extensions=GL_EXT_clip_cull_distance&extensions=GL_EXT_shader_framebuffer_fetch&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_INTEL_fragment_shader_ordering&extensions=GL_NV_blend_minmax_factor&extensions=GL_NV_fragment_shader_interlock
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -3384,6 +3387,10 @@ typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level,
|
||||||
GLAPI PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage;
|
GLAPI PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage;
|
||||||
#define glClearTexSubImage glad_glClearTexSubImage
|
#define glClearTexSubImage glad_glClearTexSubImage
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef GL_ARB_fragment_shader_interlock
|
||||||
|
#define GL_ARB_fragment_shader_interlock 1
|
||||||
|
GLAPI int GLAD_GL_ARB_fragment_shader_interlock;
|
||||||
|
#endif
|
||||||
#ifndef GL_ARB_get_texture_sub_image
|
#ifndef GL_ARB_get_texture_sub_image
|
||||||
#define GL_ARB_get_texture_sub_image 1
|
#define GL_ARB_get_texture_sub_image 1
|
||||||
GLAPI int GLAD_GL_ARB_get_texture_sub_image;
|
GLAPI int GLAD_GL_ARB_get_texture_sub_image;
|
||||||
|
@ -3406,10 +3413,18 @@ GLAPI int GLAD_GL_EXT_shader_framebuffer_fetch;
|
||||||
#define GL_EXT_texture_compression_s3tc 1
|
#define GL_EXT_texture_compression_s3tc 1
|
||||||
GLAPI int GLAD_GL_EXT_texture_compression_s3tc;
|
GLAPI int GLAD_GL_EXT_texture_compression_s3tc;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef GL_INTEL_fragment_shader_ordering
|
||||||
|
#define GL_INTEL_fragment_shader_ordering 1
|
||||||
|
GLAPI int GLAD_GL_INTEL_fragment_shader_ordering;
|
||||||
|
#endif
|
||||||
#ifndef GL_NV_blend_minmax_factor
|
#ifndef GL_NV_blend_minmax_factor
|
||||||
#define GL_NV_blend_minmax_factor 1
|
#define GL_NV_blend_minmax_factor 1
|
||||||
GLAPI int GLAD_GL_NV_blend_minmax_factor;
|
GLAPI int GLAD_GL_NV_blend_minmax_factor;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef GL_NV_fragment_shader_interlock
|
||||||
|
#define GL_NV_fragment_shader_interlock 1
|
||||||
|
GLAPI int GLAD_GL_NV_fragment_shader_interlock;
|
||||||
|
#endif
|
||||||
#ifndef GL_ARM_shader_framebuffer_fetch
|
#ifndef GL_ARM_shader_framebuffer_fetch
|
||||||
#define GL_ARM_shader_framebuffer_fetch 1
|
#define GL_ARM_shader_framebuffer_fetch 1
|
||||||
GLAPI int GLAD_GL_ARM_shader_framebuffer_fetch;
|
GLAPI int GLAD_GL_ARM_shader_framebuffer_fetch;
|
||||||
|
@ -3437,6 +3452,10 @@ GLAPI int GLAD_GL_EXT_texture_compression_s3tc;
|
||||||
#define GL_NV_blend_minmax_factor 1
|
#define GL_NV_blend_minmax_factor 1
|
||||||
GLAPI int GLAD_GL_NV_blend_minmax_factor;
|
GLAPI int GLAD_GL_NV_blend_minmax_factor;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef GL_NV_fragment_shader_interlock
|
||||||
|
#define GL_NV_fragment_shader_interlock 1
|
||||||
|
GLAPI int GLAD_GL_NV_fragment_shader_interlock;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
18
externals/glad/src/glad.c
vendored
18
externals/glad/src/glad.c
vendored
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
OpenGL, OpenGL ES loader generated by glad 0.1.34 on Sat Aug 26 18:38:43 2023.
|
OpenGL, OpenGL ES loader generated by glad 0.1.36 on Fri Nov 10 04:24:01 2023.
|
||||||
|
|
||||||
Language/Generator: C/C++
|
Language/Generator: C/C++
|
||||||
Specification: gl
|
Specification: gl
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
GL_AMD_blend_minmax_factor,
|
GL_AMD_blend_minmax_factor,
|
||||||
GL_ARB_buffer_storage,
|
GL_ARB_buffer_storage,
|
||||||
GL_ARB_clear_texture,
|
GL_ARB_clear_texture,
|
||||||
|
GL_ARB_fragment_shader_interlock,
|
||||||
GL_ARB_get_texture_sub_image,
|
GL_ARB_get_texture_sub_image,
|
||||||
GL_ARB_texture_compression_bptc,
|
GL_ARB_texture_compression_bptc,
|
||||||
GL_ARM_shader_framebuffer_fetch,
|
GL_ARM_shader_framebuffer_fetch,
|
||||||
|
@ -17,16 +18,18 @@
|
||||||
GL_EXT_clip_cull_distance,
|
GL_EXT_clip_cull_distance,
|
||||||
GL_EXT_shader_framebuffer_fetch,
|
GL_EXT_shader_framebuffer_fetch,
|
||||||
GL_EXT_texture_compression_s3tc,
|
GL_EXT_texture_compression_s3tc,
|
||||||
GL_NV_blend_minmax_factor
|
GL_INTEL_fragment_shader_ordering,
|
||||||
|
GL_NV_blend_minmax_factor,
|
||||||
|
GL_NV_fragment_shader_interlock
|
||||||
Loader: True
|
Loader: True
|
||||||
Local files: False
|
Local files: False
|
||||||
Omit khrplatform: False
|
Omit khrplatform: False
|
||||||
Reproducible: False
|
Reproducible: False
|
||||||
|
|
||||||
Commandline:
|
Commandline:
|
||||||
--profile="core" --api="gl=4.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_AMD_blend_minmax_factor,GL_ARB_buffer_storage,GL_ARB_clear_texture,GL_ARB_get_texture_sub_image,GL_ARB_texture_compression_bptc,GL_ARM_shader_framebuffer_fetch,GL_EXT_buffer_storage,GL_EXT_clip_cull_distance,GL_EXT_shader_framebuffer_fetch,GL_EXT_texture_compression_s3tc,GL_NV_blend_minmax_factor"
|
--profile="core" --api="gl=4.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_AMD_blend_minmax_factor,GL_ARB_buffer_storage,GL_ARB_clear_texture,GL_ARB_fragment_shader_interlock,GL_ARB_get_texture_sub_image,GL_ARB_texture_compression_bptc,GL_ARM_shader_framebuffer_fetch,GL_EXT_buffer_storage,GL_EXT_clip_cull_distance,GL_EXT_shader_framebuffer_fetch,GL_EXT_texture_compression_s3tc,GL_INTEL_fragment_shader_ordering,GL_NV_blend_minmax_factor,GL_NV_fragment_shader_interlock"
|
||||||
Online:
|
Online:
|
||||||
https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.3&api=gles2%3D3.2&extensions=GL_AMD_blend_minmax_factor&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_clear_texture&extensions=GL_ARB_get_texture_sub_image&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARM_shader_framebuffer_fetch&extensions=GL_EXT_buffer_storage&extensions=GL_EXT_clip_cull_distance&extensions=GL_EXT_shader_framebuffer_fetch&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_NV_blend_minmax_factor
|
https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.3&api=gles2%3D3.2&extensions=GL_AMD_blend_minmax_factor&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_clear_texture&extensions=GL_ARB_fragment_shader_interlock&extensions=GL_ARB_get_texture_sub_image&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARM_shader_framebuffer_fetch&extensions=GL_EXT_buffer_storage&extensions=GL_EXT_clip_cull_distance&extensions=GL_EXT_shader_framebuffer_fetch&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_INTEL_fragment_shader_ordering&extensions=GL_NV_blend_minmax_factor&extensions=GL_NV_fragment_shader_interlock
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -860,6 +863,7 @@ PFNGLWAITSYNCPROC glad_glWaitSync = NULL;
|
||||||
int GLAD_GL_AMD_blend_minmax_factor = 0;
|
int GLAD_GL_AMD_blend_minmax_factor = 0;
|
||||||
int GLAD_GL_ARB_buffer_storage = 0;
|
int GLAD_GL_ARB_buffer_storage = 0;
|
||||||
int GLAD_GL_ARB_clear_texture = 0;
|
int GLAD_GL_ARB_clear_texture = 0;
|
||||||
|
int GLAD_GL_ARB_fragment_shader_interlock = 0;
|
||||||
int GLAD_GL_ARB_get_texture_sub_image = 0;
|
int GLAD_GL_ARB_get_texture_sub_image = 0;
|
||||||
int GLAD_GL_ARB_texture_compression_bptc = 0;
|
int GLAD_GL_ARB_texture_compression_bptc = 0;
|
||||||
int GLAD_GL_ARM_shader_framebuffer_fetch = 0;
|
int GLAD_GL_ARM_shader_framebuffer_fetch = 0;
|
||||||
|
@ -867,7 +871,9 @@ int GLAD_GL_EXT_buffer_storage = 0;
|
||||||
int GLAD_GL_EXT_clip_cull_distance = 0;
|
int GLAD_GL_EXT_clip_cull_distance = 0;
|
||||||
int GLAD_GL_EXT_shader_framebuffer_fetch = 0;
|
int GLAD_GL_EXT_shader_framebuffer_fetch = 0;
|
||||||
int GLAD_GL_EXT_texture_compression_s3tc = 0;
|
int GLAD_GL_EXT_texture_compression_s3tc = 0;
|
||||||
|
int GLAD_GL_INTEL_fragment_shader_ordering = 0;
|
||||||
int GLAD_GL_NV_blend_minmax_factor = 0;
|
int GLAD_GL_NV_blend_minmax_factor = 0;
|
||||||
|
int GLAD_GL_NV_fragment_shader_interlock = 0;
|
||||||
PFNGLBUFFERSTORAGEPROC glad_glBufferStorage = NULL;
|
PFNGLBUFFERSTORAGEPROC glad_glBufferStorage = NULL;
|
||||||
PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage = NULL;
|
PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage = NULL;
|
||||||
PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage = NULL;
|
PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage = NULL;
|
||||||
|
@ -1509,11 +1515,14 @@ static int find_extensionsGL(void) {
|
||||||
GLAD_GL_AMD_blend_minmax_factor = has_ext("GL_AMD_blend_minmax_factor");
|
GLAD_GL_AMD_blend_minmax_factor = has_ext("GL_AMD_blend_minmax_factor");
|
||||||
GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage");
|
GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage");
|
||||||
GLAD_GL_ARB_clear_texture = has_ext("GL_ARB_clear_texture");
|
GLAD_GL_ARB_clear_texture = has_ext("GL_ARB_clear_texture");
|
||||||
|
GLAD_GL_ARB_fragment_shader_interlock = has_ext("GL_ARB_fragment_shader_interlock");
|
||||||
GLAD_GL_ARB_get_texture_sub_image = has_ext("GL_ARB_get_texture_sub_image");
|
GLAD_GL_ARB_get_texture_sub_image = has_ext("GL_ARB_get_texture_sub_image");
|
||||||
GLAD_GL_ARB_texture_compression_bptc = has_ext("GL_ARB_texture_compression_bptc");
|
GLAD_GL_ARB_texture_compression_bptc = has_ext("GL_ARB_texture_compression_bptc");
|
||||||
GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch");
|
GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch");
|
||||||
GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
|
GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
|
||||||
|
GLAD_GL_INTEL_fragment_shader_ordering = has_ext("GL_INTEL_fragment_shader_ordering");
|
||||||
GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor");
|
GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor");
|
||||||
|
GLAD_GL_NV_fragment_shader_interlock = has_ext("GL_NV_fragment_shader_interlock");
|
||||||
free_exts();
|
free_exts();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1988,6 +1997,7 @@ static int find_extensionsGLES2(void) {
|
||||||
GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch");
|
GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch");
|
||||||
GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
|
GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
|
||||||
GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor");
|
GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor");
|
||||||
|
GLAD_GL_NV_fragment_shader_interlock = has_ext("GL_NV_fragment_shader_interlock");
|
||||||
free_exts();
|
free_exts();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,9 @@ void Driver::CheckExtensionSupport() {
|
||||||
ext_texture_compression_s3tc = GLAD_GL_EXT_texture_compression_s3tc;
|
ext_texture_compression_s3tc = GLAD_GL_EXT_texture_compression_s3tc;
|
||||||
ext_shader_framebuffer_fetch = GLAD_GL_EXT_shader_framebuffer_fetch;
|
ext_shader_framebuffer_fetch = GLAD_GL_EXT_shader_framebuffer_fetch;
|
||||||
arm_shader_framebuffer_fetch = GLAD_GL_ARM_shader_framebuffer_fetch;
|
arm_shader_framebuffer_fetch = GLAD_GL_ARM_shader_framebuffer_fetch;
|
||||||
|
arb_fragment_shader_interlock = GLAD_GL_ARB_fragment_shader_interlock;
|
||||||
|
nv_fragment_shader_interlock = GLAD_GL_NV_fragment_shader_interlock;
|
||||||
|
intel_fragment_shader_ordering = GLAD_GL_INTEL_fragment_shader_ordering;
|
||||||
blend_minmax_factor = GLAD_GL_AMD_blend_minmax_factor || GLAD_GL_NV_blend_minmax_factor;
|
blend_minmax_factor = GLAD_GL_AMD_blend_minmax_factor || GLAD_GL_NV_blend_minmax_factor;
|
||||||
is_suitable = GLAD_GL_VERSION_4_3 || GLAD_GL_ES_VERSION_3_1;
|
is_suitable = GLAD_GL_VERSION_4_3 || GLAD_GL_ES_VERSION_3_1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,18 @@ public:
|
||||||
return arm_shader_framebuffer_fetch;
|
return arm_shader_framebuffer_fetch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HasArbFragmentShaderInterlock() const {
|
||||||
|
return arb_fragment_shader_interlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HasNvFragmentShaderInterlock() const {
|
||||||
|
return nv_fragment_shader_interlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HasIntelFragmentShaderOrdering() const {
|
||||||
|
return intel_fragment_shader_ordering;
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns true if the implementation supports (NV/AMD)_blend_minmax_factor
|
/// Returns true if the implementation supports (NV/AMD)_blend_minmax_factor
|
||||||
bool HasBlendMinMaxFactor() const {
|
bool HasBlendMinMaxFactor() const {
|
||||||
return blend_minmax_factor;
|
return blend_minmax_factor;
|
||||||
|
@ -146,6 +158,9 @@ private:
|
||||||
bool arb_texture_compression_bptc{};
|
bool arb_texture_compression_bptc{};
|
||||||
bool arm_shader_framebuffer_fetch{};
|
bool arm_shader_framebuffer_fetch{};
|
||||||
bool ext_shader_framebuffer_fetch{};
|
bool ext_shader_framebuffer_fetch{};
|
||||||
|
bool arb_fragment_shader_interlock{};
|
||||||
|
bool nv_fragment_shader_interlock{};
|
||||||
|
bool intel_fragment_shader_ordering{};
|
||||||
bool blend_minmax_factor{};
|
bool blend_minmax_factor{};
|
||||||
|
|
||||||
std::string_view gl_version{};
|
std::string_view gl_version{};
|
||||||
|
|
|
@ -269,15 +269,16 @@ public:
|
||||||
.has_clip_planes = driver.HasClipCullDistance(),
|
.has_clip_planes = driver.HasClipCullDistance(),
|
||||||
.has_geometry_shader = true,
|
.has_geometry_shader = true,
|
||||||
.has_custom_border_color = true,
|
.has_custom_border_color = true,
|
||||||
.has_fragment_shader_interlock = false,
|
.has_fragment_shader_interlock = driver.HasArbFragmentShaderInterlock(),
|
||||||
|
// TODO: This extension requires GLSL 450 / OpenGL 4.5 context.
|
||||||
.has_fragment_shader_barycentric = false,
|
.has_fragment_shader_barycentric = false,
|
||||||
.has_blend_minmax_factor = driver.HasBlendMinMaxFactor(),
|
.has_blend_minmax_factor = driver.HasBlendMinMaxFactor(),
|
||||||
.has_minus_one_to_one_range = true,
|
.has_minus_one_to_one_range = true,
|
||||||
.has_logic_op = !driver.IsOpenGLES(),
|
.has_logic_op = !driver.IsOpenGLES(),
|
||||||
.has_gl_ext_framebuffer_fetch = driver.HasExtFramebufferFetch(),
|
.has_gl_ext_framebuffer_fetch = driver.HasExtFramebufferFetch(),
|
||||||
.has_gl_arm_framebuffer_fetch = driver.HasArmShaderFramebufferFetch(),
|
.has_gl_arm_framebuffer_fetch = driver.HasArmShaderFramebufferFetch(),
|
||||||
.has_gl_nv_fragment_shader_interlock = driver.GetVendor() == Vendor::Nvidia,
|
.has_gl_nv_fragment_shader_interlock = driver.HasNvFragmentShaderInterlock(),
|
||||||
.has_gl_intel_fragment_shader_interlock = driver.GetVendor() == Vendor::Intel,
|
.has_gl_intel_fragment_shader_ordering = driver.HasIntelFragmentShaderOrdering(),
|
||||||
// TODO: This extension requires GLSL 450 / OpenGL 4.5 context.
|
// TODO: This extension requires GLSL 450 / OpenGL 4.5 context.
|
||||||
.has_gl_nv_fragment_shader_barycentric = false,
|
.has_gl_nv_fragment_shader_barycentric = false,
|
||||||
.is_vulkan = false,
|
.is_vulkan = false,
|
||||||
|
|
|
@ -1234,10 +1234,11 @@ void FragmentModule::DefineExtensions() {
|
||||||
out += "#extension GL_NV_fragment_shader_interlock : enable\n";
|
out += "#extension GL_NV_fragment_shader_interlock : enable\n";
|
||||||
out += "#define beginInvocationInterlock beginInvocationInterlockNV\n";
|
out += "#define beginInvocationInterlock beginInvocationInterlockNV\n";
|
||||||
out += "#define endInvocationInterlock endInvocationInterlockNV\n";
|
out += "#define endInvocationInterlock endInvocationInterlockNV\n";
|
||||||
} else if (profile.has_gl_intel_fragment_shader_interlock) {
|
} else if (profile.has_gl_intel_fragment_shader_ordering) {
|
||||||
|
// NOTE: Intel does not have an end function for this.
|
||||||
out += "#extension GL_INTEL_fragment_shader_ordering : enable\n";
|
out += "#extension GL_INTEL_fragment_shader_ordering : enable\n";
|
||||||
out += "#define beginInvocationInterlock beginFragmentShaderOrderingINTEL\n";
|
out += "#define beginInvocationInterlock beginFragmentShaderOrderingINTEL\n";
|
||||||
out += "#define endInvocationInterlock\n";
|
out += "#define endInvocationInterlock()\n";
|
||||||
} else {
|
} else {
|
||||||
use_fragment_shader_interlock = false;
|
use_fragment_shader_interlock = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ struct Profile {
|
||||||
bool has_gl_ext_framebuffer_fetch{};
|
bool has_gl_ext_framebuffer_fetch{};
|
||||||
bool has_gl_arm_framebuffer_fetch{};
|
bool has_gl_arm_framebuffer_fetch{};
|
||||||
bool has_gl_nv_fragment_shader_interlock{};
|
bool has_gl_nv_fragment_shader_interlock{};
|
||||||
bool has_gl_intel_fragment_shader_interlock{};
|
bool has_gl_intel_fragment_shader_ordering{};
|
||||||
bool has_gl_nv_fragment_shader_barycentric{};
|
bool has_gl_nv_fragment_shader_barycentric{};
|
||||||
bool is_vulkan{};
|
bool is_vulkan{};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue