Merge commit 'origin/master' into gallium-sampler-view
[mesa.git] / src / gallium / drivers / nvfx / nvfx_state.c
index 88a9d01c509b3b56d179ba54a784f611662f5fd4..32a81997528ddc2789d7ea7f2bf3f12f0b2ff7fe 100644 (file)
@@ -137,19 +137,24 @@ nvfx_sampler_state_delete(struct pipe_context *pipe, void *hwcso)
 }
 
 static void
-nvfx_set_sampler_texture(struct pipe_context *pipe, unsigned nr,
-                        struct pipe_texture **miptree)
+nvfx_set_fragment_sampler_views(struct pipe_context *pipe,
+                               unsigned nr,
+                               struct pipe_sampler_view **views)
 {
        struct nvfx_context *nvfx = nvfx_context(pipe);
        unsigned unit;
 
        for (unit = 0; unit < nr; unit++) {
+               pipe_sampler_view_reference(&nv30->fragment_sampler_views[unit],
+                                            views[unit]);
                pipe_texture_reference((struct pipe_texture **)
                                       &nvfx->tex_miptree[unit], miptree[unit]);
                nvfx->dirty_samplers |= (1 << unit);
        }
 
        for (unit = nr; unit < nvfx->nr_textures; unit++) {
+               pipe_sampler_view_reference(&nv30->fragment_sampler_views[unit],
+                                            NULL);
                pipe_texture_reference((struct pipe_texture **)
                                       &nvfx->tex_miptree[unit], NULL);
                nvfx->dirty_samplers |= (1 << unit);
@@ -159,6 +164,34 @@ nvfx_set_sampler_texture(struct pipe_context *pipe, unsigned nr,
        nvfx->dirty |= NVFX_NEW_SAMPLER;
 }
 
+
+static struct pipe_sampler_view *
+nv30_create_sampler_view(struct pipe_context *pipe,
+                        struct pipe_texture *texture,
+                        const struct pipe_sampler_view *templ)
+{
+       struct pipe_sampler_view *view = CALLOC_STRUCT(pipe_sampler_view);
+
+       if (view) {
+               *view = *templ;
+               view->reference.count = 1;
+               view->texture = NULL;
+               pipe_texture_reference(&view->texture, texture);
+               view->context = pipe;
+       }
+
+       return view;
+}
+
+
+static void
+nv30_sampler_view_destroy(struct pipe_context *pipe,
+                         struct pipe_sampler_view *view)
+{
+       pipe_texture_reference(&view->texture, NULL);
+       FREE(view);
+}
+
 static void *
 nvfx_rasterizer_state_create(struct pipe_context *pipe,
                             const struct pipe_rasterizer_state *cso)