1a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs/* 2a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * Copyright 2012 Red Hat Inc. 3a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 4a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 5a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * copy of this software and associated documentation files (the "Software"), 6a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * to deal in the Software without restriction, including without limitation 7a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * and/or sell copies of the Software, and to permit persons to whom the 9a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * Software is furnished to do so, subject to the following conditions: 10a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 11a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * The above copyright notice and this permission notice shall be included in 12a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * all copies or substantial portions of the Software. 13a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 14a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * SOFTWARE. 21a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 22a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * Authors: Ben Skeggs 23a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * 24a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs */ 25a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 26a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include "util/u_inlines.h" 27a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 28a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include "nouveau/nv_object.xml.h" 29a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include "nv30-40_3d.xml.h" 30a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include "nv30_context.h" 31a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs#include "nv30_format.h" 32a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 33a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsvoid 34a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsnv30_fragtex_validate(struct nv30_context *nv30) 35a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 36a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct pipe_screen *pscreen = &nv30->screen->base.base; 37a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_object *eng3d = nv30->screen->eng3d; 38a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nouveau_pushbuf *push = nv30->base.pushbuf; 39a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned dirty = nv30->fragprog.dirty_samplers; 40a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 41a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs while (dirty) { 42a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned unit = ffs(dirty) - 1; 43a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv30_sampler_view *sv = (void *)nv30->fragprog.textures[unit]; 44a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv30_sampler_state *ss = nv30->fragprog.samplers[unit]; 45a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 46a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_RESET(push, BUFCTX_FRAGTEX(unit)); 47a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 48a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss && sv) { 49a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs const struct nv30_texfmt *fmt = nv30_texfmt(pscreen, sv->pipe.format); 50a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct pipe_resource *pt = sv->pipe.texture; 51a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv30_miptree *mt = nv30_miptree(pt); 52a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned min_lod, max_lod; 53a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs u32 filter = sv->filt | (ss->filt & sv->filt_mask); 54a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs u32 format = sv->fmt | ss->fmt; 55a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs u32 enable = ss->en; 56a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 57a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs /* handle base_level when not using a mip filter, min/max level 58a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * is unfortunately ignored by the hardware otherwise 59a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs */ 60a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.min_mip_filter == PIPE_TEX_MIPFILTER_NONE) { 61a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (sv->base_lod) 62a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs filter += 0x00020000; /* N/L -> NMN/LMN */ 63a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs max_lod = sv->base_lod; 64a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs min_lod = sv->base_lod; 65a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 66a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs max_lod = MIN2(ss->max_lod + sv->base_lod, sv->high_lod); 67a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs min_lod = MIN2(ss->min_lod + sv->base_lod, max_lod); 68a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 69a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 70a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (eng3d->oclass >= NV40_3D_CLASS) { 71a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs /* this is a tad stupid of the hardware, but there's no non-rcomp 72a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * z16/z24 texture formats to be had, we have to suffer and lose 73a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * some precision to handle this case. 74a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs */ 75a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.compare_mode != PIPE_TEX_COMPARE_R_TO_TEXTURE) { 76a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (fmt->nv40 == NV40_3D_TEX_FORMAT_FORMAT_Z16) 77a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV40_3D_TEX_FORMAT_FORMAT_A8L8; 78a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 79a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (fmt->nv40 == NV40_3D_TEX_FORMAT_FORMAT_Z24) 80a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV40_3D_TEX_FORMAT_FORMAT_A16L16; 81a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 82a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv40; 83a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 84a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv40; 85a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 86a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 87a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs enable |= (min_lod << 19) | (max_lod << 7); 88a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs enable |= NV40_3D_TEX_ENABLE_ENABLE; 89a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 90a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs BEGIN_NV04(push, NV40_3D(TEX_SIZE1(unit)), 1); 91a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, sv->npot_size1); 92a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 93a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs /* this is a tad stupid of the hardware, but there's no non-rcomp 94a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * z16/z24 texture formats to be had, we have to suffer and lose 95a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs * some precision to handle this case. 96a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs */ 97a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.compare_mode != PIPE_TEX_COMPARE_R_TO_TEXTURE) { 98a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (fmt->nv30 == NV30_3D_TEX_FORMAT_FORMAT_Z16) { 99a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.normalized_coords) 100a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV30_3D_TEX_FORMAT_FORMAT_A8L8; 101a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 102a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV30_3D_TEX_FORMAT_FORMAT_A8L8_RECT; 103a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else 104a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (fmt->nv30 == NV30_3D_TEX_FORMAT_FORMAT_Z24) { 105a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.normalized_coords) 106a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV30_3D_TEX_FORMAT_FORMAT_HILO16; 107a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 108a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= NV30_3D_TEX_FORMAT_FORMAT_HILO16_RECT; 109a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 110a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.normalized_coords) 111a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv30; 112a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 113a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv30_rect; 114a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 115a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 116a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs if (ss->pipe.normalized_coords) 117a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv30; 118a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs else 119a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs format |= fmt->nv30_rect; 120a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 121a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 122a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs enable |= NV30_3D_TEX_ENABLE_ENABLE; 123a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs enable |= (min_lod << 18) | (max_lod << 6); 124a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 125a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 126a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs BEGIN_NV04(push, NV30_3D(TEX_OFFSET(unit)), 8); 127a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_MTHDl(push, NV30_3D(TEX_OFFSET(unit)), BUFCTX_FRAGTEX(unit), 128a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs mt->base.bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); 129a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_MTHDs(push, NV30_3D(TEX_FORMAT(unit)), BUFCTX_FRAGTEX(unit), 130a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs mt->base.bo, format, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD, 131a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs NV30_3D_TEX_FORMAT_DMA0, 132a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs NV30_3D_TEX_FORMAT_DMA1); 133a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, sv->wrap | (ss->wrap & sv->wrap_mask)); 134a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, enable); 135a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, sv->swz); 136a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, filter); 137a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, sv->npot_size0); 138a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, ss->bcol); 139a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs BEGIN_NV04(push, NV30_3D(TEX_FILTER_OPTIMIZATION(unit)), 1); 140a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, nv30->config.filter); 141a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } else { 142a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs BEGIN_NV04(push, NV30_3D(TEX_ENABLE(unit)), 1); 143a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs PUSH_DATA (push, 0); 144a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 145a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 146a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs dirty &= ~(1 << unit); 147a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 148a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 149a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.dirty_samplers = 0; 150a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 151a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 152a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsstatic void 153a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsnv30_fragtex_sampler_states_bind(struct pipe_context *pipe, 154a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned nr, void **hwcso) 155a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 156a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv30_context *nv30 = nv30_context(pipe); 157a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned i; 158a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 159a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs for (i = 0; i < nr; i++) { 160a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.samplers[i] = hwcso[i]; 161a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.dirty_samplers |= (1 << i); 162a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 163a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 164a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs for (; i < nv30->fragprog.num_samplers; i++) { 165a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.samplers[i] = NULL; 166a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.dirty_samplers |= (1 << i); 167a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 168a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 169a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.num_samplers = nr; 170a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->dirty |= NV30_NEW_FRAGTEX; 171a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 172a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 173a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 174a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsstatic void 175a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsnv30_fragtex_set_sampler_views(struct pipe_context *pipe, unsigned nr, 176a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct pipe_sampler_view **views) 177a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 178a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs struct nv30_context *nv30 = nv30_context(pipe); 179a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs unsigned i; 180a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 181a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs for (i = 0; i < nr; i++) { 182a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_reset(nv30->bufctx, BUFCTX_FRAGTEX(i)); 183a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs pipe_sampler_view_reference(&nv30->fragprog.textures[i], views[i]); 184a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.dirty_samplers |= (1 << i); 185a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 186a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 187a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs for (; i < nv30->fragprog.num_textures; i++) { 188a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nouveau_bufctx_reset(nv30->bufctx, BUFCTX_FRAGTEX(i)); 189a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs pipe_sampler_view_reference(&nv30->fragprog.textures[i], NULL); 190a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.dirty_samplers |= (1 << i); 191a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs } 192a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 193a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->fragprog.num_textures = nr; 194a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs nv30->dirty |= NV30_NEW_FRAGTEX; 195a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 196a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs 197a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsvoid 198a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggsnv30_fragtex_init(struct pipe_context *pipe) 199a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs{ 200a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs pipe->bind_fragment_sampler_states = nv30_fragtex_sampler_states_bind; 201a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs pipe->set_fragment_sampler_views = nv30_fragtex_set_sampler_views; 202a2fc42b899de22273c1df96091bfb5c636075cb0Ben Skeggs} 203