Add a few more extensions we support, and some more we never will

* There are a handful of ARB and EXT extensions left that aren't in either
  the list of supported, or will-never support. These are ones that I want
  to support but haven't written the code for.
This commit is contained in:
baldurk
2014-12-20 15:07:13 +00:00
parent a1e3d80a6d
commit 3be08dbb71
10 changed files with 178 additions and 14 deletions
+1
View File
@@ -79,6 +79,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
EXT_CHECK(ARB_enhanced_layouts);
EXT_CHECK(EXT_polygon_offset_clamp);
EXT_CHECK(KHR_blend_equation_advanced_coherent);
EXT_CHECK(EXT_raster_multisample);
#undef EXT_CHECK
}
+2
View File
@@ -99,6 +99,7 @@ enum ExtensionCheckEnum
ExtensionSupported_ARB_clip_control,
ExtensionSupported_EXT_polygon_offset_clamp,
ExtensionSupported_KHR_blend_equation_advanced_coherent,
ExtensionSupported_EXT_raster_multisample,
ExtensionSupported_Count,
};
extern bool ExtensionSupported[ExtensionSupported_Count];
@@ -279,6 +280,7 @@ enum GLChunkType
SAMPLE_MASK,
SAMPLE_COVERAGE,
MIN_SAMPLE_SHADING,
RASTER_SAMPLES,
DEPTH_FUNC,
DEPTH_MASK,
DEPTH_RANGE,
+58
View File
@@ -173,6 +173,7 @@ const char *GLChunkNames[] =
"glSampleMaski",
"glSampleCoverage",
"glMinSampleShading",
"glRasterSamplesEXT",
"glDepthFunc",
"glDepthMask",
"glDepthRange",
@@ -342,16 +343,20 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_buffer_storage");
globalExts.push_back("GL_ARB_clear_buffer_object");
globalExts.push_back("GL_ARB_clear_texture");
globalExts.push_back("GL_ARB_clip_control");
globalExts.push_back("GL_ARB_color_buffer_float");
globalExts.push_back("GL_ARB_compute_shader");
globalExts.push_back("GL_ARB_compute_variable_group_size");
globalExts.push_back("GL_ARB_conditional_render_inverted");
globalExts.push_back("GL_ARB_conservative_depth");
globalExts.push_back("GL_ARB_copy_buffer");
globalExts.push_back("GL_ARB_copy_image");
globalExts.push_back("GL_ARB_cull_distance");
globalExts.push_back("GL_ARB_debug_output");
globalExts.push_back("GL_ARB_depth_buffer_float");
globalExts.push_back("GL_ARB_depth_clamp");
globalExts.push_back("GL_ARB_depth_texture");
globalExts.push_back("GL_ARB_derivative_control");
globalExts.push_back("GL_ARB_draw_buffers");
globalExts.push_back("GL_ARB_draw_buffers_blend");
globalExts.push_back("GL_ARB_draw_elements_base_vertex");
@@ -370,11 +375,13 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_framebuffer_sRGB");
globalExts.push_back("GL_ARB_geometry_shader4");
globalExts.push_back("GL_ARB_get_program_binary");
globalExts.push_back("GL_ARB_get_texture_sub_image");
globalExts.push_back("GL_ARB_gpu_shader_fp64");
globalExts.push_back("GL_ARB_gpu_shader5");
globalExts.push_back("GL_ARB_half_float_pixel");
globalExts.push_back("GL_ARB_half_float_vertex");
globalExts.push_back("GL_ARB_indirect_parameters");
globalExts.push_back("GL_ARB_instanced_arrays");
globalExts.push_back("GL_ARB_internalformat_query");
globalExts.push_back("GL_ARB_internalformat_query2");
globalExts.push_back("GL_ARB_invalidate_subdata");
@@ -386,6 +393,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_occlusion_query");
globalExts.push_back("GL_ARB_occlusion_query2");
globalExts.push_back("GL_ARB_pixel_buffer_object");
globalExts.push_back("GL_ARB_pipeline_statistics_query");
globalExts.push_back("GL_ARB_point_parameters");
globalExts.push_back("GL_ARB_point_sprite");
globalExts.push_back("GL_ARB_program_interface_query");
@@ -393,6 +401,8 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_query_buffer_object");
globalExts.push_back("GL_ARB_robust_buffer_access_behavior");
globalExts.push_back("GL_ARB_robustness");
globalExts.push_back("GL_ARB_robustness_application_isolation");
globalExts.push_back("GL_ARB_robustness_share_group_isolation");
globalExts.push_back("GL_ARB_sample_shading");
globalExts.push_back("GL_ARB_sampler_objects");
globalExts.push_back("GL_ARB_seamless_cube_map");
@@ -405,16 +415,20 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_shader_image_load_store");
globalExts.push_back("GL_ARB_shader_image_size");
globalExts.push_back("GL_ARB_shader_precision");
globalExts.push_back("GL_ARB_shader_stencil_export");
globalExts.push_back("GL_ARB_shader_storage_buffer_object");
globalExts.push_back("GL_ARB_shader_subroutine");
globalExts.push_back("GL_ARB_shader_texture_image_samples");
globalExts.push_back("GL_ARB_shader_texture_lod");
globalExts.push_back("GL_ARB_shading_language_100");
globalExts.push_back("GL_ARB_shading_language_420pack");
globalExts.push_back("GL_ARB_shading_language_packing");
globalExts.push_back("GL_ARB_shadow");
globalExts.push_back("GL_ARB_shadow_ambient");
globalExts.push_back("GL_ARB_stencil_texturing");
globalExts.push_back("GL_ARB_sync");
globalExts.push_back("GL_ARB_tessellation_shader");
globalExts.push_back("GL_ARB_texture_barrier");
globalExts.push_back("GL_ARB_texture_border_clamp");
globalExts.push_back("GL_ARB_texture_buffer_object");
globalExts.push_back("GL_ARB_texture_buffer_object_rgb32");
@@ -442,6 +456,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_texture_view");
globalExts.push_back("GL_ARB_timer_query");
globalExts.push_back("GL_ARB_transform_feedback_instanced");
globalExts.push_back("GL_ARB_transform_feedback_overflow_query");
globalExts.push_back("GL_ARB_transform_feedback2");
globalExts.push_back("GL_ARB_transform_feedback3");
globalExts.push_back("GL_ARB_uniform_buffer_object");
@@ -460,6 +475,8 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_EXT_blend_func_separate");
globalExts.push_back("GL_EXT_blend_minmax");
globalExts.push_back("GL_EXT_blend_subtract");
globalExts.push_back("GL_EXT_debug_label");
globalExts.push_back("GL_EXT_debug_marker");
globalExts.push_back("GL_EXT_depth_bounds_test");
globalExts.push_back("GL_EXT_direct_state_access");
globalExts.push_back("GL_EXT_draw_buffers2");
@@ -471,6 +488,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_EXT_framebuffer_object");
globalExts.push_back("GL_EXT_framebuffer_sRGB");
globalExts.push_back("GL_EXT_gpu_shader4");
globalExts.push_back("GL_EXT_multisample");
globalExts.push_back("GL_EXT_multi_draw_arrays");
globalExts.push_back("GL_EXT_packed_depth_stencil");
globalExts.push_back("GL_EXT_packed_float");
@@ -478,8 +496,11 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_EXT_pixel_buffer_object");
globalExts.push_back("GL_EXT_point_parameters");
globalExts.push_back("GL_EXT_polygon_offset_clamp");
globalExts.push_back("GL_EXT_post_depth_coverage");
globalExts.push_back("GL_EXT_provoking_vertex");
globalExts.push_back("GL_EXT_raster_multisample");
globalExts.push_back("GL_EXT_shader_image_load_store");
globalExts.push_back("GL_EXT_shader_image_load_formatted");
globalExts.push_back("GL_EXT_shader_integer_mix");
globalExts.push_back("GL_EXT_shadow_funcs");
globalExts.push_back("GL_EXT_stencil_wrap");
@@ -491,10 +512,12 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_EXT_texture_cube_map");
globalExts.push_back("GL_EXT_texture_edge_clamp");
globalExts.push_back("GL_EXT_texture_filter_anisotropic");
globalExts.push_back("GL_EXT_texture_filter_minmax");
globalExts.push_back("GL_EXT_texture_integer");
globalExts.push_back("GL_EXT_texture_lod_bias");
globalExts.push_back("GL_EXT_texture_mirror_clamp");
globalExts.push_back("GL_EXT_texture_shared_exponent");
globalExts.push_back("GL_EXT_texture_snorm");
globalExts.push_back("GL_EXT_texture_sRGB");
globalExts.push_back("GL_EXT_texture_sRGB_decode");
globalExts.push_back("GL_EXT_texture_swizzle");
@@ -515,42 +538,74 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
I'm not sure what to do about GL_ARB_imaging, it seems like it's somewhat used in modern GL? For now
I'm hoping I can get away with not reporting it but implementing the functionality it still describes.
* GL_ARB_compatibility
* GL_ARB_fragment_program
* GL_ARB_fragment_program_shadow
* GL_ARB_fragment_shader
* GL_ARB_matrix_palette
* GL_ARB_shader_objects
* GL_ARB_texture_env_add
* GL_ARB_texture_env_combine
* GL_ARB_texture_env_crossbar
* GL_ARB_texture_env_dot3
* GL_ARB_transpose_matrix
* GL_ARB_vertex_blend
* GL_ARB_vertex_program
* GL_ARB_vertex_shader
* GL_ARB_window_pos
* GL_ATI_draw_buffers
* GL_ATI_texture_float
* GL_ATI_texture_mirror_once
* GL_EXT_422_pixels
* GL_EXT_abgr
* GL_EXT_bindable_uniform
* GL_EXT_blend_logic_op
* GL_EXT_Cg_shader
* GL_EXT_clip_volume_hint
* GL_EXT_cmyka
* GL_EXT_color_subtable
* GL_EXT_compiled_vertex_array
* GL_EXT_convolution
* GL_EXT_coordinate_frame
* GL_EXT_copy_texture
* GL_EXT_cull_vertex
* GL_EXT_fog_coord
* GL_EXT_fragment_lighting
* GL_EXT_geometry_shader4
* GL_EXT_gpu_program_parameters
* GL_EXT_histogram
* GL_EXT_import_sync_object
* GL_EXT_index_array_formats
* GL_EXT_index_func
* GL_EXT_index_material
* GL_EXT_index_texture
* GL_EXT_light_texture
* GL_EXT_misc_attribute
* GL_EXT_packed_pixels
* GL_EXT_paletted_texture
* GL_EXT_pixel_transform
* GL_EXT_pixel_transform_color_table
* GL_EXT_rescale_normal
* GL_EXT_scene_marker
* GL_EXT_secondary_color
* GL_EXT_separate_shader_objects
* GL_EXT_separate_specular_color
* GL_EXT_shared_texture_palette
* GL_EXT_stencil_clear_tag
* GL_EXT_stencil_two_side
* GL_EXT_subtexture
* GL_EXT_texture_compression_latc
* GL_EXT_texture_env_add
* GL_EXT_texture_env_combine
* GL_EXT_texture_env_dot3
* GL_EXT_texture_lod
* GL_EXT_texture_object
* GL_EXT_texture_perturb_normal
* GL_EXT_texture_storage
* GL_EXT_vertex_array
* GL_EXT_vertex_array_bgra
* GL_EXT_vertex_shader
* GL_EXT_vertex_weighting
* GL_S3_s3tc
************************************************************************/
@@ -2339,6 +2394,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case MIN_SAMPLE_SHADING:
Serialise_glMinSampleShading(0.0f);
break;
case RASTER_SAMPLES:
Serialise_glRasterSamplesEXT(0, 0);
break;
case DEPTH_FUNC:
Serialise_glDepthFunc(eGL_NONE);
break;
+5
View File
@@ -389,6 +389,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glSampleMaski(GLuint maskNumber, GLbitfield mask));
IMPLEMENT_FUNCTION_SERIALISED(void, glSampleCoverage(GLfloat value, GLboolean invert));
IMPLEMENT_FUNCTION_SERIALISED(void, glMinSampleShading(GLfloat value));
IMPLEMENT_FUNCTION_SERIALISED(void, glRasterSamplesEXT(GLuint samples, GLboolean fixedsamplelocations));
IMPLEMENT_FUNCTION_SERIALISED(void, glClear(GLbitfield mask));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearDepth(GLdouble depth));
@@ -495,6 +496,10 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message));
IMPLEMENT_FUNCTION_SERIALISED(void, glPopDebugGroup());
IMPLEMENT_FUNCTION_SERIALISED(void, glPushGroupMarkerEXT(GLsizei length, const GLchar *marker));
IMPLEMENT_FUNCTION_SERIALISED(void, glPopGroupMarkerEXT());
IMPLEMENT_FUNCTION_SERIALISED(void, glInsertEventMarkerEXT(GLsizei length, const GLchar *marker));
IMPLEMENT_FUNCTION_SERIALISED(void, glFrameTerminatorGREMEDY());
IMPLEMENT_FUNCTION_SERIALISED(void, glStringMarkerGREMEDY(GLsizei len, const void *string));
+6 -2
View File
@@ -151,7 +151,7 @@ struct GLHookSet
PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv;
PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus; // aliases glGetGraphicsResetStatusARB
PFNGLGETOBJECTLABELPROC glGetObjectLabel;
PFNGLGETOBJECTLABELPROC glGetObjectLabel; // aliases glGetObjectLabelEXT
PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog; // aliases glGetDebugMessageLogARB
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv; // aliases glGetFramebufferAttachmentParameterivEXT
@@ -243,6 +243,7 @@ struct GLHookSet
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
PFNGLCOLORMASKIPROC glColorMaski; // aliases glColorMaskIndexedEXT
PFNGLSAMPLEMASKIPROC glSampleMaski;
PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT;
PFNGLSAMPLECOVERAGEPROC glSampleCoverage; // aliases glSampleCoverageARB
PFNGLMINSAMPLESHADINGPROC glMinSampleShading; // aliases glMinSampleShadingARB
PFNGLDEPTHRANGEFPROC glDepthRangef;
@@ -280,7 +281,10 @@ struct GLHookSet
PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert; // aliases glDebugMessageInsertARB
PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
PFNGLOBJECTLABELPROC glObjectLabel;
PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT;
PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT;
PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT;
PFNGLOBJECTLABELPROC glObjectLabel; // aliases glLabelObjectEXT
PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
PFNGLENABLEIPROC glEnablei; // aliases glEnableIndexedEXT
PFNGLDISABLEIPROC glDisablei; // aliases glDisableIndexedEXT
+10 -12
View File
@@ -754,7 +754,9 @@
HookExtension(PFNGLPUSHDEBUGGROUPPROC, glPushDebugGroup); \
HookExtension(PFNGLPOPDEBUGGROUPPROC, glPopDebugGroup); \
HookExtension(PFNGLOBJECTLABELPROC, glObjectLabel); \
HookExtensionAlias(PFNGLOBJECTLABELPROC, glObjectLabel, glLabelObjectEXT); \
HookExtension(PFNGLGETOBJECTLABELPROC, glGetObjectLabel); \
HookExtensionAlias(PFNGLGETOBJECTLABELPROC, glGetObjectLabel, glGetObjectLabelEXT); \
HookExtension(PFNGLOBJECTPTRLABELPROC, glObjectPtrLabel); \
HookExtension(PFNGLGETOBJECTPTRLABELPROC, glGetObjectPtrLabel); \
HookExtension(PFNGLBUFFERSTORAGEPROC, glBufferStorage); \
@@ -815,6 +817,9 @@
HookExtension(PFNGLTEXTUREBARRIERPROC, glTextureBarrier); \
HookExtension(PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC, glDispatchComputeGroupSizeARB); \
HookExtension(PFNGLBLENDBARRIERKHRPROC, glBlendBarrierKHR); \
HookExtension(PFNGLINSERTEVENTMARKEREXTPROC, glInsertEventMarkerEXT); \
HookExtension(PFNGLPUSHGROUPMARKEREXTPROC, glPushGroupMarkerEXT); \
HookExtension(PFNGLPOPGROUPMARKEREXTPROC, glPopGroupMarkerEXT); \
HookExtension(PFNGLDEPTHBOUNDSEXTPROC, glDepthBoundsEXT); \
HookExtension(PFNGLTEXTUREPARAMETERFEXTPROC, glTextureParameterfEXT); \
HookExtension(PFNGLTEXTUREPARAMETERFVEXTPROC, glTextureParameterfvEXT); \
@@ -938,6 +943,7 @@
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC, glVertexArrayVertexAttribLOffsetEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC, glVertexArrayVertexAttribDivisorEXT); \
HookExtension(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT); \
HookExtension(PFNGLRASTERSAMPLESEXTPROC, glRasterSamplesEXT); \
HookExtension(PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTerminatorGREMEDY); \
HookExtension(PFNGLSTRINGMARKERGREMEDYPROC, glStringMarkerGREMEDY); \
HookExtension(PFNGLCULLFACEPROC, glCullFace); \
@@ -1591,6 +1597,9 @@
HookWrapper0(void, glTextureBarrier); \
HookWrapper6(void, glDispatchComputeGroupSizeARB, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z, GLuint, group_size_x, GLuint, group_size_y, GLuint, group_size_z); \
HookWrapper0(void, glBlendBarrierKHR); \
HookWrapper2(void, glInsertEventMarkerEXT, GLsizei, length, const GLchar *, marker); \
HookWrapper2(void, glPushGroupMarkerEXT, GLsizei, length, const GLchar *, marker); \
HookWrapper0(void, glPopGroupMarkerEXT); \
HookWrapper2(void, glDepthBoundsEXT, GLclampd, zmin, GLclampd, zmax); \
HookWrapper4(void, glTextureParameterfEXT, GLuint, texture, GLenum, target, GLenum, pname, GLfloat, param); \
HookWrapper4(void, glTextureParameterfvEXT, GLuint, texture, GLenum, target, GLenum, pname, const GLfloat *, params); \
@@ -1714,6 +1723,7 @@
HookWrapper7(void, glVertexArrayVertexAttribLOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \
HookWrapper3(void, glVertexArrayVertexAttribDivisorEXT, GLuint, vaobj, GLuint, index, GLuint, divisor); \
HookWrapper3(void, glPolygonOffsetClampEXT, GLfloat, factor, GLfloat, units, GLfloat, clamp); \
HookWrapper2(void, glRasterSamplesEXT, GLuint, samples, GLboolean, fixedsamplelocations); \
HookWrapper0(void, glFrameTerminatorGREMEDY); \
HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \
@@ -2494,11 +2504,6 @@
HookWrapper9(void, glcopytexsubimage3dext, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper2(void, glcullparameterdvext, GLenum, pname, GLdouble *, params); \
HookWrapper2(void, glcullparameterfvext, GLenum, pname, GLfloat *, params); \
HookWrapper4(void, gllabelobjectext, GLenum, type, GLuint, object, GLsizei, length, const GLchar *, label); \
HookWrapper5(void, glgetobjectlabelext, GLenum, type, GLuint, object, GLsizei, bufSize, GLsizei *, length, GLchar *, label); \
HookWrapper2(void, glinserteventmarkerext, GLsizei, length, const GLchar *, marker); \
HookWrapper2(void, glpushgroupmarkerext, GLsizei, length, const GLchar *, marker); \
HookWrapper0(void, glpopgroupmarkerext); \
HookWrapper2(void, glmatrixloadfext, GLenum, mode, const GLfloat *, m); \
HookWrapper2(void, glmatrixloaddext, GLenum, mode, const GLdouble *, m); \
HookWrapper2(void, glmatrixmultfext, GLenum, mode, const GLfloat *, m); \
@@ -2662,7 +2667,6 @@
HookWrapper2(void, glpointparameterfext, GLenum, pname, GLfloat, param); \
HookWrapper2(void, glpointparameterfvext, GLenum, pname, const GLfloat *, params); \
HookWrapper2(void, glpolygonoffsetext, GLfloat, factor, GLfloat, bias); \
HookWrapper2(void, glrastersamplesext, GLuint, samples, GLboolean, fixedsamplelocations); \
HookWrapper3(void, glsecondarycolor3bext, GLbyte, red, GLbyte, green, GLbyte, blue); \
HookWrapper1(void, glsecondarycolor3bvext, const GLbyte *, v); \
HookWrapper3(void, glsecondarycolor3dext, GLdouble, red, GLdouble, green, GLdouble, blue); \
@@ -4115,11 +4119,6 @@
HandleUnsupported(PFNGLCOPYTEXSUBIMAGE3DEXTPROC, glcopytexsubimage3dext); \
HandleUnsupported(PFNGLCULLPARAMETERDVEXTPROC, glcullparameterdvext); \
HandleUnsupported(PFNGLCULLPARAMETERFVEXTPROC, glcullparameterfvext); \
HandleUnsupported(PFNGLLABELOBJECTEXTPROC, gllabelobjectext); \
HandleUnsupported(PFNGLGETOBJECTLABELEXTPROC, glgetobjectlabelext); \
HandleUnsupported(PFNGLINSERTEVENTMARKEREXTPROC, glinserteventmarkerext); \
HandleUnsupported(PFNGLPUSHGROUPMARKEREXTPROC, glpushgroupmarkerext); \
HandleUnsupported(PFNGLPOPGROUPMARKEREXTPROC, glpopgroupmarkerext); \
HandleUnsupported(PFNGLMATRIXLOADFEXTPROC, glmatrixloadfext); \
HandleUnsupported(PFNGLMATRIXLOADDEXTPROC, glmatrixloaddext); \
HandleUnsupported(PFNGLMATRIXMULTFEXTPROC, glmatrixmultfext); \
@@ -4283,7 +4282,6 @@
HandleUnsupported(PFNGLPOINTPARAMETERFEXTPROC, glpointparameterfext); \
HandleUnsupported(PFNGLPOINTPARAMETERFVEXTPROC, glpointparameterfvext); \
HandleUnsupported(PFNGLPOLYGONOFFSETEXTPROC, glpolygonoffsetext); \
HandleUnsupported(PFNGLRASTERSAMPLESEXTPROC, glrastersamplesext); \
HandleUnsupported(PFNGLSECONDARYCOLOR3BEXTPROC, glsecondarycolor3bext); \
HandleUnsupported(PFNGLSECONDARYCOLOR3BVEXTPROC, glsecondarycolor3bvext); \
HandleUnsupported(PFNGLSECONDARYCOLOR3DEXTPROC, glsecondarycolor3dext); \
+33
View File
@@ -74,6 +74,8 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl)
eGL_SAMPLE_ALPHA_TO_ONE,
eGL_SAMPLE_COVERAGE,
eGL_SAMPLE_MASK,
eGL_RASTER_MULTISAMPLE_EXT,
eGL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT,
eGL_STENCIL_TEST,
eGL_TEXTURE_CUBE_MAP_SEAMLESS,
eGL_BLEND_ADVANCED_COHERENT_KHR,
@@ -88,6 +90,13 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl)
Enabled[i] = true;
continue;
}
if((pnames[i] == eGL_RASTER_MULTISAMPLE_EXT || pnames[i] == eGL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT)
&& !ExtensionSupported[ExtensionSupported_EXT_raster_multisample])
{
Enabled[i] = false;
continue;
}
Enabled[i] = (m_Real->glIsEnabled(pnames[i]) == GL_TRUE);
}
@@ -279,6 +288,16 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl)
m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_VALUE, (GLint *)&SampleCoverage);
m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_INVERT, (GLint *)&boolread); SampleCoverageInvert = (boolread != 0);
m_Real->glGetFloatv(eGL_MIN_SAMPLE_SHADING_VALUE, &MinSampleShading);
if(ExtensionSupported[ExtensionSupported_EXT_raster_multisample])
m_Real->glGetIntegerv(eGL_RASTER_SAMPLES_EXT, (GLint *)&RasterSamples);
else
RasterSamples = 0;
if(ExtensionSupported[ExtensionSupported_EXT_raster_multisample])
m_Real->glGetIntegerv(eGL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT, (GLint *)&RasterFixed);
else
RasterFixed = false;
m_Real->glGetIntegerv(eGL_LOGIC_OP_MODE, (GLint *)&LogicOp);
@@ -347,6 +366,8 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl)
eGL_SAMPLE_ALPHA_TO_ONE,
eGL_SAMPLE_COVERAGE,
eGL_SAMPLE_MASK,
eGL_RASTER_MULTISAMPLE_EXT,
eGL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT,
eGL_STENCIL_TEST,
eGL_TEXTURE_CUBE_MAP_SEAMLESS,
eGL_BLEND_ADVANCED_COHERENT_KHR,
@@ -358,6 +379,10 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl)
{
if(pnames[i] == eGL_BLEND_ADVANCED_COHERENT_KHR && !ExtensionSupported[ExtensionSupported_KHR_blend_equation_advanced_coherent])
continue;
if((pnames[i] == eGL_RASTER_MULTISAMPLE_EXT || pnames[i] == eGL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT)
&& !ExtensionSupported[ExtensionSupported_EXT_raster_multisample])
continue;
if(Enabled[i]) m_Real->glEnable(pnames[i]); else m_Real->glDisable(pnames[i]);
}
@@ -549,6 +574,9 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl)
m_Real->glSampleCoverage(SampleCoverage, SampleCoverageInvert ? GL_TRUE : GL_FALSE);
m_Real->glMinSampleShading(MinSampleShading);
if(ExtensionSupported[ExtensionSupported_EXT_raster_multisample])
m_Real->glRasterSamplesEXT(RasterSamples, RasterFixed);
m_Real->glLogicOp(LogicOp);
m_Real->glClearColor(ColorClearValue.red, ColorClearValue.green, ColorClearValue.blue, ColorClearValue.alpha);
@@ -624,6 +652,8 @@ void GLRenderState::Clear()
RDCEraseEl(StencilClearValue);
RDCEraseEl(ColorMasks);
RDCEraseEl(SampleMask);
RDCEraseEl(RasterSamples);
RDCEraseEl(RasterFixed);
RDCEraseEl(SampleCoverage);
RDCEraseEl(SampleCoverageInvert);
RDCEraseEl(MinSampleShading);
@@ -846,6 +876,9 @@ void GLRenderState::Serialise(LogState state, void *ctx, WrappedOpenGL *gl)
m_pSerialiser->Serialise("GL_SAMPLE_COVERAGE_INVERT", SampleCoverageInvert);
m_pSerialiser->Serialise("GL_MIN_SAMPLE_SHADING", MinSampleShading);
m_pSerialiser->Serialise("GL_RASTER_SAMPLES_EXT", RasterSamples);
m_pSerialiser->Serialise("GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT", RasterFixed);
m_pSerialiser->Serialise("GL_LOGIC_OP_MODE", LogicOp);
m_pSerialiser->Serialise<4>("GL_COLOR_CLEAR_VALUE", &ColorClearValue.red);
+4
View File
@@ -72,6 +72,8 @@ struct GLRenderState
eEnabled_SampleAlphaToOne,
eEnabled_SampleCoverage,
eEnabled_SampleMask,
eEnabled_RasterMultisample,
eEnabled_RasterMultisampleFixed,
//eEnabled_ScissorTest, handled below with scissor values
eEnabled_StencilTest,
eEnabled_TexCubeSeamless,
@@ -204,6 +206,8 @@ struct GLRenderState
uint8_t red, green, blue, alpha;
} ColorMasks[8];
uint32_t RasterSamples;
bool RasterFixed;
uint32_t SampleMask[2];
float SampleCoverage;
bool SampleCoverageInvert;
@@ -167,6 +167,39 @@ void WrappedOpenGL::glDebugMessageInsert(GLenum source, GLenum type, GLuint id,
m_Real.glDebugMessageInsert(source, type, id, severity, length, buf);
}
void WrappedOpenGL::glPushGroupMarkerEXT(GLsizei length, const GLchar *marker)
{
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(BEGIN_EVENT);
Serialise_glPushDebugGroup(eGL_NONE, 0, length, marker);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glPopGroupMarkerEXT()
{
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(END_EVENT);
Serialise_glPopDebugGroup();
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glInsertEventMarkerEXT(GLsizei length, const GLchar *marker)
{
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(SET_MARKER);
Serialise_glDebugMessageInsert(eGL_NONE, eGL_NONE, 0, eGL_NONE, length, marker);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glFrameTerminatorGREMEDY()
{
Present(NULL);
@@ -1133,6 +1133,32 @@ void WrappedOpenGL::glMinSampleShading(GLfloat value)
}
}
bool WrappedOpenGL::Serialise_glRasterSamplesEXT(GLuint samples, GLboolean fixedsamplelocations)
{
SERIALISE_ELEMENT(uint32_t, s, samples);
SERIALISE_ELEMENT(bool, f, fixedsamplelocations != 0);
if(m_State <= EXECUTING)
{
m_Real.glRasterSamplesEXT(s, f);
}
return true;
}
void WrappedOpenGL::glRasterSamplesEXT(GLuint samples, GLboolean fixedsamplelocations)
{
m_Real.glRasterSamplesEXT(samples, fixedsamplelocations);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(RASTER_SAMPLES);
Serialise_glRasterSamplesEXT(samples, fixedsamplelocations);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glPatchParameteri(GLenum pname, GLint value)
{
SERIALISE_ELEMENT(GLenum, PName, pname);