Implement glDepthRangeIndexeddNV
This commit is contained in:
		
							
								
								
									
										3
									
								
								externals/glad/include/glad/glad.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								externals/glad/include/glad/glad.h
									
									
									
									
										vendored
									
									
								
							| @@ -5156,6 +5156,9 @@ GLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; | ||||
| typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); | ||||
| GLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; | ||||
| #define glDepthRangeIndexed glad_glDepthRangeIndexed | ||||
| typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC)(GLuint index, GLdouble n, GLdouble f); | ||||
| GLAPI PFNGLDEPTHRANGEINDEXEDDNVPROC glad_glDepthRangeIndexeddNV; | ||||
| #define glDepthRangeIndexeddNV glad_glDepthRangeIndexeddNV | ||||
| typedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data); | ||||
| GLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v; | ||||
| #define glGetFloati_v glad_glGetFloati_v | ||||
|   | ||||
							
								
								
									
										2
									
								
								externals/glad/src/glad.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/glad/src/glad.c
									
									
									
									
										vendored
									
									
								
							| @@ -1044,6 +1044,7 @@ PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; | ||||
| PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; | ||||
| PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL; | ||||
| PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL; | ||||
| PFNGLDEPTHRANGEINDEXEDDNVPROC glad_glDepthRangeIndexeddNV = NULL; | ||||
| PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL; | ||||
| PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; | ||||
| PFNGLDISABLEPROC glad_glDisable = NULL; | ||||
| @@ -7971,6 +7972,7 @@ static void load_GL_NV_depth_buffer_float(GLADloadproc load) { | ||||
| 	glad_glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)load("glDepthRangedNV"); | ||||
| 	glad_glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)load("glClearDepthdNV"); | ||||
| 	glad_glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)load("glDepthBoundsdNV"); | ||||
| 	glad_glDepthRangeIndexeddNV = (PFNGLDEPTHRANGEINDEXEDDNVPROC)load("glDepthRangeIndexeddNV"); | ||||
| } | ||||
| static void load_GL_NV_draw_texture(GLADloadproc load) { | ||||
| 	if(!GLAD_GL_NV_draw_texture) return; | ||||
|   | ||||
| @@ -239,6 +239,7 @@ Device::Device() { | ||||
|     has_nv_viewport_array2 = GLAD_GL_NV_viewport_array2; | ||||
|     has_vertex_buffer_unified_memory = GLAD_GL_NV_vertex_buffer_unified_memory; | ||||
|     has_debugging_tool_attached = IsDebugToolAttached(extensions); | ||||
|     has_depth_buffer_float = HasExtension(extensions, "GL_NV_depth_buffer_float"); | ||||
|  | ||||
|     // At the moment of writing this, only Nvidia's driver optimizes BufferSubData on exclusive | ||||
|     // uniform buffers as "push constants" | ||||
| @@ -275,6 +276,7 @@ Device::Device(std::nullptr_t) { | ||||
|     has_image_load_formatted = true; | ||||
|     has_texture_shadow_lod = true; | ||||
|     has_variable_aoffi = true; | ||||
|     has_depth_buffer_float = true; | ||||
| } | ||||
|  | ||||
| bool Device::TestVariableAoffi() { | ||||
|   | ||||
| @@ -122,6 +122,10 @@ public: | ||||
|         return use_driver_cache; | ||||
|     } | ||||
|  | ||||
|     bool HasDepthBufferFloat() const { | ||||
|         return has_depth_buffer_float; | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     static bool TestVariableAoffi(); | ||||
|     static bool TestPreciseBug(); | ||||
| @@ -150,6 +154,7 @@ private: | ||||
|     bool use_assembly_shaders{}; | ||||
|     bool use_asynchronous_shaders{}; | ||||
|     bool use_driver_cache{}; | ||||
|     bool has_depth_buffer_float{}; | ||||
| }; | ||||
|  | ||||
| } // namespace OpenGL | ||||
|   | ||||
| @@ -889,7 +889,11 @@ void RasterizerOpenGL::SyncViewport() { | ||||
|             const GLdouble reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne; | ||||
|             const GLdouble near_depth = src.translate_z - src.scale_z * reduce_z; | ||||
|             const GLdouble far_depth = src.translate_z + src.scale_z; | ||||
|             glDepthRangeIndexed(static_cast<GLuint>(i), near_depth, far_depth); | ||||
|             if (device.HasDepthBufferFloat()) { | ||||
|                 glDepthRangeIndexeddNV(static_cast<GLuint>(i), near_depth, far_depth); | ||||
|             } else { | ||||
|                 glDepthRangeIndexed(static_cast<GLuint>(i), near_depth, far_depth); | ||||
|             } | ||||
|  | ||||
|             if (!GLAD_GL_NV_viewport_swizzle) { | ||||
|                 continue; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kelebek1
					Kelebek1