[Mesa-dev] [PATCH 4/4] mesa: Add support for NV_depth_buffer_float.
Mathias.Froehlich at gmx.net
Mathias.Froehlich at gmx.net
Sun Sep 14 07:07:39 PDT 2014
From: Mathias Fröhlich <Mathias.Froehlich at gmx.net>
This is mostly support for the unclamped versions of
glDepthRangedNV, glClearDepthdNV and glDepthBoundsdNV.
Note that OpenGL 4.2 introduced that the traditonal
glDepthRange functions may no longer clamp to [0, 1],
but OpenGL 4.3 already revoked this behavior to clamp
the arguments.
Signed-off-by: Mathias Froehlich <Mathias.Froehlich at web.de>
---
docs/relnotes/10.3.html | 1 +
src/mapi/glapi/gen/NV_depth_buffer_float.xml | 32 +++++++++++++
src/mapi/glapi/gen/gl_API.xml | 2 +
src/mesa/drivers/common/meta.c | 3 +-
src/mesa/main/attrib.c | 4 +-
src/mesa/main/depth.c | 16 +++++++
src/mesa/main/depth.h | 6 +++
src/mesa/main/dlist.c | 67 ++++++++++++++++++++++++++++
src/mesa/main/extensions.c | 1 +
src/mesa/main/fbobject.c | 5 +++
src/mesa/main/get.c | 15 +++++++
src/mesa/main/get_hash_params.py | 3 ++
src/mesa/main/glformats.c | 9 +++-
src/mesa/main/mtypes.h | 1 +
src/mesa/main/tests/dispatch_sanity.cpp | 5 +++
src/mesa/main/texformat.c | 2 +
src/mesa/main/teximage.c | 2 +
src/mesa/main/viewport.c | 13 ++++++
src/mesa/main/viewport.h | 3 ++
src/mesa/state_tracker/st_extensions.c | 1 +
src/mesa/state_tracker/st_format.c | 8 ++++
21 files changed, 195 insertions(+), 4 deletions(-)
create mode 100644 src/mapi/glapi/gen/NV_depth_buffer_float.xml
diff --git a/docs/relnotes/10.3.html b/docs/relnotes/10.3.html
index fa4ea23..702f4b6 100644
--- a/docs/relnotes/10.3.html
+++ b/docs/relnotes/10.3.html
@@ -65,6 +65,7 @@ Note: some of the new features are only available with certain drivers.
<li>GL_ARB_texture_query_lod on r600, radeonsi</li>
<li>GL_ARB_viewport_array on nvc0</li>
<li>GL_AMD_vertex_shader_viewport_index on i965/gen7+, r600</li>
+<li>GL_NV_depth_buffer_float on softpipe, llvmpipe</li>
<li>GL_OES_compressed_ETC1_RGB8_texture on nv30, nv50, nvc0, r300, r600, radeonsi, softpipe, llvmpipe</li>
<li>GLX_MESA_query_renderer on nv30, nv50, nvc0, r300, r600, radeonsi, softpipe, llvmpipe</li>
<li>A new software rasterizer driver (kms_swrast_dri.so) that works with
diff --git a/src/mapi/glapi/gen/NV_depth_buffer_float.xml b/src/mapi/glapi/gen/NV_depth_buffer_float.xml
new file mode 100644
index 0000000..289538cf
--- /dev/null
+++ b/src/mapi/glapi/gen/NV_depth_buffer_float.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+<OpenGLAPI>
+
+<category name="GL_NV_depth_buffer_float" number="334">
+
+ <enum name="DEPTH_COMPONENT32F_NV" value = "0x8DAB"/>
+ <enum name="DEPTH32F_STENCIL8_NV" value = "0x8DAC"/>
+
+ <!-- Is the same than FLOAT_32_UNSIGNED_INT_24_8_REV. -->
+ <enum name="FLOAT_32_UNSIGNED_INT_24_8_REV_NV" value = "0x8DAD"/>
+
+ <enum name="DEPTH_BUFFER_FLOAT_MODE_NV" value = "0x8DAF"/>
+
+ <function name="DepthRangedNV" offset="assign">
+ <param name="n" type="GLdouble"/>
+ <param name="f" type="GLdouble"/>
+ </function>
+ <function name="ClearDepthdNV" offset="assign">
+ <param name="d" type="GLdouble"/>
+ </function>
+ <function name="DepthBoundsdNV" offset="assign">
+ <param name="zmin" type="GLdouble"/>
+ <param name="zmax" type="GLdouble"/>
+ </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 73f2f75..d504faf 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -13027,6 +13027,8 @@
<xi:include href="NV_vdpau_interop.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="NV_depth_buffer_float.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
<xi:include href="GL4x.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</OpenGLAPI>
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 7a8e627..d165f12 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -1112,7 +1112,8 @@ _mesa_meta_end(struct gl_context *ctx)
_mesa_set_viewport(ctx, 0, save->ViewportX, save->ViewportY,
save->ViewportW, save->ViewportH);
}
- _mesa_DepthRange(save->DepthNear, save->DepthFar);
+ /* Need to call ...NV since this is guaranteed not to clamp to [0,1] */
+ _mesa_DepthRangedNV(save->DepthNear, save->DepthFar);
}
if (state & MESA_META_CLAMP_FRAGMENT_COLOR &&
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 97115a1..4930afd 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -1072,7 +1072,9 @@ _mesa_PopAttrib(void)
const struct gl_depthbuffer_attrib *depth;
depth = (const struct gl_depthbuffer_attrib *) attr->data;
_mesa_DepthFunc(depth->Func);
- _mesa_ClearDepth(depth->Clear);
+ /* The ...NV variant is guaranteed not to clamp */
+ /* what was not clamped before. */
+ _mesa_ClearDepthdNV(depth->Clear);
_mesa_set_enable(ctx, GL_DEPTH_TEST, depth->Test);
_mesa_DepthMask(depth->Mask);
}
diff --git a/src/mesa/main/depth.c b/src/mesa/main/depth.c
index 8ae3cb6..f63dc01 100644
--- a/src/mesa/main/depth.c
+++ b/src/mesa/main/depth.c
@@ -91,6 +91,12 @@ _mesa_ClearDepthf( GLclampf depth )
set_clear_depth(ctx, "glClearDepthf", depth, true);
}
+void GLAPIENTRY
+_mesa_ClearDepthdNV( GLdouble depth )
+{
+ GET_CURRENT_CONTEXT(ctx);
+ set_clear_depth(ctx, "glClearDepthdNV", depth, false);
+}
void GLAPIENTRY
_mesa_DepthFunc( GLenum func )
@@ -162,6 +168,16 @@ _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
}
+/**
+ * Specified by the NV_depth_buffer_float extension.
+ */
+void GLAPIENTRY
+_mesa_DepthBoundsdNV( GLdouble zmin, GLdouble zmax )
+{
+ GET_CURRENT_CONTEXT(ctx);
+ set_depth_bounds(ctx, "glDepthBoundsdNV", zmin, zmax, false);
+}
+
/**********************************************************************/
/***** Initialization *****/
/**********************************************************************/
diff --git a/src/mesa/main/depth.h b/src/mesa/main/depth.h
index 5ff7a5e..f213012 100644
--- a/src/mesa/main/depth.h
+++ b/src/mesa/main/depth.h
@@ -44,6 +44,9 @@ extern void GLAPIENTRY
_mesa_ClearDepthf( GLclampf depth );
extern void GLAPIENTRY
+_mesa_ClearDepthdNV( GLdouble depth );
+
+extern void GLAPIENTRY
_mesa_DepthFunc( GLenum func );
extern void GLAPIENTRY
@@ -52,6 +55,9 @@ _mesa_DepthMask( GLboolean flag );
extern void GLAPIENTRY
_mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax );
+extern void GLAPIENTRY
+_mesa_DepthBoundsdNV( GLdouble zmin, GLdouble zmax );
+
extern void
_mesa_init_depth( struct gl_context * ctx );
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 5c7160d..2e98045 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -40,6 +40,7 @@
#include "bufferobj.h"
#include "arrayobj.h"
#include "context.h"
+#include "depth.h"
#include "dlist.h"
#include "enums.h"
#include "eval.h"
@@ -308,6 +309,10 @@ typedef enum
OPCODE_ACTIVE_STENCIL_FACE_EXT,
/* GL_EXT_depth_bounds_test */
OPCODE_DEPTH_BOUNDS_EXT,
+ /* GL_NV_depth_buffer_float */
+ OPCODE_DEPTH_RANGE_NV,
+ OPCODE_CLEAR_DEPTH_NV,
+ OPCODE_DEPTH_BOUNDS_NV,
/* GL_ARB_vertex/fragment_program */
OPCODE_PROGRAM_STRING_ARB,
OPCODE_PROGRAM_ENV_PARAMETER_ARB,
@@ -4843,6 +4848,54 @@ save_DepthBoundsEXT(GLclampd zmin, GLclampd zmax)
}
+/* NV_depth_buffer_float */
+static void GLAPIENTRY
+save_DepthRangedNV(GLdouble near, GLdouble far)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_DEPTH_RANGE_NV, 2);
+ if (n) {
+ n[1].f = near;
+ n[2].f = far;
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_DepthRangedNV(ctx->Exec, (near, far));
+ }
+}
+
+static void GLAPIENTRY
+save_ClearDepthdNV(GLdouble d)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_CLEAR_DEPTH_NV, 1);
+ if (n) {
+ n[1].f = d;
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_ClearDepthdNV(ctx->Exec, (d));
+ }
+}
+
+static void GLAPIENTRY
+save_DepthBoundsdNV(GLdouble zmin, GLdouble zmax)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_DEPTH_BOUNDS_NV, 2);
+ if (n) {
+ n[1].f = zmin;
+ n[2].f = zmax;
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_DepthBoundsdNV(ctx->Exec, (zmin, zmax));
+ }
+}
+
static void GLAPIENTRY
save_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
@@ -8317,6 +8370,15 @@ execute_list(struct gl_context *ctx, GLuint list)
case OPCODE_DEPTH_BOUNDS_EXT:
CALL_DepthBoundsEXT(ctx->Exec, (n[1].f, n[2].f));
break;
+ case OPCODE_DEPTH_RANGE_NV:
+ CALL_DepthRangedNV(ctx->Exec, (n[1].f, n[2].f));
+ break;
+ case OPCODE_CLEAR_DEPTH_NV:
+ CALL_ClearDepthdNV(ctx->Exec, (n[1].f));
+ break;
+ case OPCODE_DEPTH_BOUNDS_NV:
+ CALL_DepthBoundsdNV(ctx->Exec, (n[1].f, n[2].f));
+ break;
case OPCODE_PROGRAM_STRING_ARB:
CALL_ProgramStringARB(ctx->Exec,
(n[1].e, n[2].e, n[3].i,
@@ -9460,6 +9522,11 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
/* ???. GL_EXT_depth_bounds_test */
SET_DepthBoundsEXT(table, save_DepthBoundsEXT);
+ /* ???. GL_NV_depth_buffer_float */
+ SET_DepthRangedNV(table, save_DepthRangedNV);
+ SET_ClearDepthdNV(table, save_ClearDepthdNV);
+ SET_DepthBoundsdNV(table, save_DepthBoundsdNV);
+
/* ARB 1. GL_ARB_multitexture */
SET_ActiveTexture(table, save_ActiveTextureARB);
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 553c01e..6b912fb 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -353,6 +353,7 @@ static const struct extension extension_table[] = {
{ "GL_MESA_ycbcr_texture", o(MESA_ycbcr_texture), GL, 2002 },
{ "GL_NV_blend_square", o(dummy_true), GLL, 1999 },
{ "GL_NV_conditional_render", o(NV_conditional_render), GL, 2008 },
+ { "GL_NV_depth_buffer_float", o(NV_depth_buffer_float), GL, 2008 },
{ "GL_NV_depth_clamp", o(ARB_depth_clamp), GL, 2001 },
{ "GL_NV_draw_buffers", o(dummy_true), ES2, 2011 },
{ "GL_NV_fbo_color_attachments", o(dummy_true), ES2, 2010 },
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index ae3a418..43bfeae 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1480,6 +1480,11 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
|| (ctx->API == API_OPENGL_COMPAT &&
ctx->Extensions.ARB_depth_buffer_float)
? GL_DEPTH_STENCIL : 0;
+ case GL_DEPTH_COMPONENT32F_NV:
+ case GL_DEPTH32F_STENCIL8_NV:
+ return (ctx->API == API_OPENGL_COMPAT &&
+ ctx->Extensions.NV_depth_buffer_float)
+ ? GL_DEPTH_COMPONENT : 0;
case GL_RED:
case GL_R16:
return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_rg
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 0e2d8f6..13f773b 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -31,6 +31,7 @@
#include "errors.h"
#include "extensions.h"
#include "get.h"
+#include "glformats.h"
#include "macros.h"
#include "mtypes.h"
#include "state.h"
@@ -391,6 +392,7 @@ EXTRA_EXT(ARB_gpu_shader5);
EXTRA_EXT2(ARB_transform_feedback3, ARB_gpu_shader5);
EXTRA_EXT(INTEL_performance_query);
EXTRA_EXT(ARB_explicit_uniform_location);
+EXTRA_EXT(NV_depth_buffer_float);
static const int
extra_ARB_color_buffer_float_or_glcore[] = {
@@ -1019,6 +1021,19 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
v->value_int = 0;
}
break;
+ /* NV_depth_buffer_float */
+ case GL_DEPTH_BUFFER_FLOAT_MODE_NV:
+ {
+ /* Note: we only check the 0th color attachment. */
+ const struct gl_renderbuffer *rb =
+ ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
+ if (rb && _mesa_is_float_depth_format(rb->Format)) {
+ v->value_bool = 1;
+ } else {
+ v->value_bool = 0;
+ }
+ }
+ break;
}
}
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index aace8a5..898fda0 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -791,6 +791,9 @@ descriptor=[
[ "MIN_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5" ],
[ "MAX_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5" ],
[ "FRAGMENT_INTERPOLATION_OFFSET_BITS", "CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5" ],
+
+# GL_NV_depth_buffer_float
+ [ "DEPTH_BUFFER_FLOAT_MODE_NV", "LOC_CUSTOM, TYPE_BOOLEAN, 0, extra_NV_depth_buffer_float" ],
]},
# Enums restricted to OpenGL Core profile
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 16f7d6b..73804c9 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -901,6 +901,7 @@ _mesa_is_depth_format(GLenum format)
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32:
case GL_DEPTH_COMPONENT32F:
+ case GL_DEPTH_COMPONENT32F_NV:
return GL_TRUE;
default:
return GL_FALSE;
@@ -974,7 +975,9 @@ _mesa_is_depth_or_stencil_format(GLenum format)
case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT:
case GL_DEPTH_COMPONENT32F:
+ case GL_DEPTH_COMPONENT32F_NV:
case GL_DEPTH32F_STENCIL8:
+ case GL_DEPTH32F_STENCIL8_NV:
return GL_TRUE;
default:
return GL_FALSE;
@@ -2188,7 +2191,8 @@ _mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
break;
case GL_FLOAT:
- if (internalFormat != GL_DEPTH_COMPONENT32F)
+ if (internalFormat != GL_DEPTH_COMPONENT32F
+ && internalFormat != GL_DEPTH_COMPONENT32F_NV)
return GL_INVALID_OPERATION;
break;
@@ -2206,7 +2210,8 @@ _mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
break;
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
- if (internalFormat != GL_DEPTH32F_STENCIL8)
+ if (internalFormat != GL_DEPTH32F_STENCIL8
+ && internalFormat != GL_DEPTH32F_STENCIL8_NV)
return GL_INVALID_OPERATION;
break;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 0d50be8..e7b5784 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3779,6 +3779,7 @@ struct gl_extensions
GLboolean MESA_pack_invert;
GLboolean MESA_ycbcr_texture;
GLboolean NV_conditional_render;
+ GLboolean NV_depth_buffer_float;
GLboolean NV_fog_distance;
GLboolean NV_fragment_program_option;
GLboolean NV_point_sprite;
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 04fa86b..9bdc86c 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -951,6 +951,11 @@ const struct function gl_core_functions_possible[] = {
{ "glClearTexImage", 13, -1 },
{ "glClearTexSubImage", 13, -1 },
+ /* GL_NV_depth_buffer_float */
+ { "glDepthRangedNV", 20, -1 },
+ { "glClearDepthdNV", 20, -1 },
+ { "glDepthBoundsdNV", 20, -1 },
+
{ NULL, 0, -1 }
};
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index 6d3b805..6c22889 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -442,9 +442,11 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
break;
case GL_DEPTH_COMPONENT32F:
+ case GL_DEPTH_COMPONENT32F_NV:
ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32]);
return MESA_FORMAT_Z_FLOAT32;
case GL_DEPTH32F_STENCIL8:
+ case GL_DEPTH32F_STENCIL8_NV:
ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT]);
return MESA_FORMAT_Z32_FLOAT_S8X24_UINT;
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 647d28a..8d820af 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -448,8 +448,10 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
if (ctx->Extensions.ARB_depth_buffer_float) {
switch (internalFormat) {
case GL_DEPTH_COMPONENT32F:
+ case GL_DEPTH_COMPONENT32F_NV:
return GL_DEPTH_COMPONENT;
case GL_DEPTH32F_STENCIL8:
+ case GL_DEPTH32F_STENCIL8_NV:
return GL_DEPTH_STENCIL;
default:
; /* fallthrough */
diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c
index e86a77c..0712acb 100644
--- a/src/mesa/main/viewport.c
+++ b/src/mesa/main/viewport.c
@@ -332,6 +332,19 @@ _mesa_DepthRangef(GLclampf nearval, GLclampf farval)
_mesa_DepthRange(nearval, farval);
}
+void GLAPIENTRY
+_mesa_DepthRangedNV(GLdouble nearval, GLdouble farval)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ FLUSH_VERTICES(ctx, 0);
+
+ if (MESA_VERBOSE&VERBOSE_API)
+ _mesa_debug(ctx, "glDepthRangeNV %f %f\n", nearval, farval);
+
+ set_all_depth_range(ctx, nearval, farval, false);
+}
+
/**
* Update a range DepthRange values
*
diff --git a/src/mesa/main/viewport.h b/src/mesa/main/viewport.h
index 6324cab..dbbe814 100644
--- a/src/mesa/main/viewport.h
+++ b/src/mesa/main/viewport.h
@@ -55,6 +55,9 @@ extern void GLAPIENTRY
_mesa_DepthRangef(GLclampf nearval, GLclampf farval);
extern void GLAPIENTRY
+_mesa_DepthRangedNV(GLdouble nearval, GLdouble farval);
+
+extern void GLAPIENTRY
_mesa_DepthRangeArrayv(GLuint first, GLsizei count, const GLclampd * v);
extern void GLAPIENTRY
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index c7bc0ca..8521d04 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -451,6 +451,7 @@ void st_init_extensions(struct pipe_screen *screen,
{ o(ATI_separate_stencil), PIPE_CAP_TWO_SIDED_STENCIL },
{ o(ATI_texture_mirror_once), PIPE_CAP_TEXTURE_MIRROR_CLAMP },
{ o(NV_conditional_render), PIPE_CAP_CONDITIONAL_RENDER },
+ { o(NV_depth_buffer_float), PIPE_CAP_UNCLAMPED_DEPTH_VALUES },
{ o(NV_texture_barrier), PIPE_CAP_TEXTURE_BARRIER },
/* GL_NV_point_sprite is not supported by gallium because we don't
* support the GL_POINT_SPRITE_R_MODE_NV option. */
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index 531bc65..4446a17 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -1081,6 +1081,10 @@ static const struct format_mapping format_map[] = {
{ GL_DEPTH_COMPONENT32F, 0 },
{ PIPE_FORMAT_Z32_FLOAT, 0 }
},
+ {
+ { GL_DEPTH_COMPONENT32F_NV, 0 },
+ { PIPE_FORMAT_Z32_FLOAT, 0 }
+ },
/* stencil formats */
{
@@ -1101,6 +1105,10 @@ static const struct format_mapping format_map[] = {
{ GL_DEPTH32F_STENCIL8, 0 },
{ PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, 0 }
},
+ {
+ { GL_DEPTH32F_STENCIL8_NV, 0 },
+ { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, 0 }
+ },
/* sRGB formats */
{
--
1.9.3
More information about the mesa-dev
mailing list