nv40: depth textures
authorBen Skeggs <skeggsb@gmail.com>
Tue, 11 Dec 2007 03:53:37 +0000 (14:53 +1100)
committerBen Skeggs <skeggsb@gmail.com>
Tue, 11 Dec 2007 03:53:37 +0000 (14:53 +1100)
src/mesa/pipe/nv40/nv40_context.c
src/mesa/pipe/nv40/nv40_state.c
src/mesa/pipe/nv40/nv40_state_tex.c

index 6d12312d518569cec9c9075c8f0957d3ea6228a2..b1358a8cfa5e1b24a07121930b6d59616d07c712 100644 (file)
@@ -17,6 +17,7 @@ nv40_is_format_supported(struct pipe_context *pipe, enum pipe_format format,
                case PIPE_FORMAT_A8R8G8B8_UNORM:
                case PIPE_FORMAT_R5G6B5_UNORM: 
                case PIPE_FORMAT_Z24S8_UNORM:
+               case PIPE_FORMAT_Z16_UNORM:
                        return TRUE;
                default:
                        break;
@@ -32,6 +33,8 @@ nv40_is_format_supported(struct pipe_context *pipe, enum pipe_format format,
                case PIPE_FORMAT_U_A8:
                case PIPE_FORMAT_U_I8:
                case PIPE_FORMAT_U_A8_L8:
+               case PIPE_FORMAT_Z16_UNORM:
+               case PIPE_FORMAT_Z24S8_UNORM:
                        return TRUE;
                default:
                        break;
@@ -83,7 +86,7 @@ nv40_get_param(struct pipe_context *pipe, int param)
        case PIPE_CAP_OCCLUSION_QUERY:
                return 1;
        case PIPE_CAP_TEXTURE_SHADOW_MAP:
-               return 0;
+               return 1;
        case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
                return 13;
        case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
index e491579483070111154e7b3042a2b6e5395ce58b..1d4cbb454d458dc44aca842262bb008a652329f8 100644 (file)
@@ -244,6 +244,37 @@ nv40_sampler_state_create(struct pipe_context *pipe,
 
        ps->filt = filter;
 
+       if (cso->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) {
+               switch (cso->compare_func) {
+               case PIPE_FUNC_NEVER:
+                       ps->wrap |= (0x0 << 28);
+                       break;
+               case PIPE_FUNC_GREATER:
+                       ps->wrap |= (0x1 << 28);
+                       break;
+               case PIPE_FUNC_EQUAL:
+                       ps->wrap |= (0x2 << 28);
+                       break;
+               case PIPE_FUNC_GEQUAL:
+                       ps->wrap |= (0x3 << 28);
+                       break;
+               case PIPE_FUNC_LESS:
+                       ps->wrap |= (0x4 << 28);
+                       break;
+               case PIPE_FUNC_NOTEQUAL:
+                       ps->wrap |= (0x5 << 28);
+                       break;
+               case PIPE_FUNC_LEQUAL:
+                       ps->wrap |= (0x6 << 28);
+                       break;
+               case PIPE_FUNC_ALWAYS:
+                       ps->wrap |= (0x7 << 28);
+                       break;
+               default:
+                       break;
+               }
+       }
+
        ps->bcol = ((float_to_ubyte(cso->border_color[3]) << 24) |
                    (float_to_ubyte(cso->border_color[0]) << 16) |
                    (float_to_ubyte(cso->border_color[1]) <<  8) |
index 30462a2a3d6e6c970be45a86c5c0035911d255f8..05c136fcc19630853bd07d94256d3919872cc130 100644 (file)
@@ -12,6 +12,9 @@
    NV40TCL_TEX_SWIZZLE_S1_Z_##ts1z | NV40TCL_TEX_SWIZZLE_S1_W_##ts1w),         \
 }
 
+#define NV40TCL_TEX_FORMAT_FORMAT_Z16 0x1200
+#define NV40TCL_TEX_FORMAT_FORMAT_Z24 0x1000
+
 struct nv40_texture_format {
        boolean defined;
        uint    pipe;
@@ -29,6 +32,8 @@ nv40_texture_formats[] = {
        _(U_A8          , L8      , ZERO, ZERO, ZERO,   S1, X, X, X, X),
        _(U_I8          , L8      ,   S1,   S1,   S1,   S1, X, X, X, X),
        _(U_A8_L8       , A8L8    ,   S1,   S1,   S1,   S1, Z, W, X, Y),
+       _(Z16_UNORM     , Z16     ,   S1,   S1,   S1,  ONE, X, X, X, X),
+       _(Z24S8_UNORM   , Z24     ,   S1,   S1,   S1,  ONE, X, X, X, X),
 //     _(RGB_DXT1      , 0x86,   S1,   S1,   S1,  ONE, X, Y, Z, W, 0x00, 0x00),
 //     _(RGBA_DXT1     , 0x86,   S1,   S1,   S1,   S1, X, Y, Z, W, 0x00, 0x00),
 //     _(RGBA_DXT3     , 0x87,   S1,   S1,   S1,   S1, X, Y, Z, W, 0x00, 0x00),