Check GL version number to enable extensions that became core

* This means that even if the extension isn't reported in the string
  for whatever reason, we still mark it available. It saves on checks
  of (GLCoreVersion >= 43 || HasExt[foo]) all over the place.
This commit is contained in:
baldurk
2017-01-17 19:23:42 +00:00
parent 4f8d6d5c70
commit e4a4c701cd
5 changed files with 63 additions and 61 deletions
+7 -8
View File
@@ -47,7 +47,7 @@ bool CheckReplayContext(PFNGLGETSTRINGPROC getStr, PFNGLGETINTEGERVPROC getInt,
// as they should have minimal or no hardware requirement. They were present on mesa 10.6
// for all drivers which dates to mid 2015.
#undef EXT_TO_CHECK
#define EXT_TO_CHECK(ext) ext,
#define EXT_TO_CHECK(ver, ext) ext,
enum
{
EXTENSION_CHECKS() ext_count,
@@ -78,8 +78,8 @@ bool CheckReplayContext(PFNGLGETSTRINGPROC getStr, PFNGLGETINTEGERVPROC getInt,
ext += 3;
#undef EXT_TO_CHECK
#define EXT_TO_CHECK(extname) \
if(!strcmp(ext, STRINGIZE(extname))) \
#define EXT_TO_CHECK(ver, extname) \
if(GLCoreVersion >= ver || !strcmp(ext, STRINGIZE(extname))) \
exts[extname] = true;
EXTENSION_CHECKS()
@@ -402,8 +402,8 @@ void CheckExtensions(const GLHookSet &gl)
ext += 3;
#undef EXT_TO_CHECK
#define EXT_TO_CHECK(extname) \
if(!strcmp(ext, STRINGIZE(extname))) \
#define EXT_TO_CHECK(ver, extname) \
if(GLCoreVersion >= ver || !strcmp(ext, STRINGIZE(extname))) \
HasExt[extname] = true;
EXTENSION_CHECKS()
@@ -469,7 +469,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
// AMD throws an error if we try to copy the mips that are smaller than 4x4,
if(gl.glGetError && gl.glGenTextures && gl.glBindTexture && gl.glCopyImageSubData &&
gl.glTexStorage2D && gl.glTexSubImage2D && gl.glTexParameteri && gl.glDeleteTextures &&
(GLCoreVersion >= 43 || HasExt[ARB_copy_image]) && HasExt[ARB_texture_storage])
HasExt[ARB_copy_image] && HasExt[ARB_texture_storage])
{
GLuint texs[2];
gl.glGenTextures(2, texs);
@@ -576,8 +576,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
}
if(gl.glGetError && gl.glGenProgramPipelines && gl.glDeleteProgramPipelines &&
gl.glGetProgramPipelineiv && (HasExt[ARB_compute_shader] || GLCoreVersion >= 43) &&
(HasExt[ARB_program_interface_query] || GLCoreVersion >= 43))
gl.glGetProgramPipelineiv && HasExt[ARB_compute_shader] && HasExt[ARB_program_interface_query])
{
GLuint pipe = 0;
gl.glGenProgramPipelines(1, &pipe);
+45 -42
View File
@@ -187,54 +187,57 @@ void GetBindpointMapping(const GLHookSet &gl, GLuint curProg, int shadIdx, Shade
extern int GLCoreVersion;
extern bool GLIsCore;
// list of extensions and the version when they became core
// 99 means the extension never became core, so you can easily
// just do a check of CoreVersion >= NN and they will always fail.
#define EXTENSION_CHECKS() \
EXT_TO_CHECK(ARB_enhanced_layouts) \
EXT_TO_CHECK(ARB_clip_control) \
EXT_TO_CHECK(EXT_polygon_offset_clamp) \
EXT_TO_CHECK(KHR_blend_equation_advanced_coherent) \
EXT_TO_CHECK(EXT_raster_multisample) \
EXT_TO_CHECK(ARB_indirect_parameters) \
EXT_TO_CHECK(EXT_depth_bounds_test) \
EXT_TO_CHECK(ARB_compute_shader) \
EXT_TO_CHECK(ARB_program_interface_query) \
EXT_TO_CHECK(ARB_copy_image) \
EXT_TO_CHECK(ARB_shader_atomic_counters) \
EXT_TO_CHECK(ARB_shader_storage_buffer_object) \
EXT_TO_CHECK(EXT_direct_state_access) \
EXT_TO_CHECK(ARB_clear_buffer_object) \
EXT_TO_CHECK(ARB_internalformat_query2) \
EXT_TO_CHECK(ARB_texture_swizzle) \
EXT_TO_CHECK(EXT_texture_swizzle) \
EXT_TO_CHECK(ARB_shading_language_420pack) \
EXT_TO_CHECK(ARB_separate_shader_objects) \
EXT_TO_CHECK(ARB_explicit_attrib_location) \
EXT_TO_CHECK(ARB_vertex_attrib_binding) \
EXT_TO_CHECK(ARB_sampler_objects) \
EXT_TO_CHECK(KHR_debug) \
EXT_TO_CHECK(ARB_sample_shading) \
EXT_TO_CHECK(ARB_texture_cube_map_array) \
EXT_TO_CHECK(ARB_shader_image_load_store) \
EXT_TO_CHECK(ARB_tessellation_shader) \
EXT_TO_CHECK(ARB_shader_subroutine) \
EXT_TO_CHECK(ARB_draw_indirect) \
EXT_TO_CHECK(ARB_query_buffer_object) \
EXT_TO_CHECK(ARB_draw_buffers_blend) \
EXT_TO_CHECK(ARB_viewport_array) \
EXT_TO_CHECK(ARB_ES3_compatibility) \
EXT_TO_CHECK(ARB_transform_feedback2) \
EXT_TO_CHECK(ARB_texture_storage) \
EXT_TO_CHECK(ARB_texture_storage_multisample) \
EXT_TO_CHECK(ARB_gpu_shader5) \
EXT_TO_CHECK(ARB_texture_view) \
EXT_TO_CHECK(ARB_seamless_cubemap_per_texture) \
EXT_TO_CHECK(ARB_stencil_texturing) \
EXT_TO_CHECK(ARB_base_instance)
EXT_TO_CHECK(33, ARB_explicit_attrib_location) \
EXT_TO_CHECK(33, ARB_sampler_objects) \
EXT_TO_CHECK(33, ARB_texture_swizzle) \
EXT_TO_CHECK(40, ARB_draw_buffers_blend) \
EXT_TO_CHECK(40, ARB_draw_indirect) \
EXT_TO_CHECK(40, ARB_gpu_shader5) \
EXT_TO_CHECK(40, ARB_sample_shading) \
EXT_TO_CHECK(40, ARB_shader_subroutine) \
EXT_TO_CHECK(40, ARB_tessellation_shader) \
EXT_TO_CHECK(40, ARB_texture_cube_map_array) \
EXT_TO_CHECK(40, ARB_transform_feedback2) \
EXT_TO_CHECK(41, ARB_separate_shader_objects) \
EXT_TO_CHECK(41, ARB_viewport_array) \
EXT_TO_CHECK(42, ARB_base_instance) \
EXT_TO_CHECK(42, ARB_shader_atomic_counters) \
EXT_TO_CHECK(42, ARB_shader_image_load_store) \
EXT_TO_CHECK(42, ARB_shading_language_420pack) \
EXT_TO_CHECK(42, ARB_texture_storage) \
EXT_TO_CHECK(43, ARB_clear_buffer_object) \
EXT_TO_CHECK(43, ARB_compute_shader) \
EXT_TO_CHECK(43, ARB_copy_image) \
EXT_TO_CHECK(43, ARB_ES3_compatibility) \
EXT_TO_CHECK(43, ARB_internalformat_query2) \
EXT_TO_CHECK(43, ARB_program_interface_query) \
EXT_TO_CHECK(43, ARB_shader_storage_buffer_object) \
EXT_TO_CHECK(43, ARB_stencil_texturing) \
EXT_TO_CHECK(43, ARB_texture_storage_multisample) \
EXT_TO_CHECK(43, ARB_texture_view) \
EXT_TO_CHECK(43, ARB_vertex_attrib_binding) \
EXT_TO_CHECK(43, KHR_debug) \
EXT_TO_CHECK(44, ARB_enhanced_layouts) \
EXT_TO_CHECK(44, ARB_query_buffer_object) \
EXT_TO_CHECK(45, ARB_clip_control) \
EXT_TO_CHECK(99, ARB_indirect_parameters) \
EXT_TO_CHECK(99, ARB_seamless_cubemap_per_texture) \
EXT_TO_CHECK(99, EXT_depth_bounds_test) \
EXT_TO_CHECK(99, EXT_direct_state_access) \
EXT_TO_CHECK(99, EXT_polygon_offset_clamp) \
EXT_TO_CHECK(99, EXT_raster_multisample) \
EXT_TO_CHECK(99, EXT_texture_swizzle) \
EXT_TO_CHECK(99, KHR_blend_equation_advanced_coherent)
// extensions we know we want to check for are precached, indexd by this enum
enum ExtensionCheckEnum
{
#undef EXT_TO_CHECK
#define EXT_TO_CHECK(ext) ext,
#define EXT_TO_CHECK(ver, ext) ext,
EXTENSION_CHECKS()
GLExtension_Count,
+3 -3
View File
@@ -1504,7 +1504,7 @@ struct RenderTextState
enableBits[7] = gl.glIsEnabled(eGL_ALPHA_TEST) != 0;
}
if(modern && (GLCoreVersion >= 45 || HasExt[ARB_clip_control]))
if(modern && HasExt[ARB_clip_control])
{
gl.glGetIntegerv(eGL_CLIP_ORIGIN, (GLint *)&ClipOrigin);
gl.glGetIntegerv(eGL_CLIP_DEPTH_MODE, (GLint *)&ClipDepth);
@@ -1661,7 +1661,7 @@ struct RenderTextState
gl.glDisable(eGL_ALPHA_TEST);
}
if(modern && gl.glClipControl && (GLCoreVersion >= 45 || HasExt[ARB_clip_control]))
if(modern && gl.glClipControl && HasExt[ARB_clip_control])
gl.glClipControl(ClipOrigin, ClipDepth);
if(modern && HasExt[ARB_draw_buffers_blend])
@@ -1852,7 +1852,7 @@ void WrappedOpenGL::RenderOverlayStr(float x, float y, const char *text)
}
gl.glPolygonMode(eGL_FRONT_AND_BACK, eGL_FILL);
if(gl.glClipControl && (GLCoreVersion >= 45 || HasExt[ARB_clip_control]))
if(gl.glClipControl && HasExt[ARB_clip_control])
gl.glClipControl(eGL_LOWER_LEFT, eGL_NEGATIVE_ONE_TO_ONE);
// bind UBOs
+7 -7
View File
@@ -399,7 +399,7 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl)
GLint maxCount = 0;
GLuint name = 0;
if(GLCoreVersion >= 40 || HasExt[ARB_transform_feedback2])
if(HasExt[ARB_transform_feedback2])
{
m_Real->glGetIntegerv(eGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxCount);
@@ -413,7 +413,7 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl)
}
}
if(GLCoreVersion >= 42 || HasExt[ARB_shader_image_load_store])
if(HasExt[ARB_shader_image_load_store])
{
m_Real->glGetIntegerv(eGL_MAX_IMAGE_UNITS, &maxCount);
@@ -427,7 +427,7 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl)
}
}
if(GLCoreVersion >= 42 || HasExt[ARB_shader_atomic_counters])
if(HasExt[ARB_shader_atomic_counters])
{
m_Real->glGetIntegerv(eGL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &maxCount);
@@ -441,7 +441,7 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl)
}
}
if(GLCoreVersion >= 43 || HasExt[ARB_shader_storage_buffer_object])
if(HasExt[ARB_shader_storage_buffer_object])
{
m_Real->glGetIntegerv(eGL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &maxCount);
@@ -661,7 +661,7 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl)
m_Real->glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&VAO);
if(GLCoreVersion >= 40 || HasExt[ARB_transform_feedback2])
if(HasExt[ARB_transform_feedback2])
m_Real->glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BINDING, (GLint *)&FeedbackObj);
// the spec says that you can only query for the format that was previously set, or you get
@@ -680,7 +680,7 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl)
m_Real->glGetFloatv(eGL_POINT_SIZE, &PointSize);
m_Real->glGetIntegerv(eGL_PRIMITIVE_RESTART_INDEX, (GLint *)&PrimitiveRestartIndex);
if(GLCoreVersion >= 45 || HasExt[ARB_clip_control])
if(HasExt[ARB_clip_control])
{
m_Real->glGetIntegerv(eGL_CLIP_ORIGIN, (GLint *)&ClipOrigin);
m_Real->glGetIntegerv(eGL_CLIP_DEPTH_MODE, (GLint *)&ClipDepth);
@@ -1138,7 +1138,7 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl)
m_Real->glActiveTexture(ActiveTexture);
m_Real->glBindVertexArray(VAO);
if(GLCoreVersion >= 40 || HasExt[ARB_transform_feedback2])
if(HasExt[ARB_transform_feedback2])
m_Real->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, FeedbackObj);
// See FetchState(). The spec says that you have to SET the right format for the shader too,
+1 -1
View File
@@ -1688,7 +1688,7 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg,
GLsizei numSigProps = (GLsizei)ARRAY_COUNT(props);
// GL_LOCATION_COMPONENT not supported on core <4.4 (or without GL_ARB_enhanced_layouts)
if(!HasExt[ARB_enhanced_layouts] && GLCoreVersion < 44)
if(!HasExt[ARB_enhanced_layouts])
numSigProps--;
gl.glGetProgramResourceiv(sepProg, sigEnum, i, numSigProps, props, numSigProps, NULL, values);