summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/nv40
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/pipe/nv40')
-rw-r--r--src/mesa/pipe/nv40/nv40_context.c5
-rw-r--r--src/mesa/pipe/nv40/nv40_state.c31
-rw-r--r--src/mesa/pipe/nv40/nv40_state_tex.c5
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),