diff options
-rw-r--r-- | src/mesa/pipe/nv40/nv40_context.c | 5 | ||||
-rw-r--r-- | src/mesa/pipe/nv40/nv40_state.c | 31 | ||||
-rw-r--r-- | src/mesa/pipe/nv40/nv40_state_tex.c | 5 |
3 files changed, 40 insertions, 1 deletions
diff --git a/src/mesa/pipe/nv40/nv40_context.c b/src/mesa/pipe/nv40/nv40_context.c index 6d12312d51..b1358a8cfa 100644 --- a/src/mesa/pipe/nv40/nv40_context.c +++ b/src/mesa/pipe/nv40/nv40_context.c @@ -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: diff --git a/src/mesa/pipe/nv40/nv40_state.c b/src/mesa/pipe/nv40/nv40_state.c index e491579483..1d4cbb454d 100644 --- a/src/mesa/pipe/nv40/nv40_state.c +++ b/src/mesa/pipe/nv40/nv40_state.c @@ -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) | diff --git a/src/mesa/pipe/nv40/nv40_state_tex.c b/src/mesa/pipe/nv40/nv40_state_tex.c index 30462a2a3d..05c136fcc1 100644 --- a/src/mesa/pipe/nv40/nv40_state_tex.c +++ b/src/mesa/pipe/nv40/nv40_state_tex.c @@ -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), |