1 #include "nv04_context.h"
3 static INLINE
int log2i(int i
)
32 NV04_DX5_TEXTURED_TRIANGLE_FORMAT_COLOR_##tf, \
35 struct nv04_texture_format
{
40 static struct nv04_texture_format
41 nv04_texture_formats
[] = {
42 _(A8R8G8B8_UNORM
, A8R8G8B8
),
43 _(X8R8G8B8_UNORM
, X8R8G8B8
),
44 _(A1R5G5B5_UNORM
, A1R5G5B5
),
45 _(A4R4G4B4_UNORM
, A4R4G4B4
),
51 nv04_fragtex_format(uint pipe_format
)
53 struct nv04_texture_format
*tf
= nv04_texture_formats
;
56 for (i
=0; i
< sizeof(nv04_texture_formats
)/sizeof(nv04_texture_formats
[0]); i
++) {
57 if (tf
->pipe
== pipe_format
)
62 NOUVEAU_ERR("unknown texture format %s\n", pf_name(pipe_format
));
68 nv04_fragtex_build(struct nv04_context
*nv04
, int unit
)
70 struct nv04_miptree
*nv04mt
= nv04
->tex_miptree
[unit
];
71 struct pipe_texture
*pt
= &nv04mt
->base
;
77 NOUVEAU_ERR("Unknown target %d\n", pt
->target
);
81 nv04
->fragtex
.format
= NV04_DX5_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_CORNER
82 | NV04_DX5_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_CORNER
83 | nv04_fragtex_format(pt
->format
)
84 | ( (pt
->last_level
+ 1) << NV04_DX5_TEXTURED_TRIANGLE_FORMAT_MIPMAP_LEVELS_SHIFT
)
85 | ( log2i(pt
->width
[0]) << NV04_DX5_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_U_SHIFT
)
86 | ( log2i(pt
->height
[0]) << NV04_DX5_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_V_SHIFT
)
87 | NV04_DX5_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_EDGE
88 | NV04_DX5_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_EDGE
94 nv04_fragtex_bind(struct nv04_context
*nv04
)
96 nv04_fragtex_build(nv04
, 0);