5 nvfx_tex_wrap_mode(unsigned wrap
) {
9 case PIPE_TEX_WRAP_REPEAT
:
10 ret
= NV34TCL_TX_WRAP_S_REPEAT
;
12 case PIPE_TEX_WRAP_MIRROR_REPEAT
:
13 ret
= NV34TCL_TX_WRAP_S_MIRRORED_REPEAT
;
15 case PIPE_TEX_WRAP_CLAMP_TO_EDGE
:
16 ret
= NV34TCL_TX_WRAP_S_CLAMP_TO_EDGE
;
18 case PIPE_TEX_WRAP_CLAMP_TO_BORDER
:
19 ret
= NV34TCL_TX_WRAP_S_CLAMP_TO_BORDER
;
21 case PIPE_TEX_WRAP_CLAMP
:
22 ret
= NV34TCL_TX_WRAP_S_CLAMP
;
24 case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE
:
25 ret
= NV40TCL_TEX_WRAP_S_MIRROR_CLAMP_TO_EDGE
;
27 case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER
:
28 ret
= NV40TCL_TEX_WRAP_S_MIRROR_CLAMP_TO_BORDER
;
30 case PIPE_TEX_WRAP_MIRROR_CLAMP
:
31 ret
= NV40TCL_TEX_WRAP_S_MIRROR_CLAMP
;
34 NOUVEAU_ERR("unknown wrap mode: %d\n", wrap
);
35 ret
= NV34TCL_TX_WRAP_S_REPEAT
;
39 return ret
>> NV34TCL_TX_WRAP_S_SHIFT
;
42 static inline unsigned
43 nvfx_tex_wrap_compare_mode(const struct pipe_sampler_state
* cso
)
45 if (cso
->compare_mode
== PIPE_TEX_COMPARE_R_TO_TEXTURE
) {
46 switch (cso
->compare_func
) {
48 return NV34TCL_TX_WRAP_RCOMP_NEVER
;
49 case PIPE_FUNC_GREATER
:
50 return NV34TCL_TX_WRAP_RCOMP_GREATER
;
52 return NV34TCL_TX_WRAP_RCOMP_EQUAL
;
53 case PIPE_FUNC_GEQUAL
:
54 return NV34TCL_TX_WRAP_RCOMP_GEQUAL
;
56 return NV34TCL_TX_WRAP_RCOMP_LESS
;
57 case PIPE_FUNC_NOTEQUAL
:
58 return NV34TCL_TX_WRAP_RCOMP_NOTEQUAL
;
59 case PIPE_FUNC_LEQUAL
:
60 return NV34TCL_TX_WRAP_RCOMP_LEQUAL
;
61 case PIPE_FUNC_ALWAYS
:
62 return NV34TCL_TX_WRAP_RCOMP_ALWAYS
;
70 static inline unsigned nvfx_tex_filter(const struct pipe_sampler_state
* cso
)
73 switch (cso
->mag_img_filter
) {
74 case PIPE_TEX_FILTER_LINEAR
:
75 filter
|= NV34TCL_TX_FILTER_MAGNIFY_LINEAR
;
77 case PIPE_TEX_FILTER_NEAREST
:
79 filter
|= NV34TCL_TX_FILTER_MAGNIFY_NEAREST
;
83 switch (cso
->min_img_filter
) {
84 case PIPE_TEX_FILTER_LINEAR
:
85 switch (cso
->min_mip_filter
) {
86 case PIPE_TEX_MIPFILTER_NEAREST
:
87 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST
;
89 case PIPE_TEX_MIPFILTER_LINEAR
:
90 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR
;
92 case PIPE_TEX_MIPFILTER_NONE
:
94 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR
;
98 case PIPE_TEX_FILTER_NEAREST
:
100 switch (cso
->min_mip_filter
) {
101 case PIPE_TEX_MIPFILTER_NEAREST
:
102 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST
;
104 case PIPE_TEX_MIPFILTER_LINEAR
:
105 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR
;
107 case PIPE_TEX_MIPFILTER_NONE
:
109 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST
;
117 static inline unsigned nvfx_tex_border_color(const float* border_color
)
119 return ((float_to_ubyte(border_color
[3]) << 24) |
120 (float_to_ubyte(border_color
[0]) << 16) |
121 (float_to_ubyte(border_color
[1]) << 8) |
122 (float_to_ubyte(border_color
[2]) << 0));
125 struct nvfx_sampler_state
{
133 #endif /* NVFX_TEX_H_ */