diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index c4f1fac20..766e4c497 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -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 } diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 5661e4914..9a16c1722 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -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, diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index ffe0fac50..e213e4ef2 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -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; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 9f42f84d5..1c4043910 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -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)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 9afb2f9f3..3a6ad1c37 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -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 diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 2a1d2f9cf..a05f3aa1e 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -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); \ diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 042009bad..24372b199 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -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); diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index 360b9410c..a29f5ca12 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -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; diff --git a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp index 8f06077f0..2aa3d99af 100644 --- a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp @@ -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); diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 7f81d5dee..a94951e56 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -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);