mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
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:
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user