diff options
author | Marek Olšák <[email protected]> | 2012-07-14 16:23:42 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-07-17 21:22:14 +0200 |
commit | ba48f47ebf7f017db0507b92a3ca83e404dc586c (patch) | |
tree | eb24a12069b2be51b56dc1fd20cc12a4b8f3834f /src/gallium/drivers/r600/r600_state.c | |
parent | d1ca16b2738644d17c10e736ca36981f69f5fa87 (diff) |
r600g: consolidate code for setting sampler views and fix bugs in the process
Issues fixed:
- set_vs_sampler_views for evergreen is now properly implemented.
- Added the missing inval_texture_cache call for evergreen.
- have_depth_texture was sometimes incorrectly set to false on evergreen even
if there were depth textures in other shader stages. To fix this, set it
to true once and never set it to false again. It's stupid, but it matches
the r600 code. The proper fix is left to another patch.
- Optimizaton: The sampler views which aren't changed aren't updated.
Diffstat (limited to 'src/gallium/drivers/r600/r600_state.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_state.c | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 0091fe77c5c..508b6c66d7d 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -1124,48 +1124,6 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c return &view->base; } -static void r600_set_sampler_views(struct r600_context *rctx, - struct r600_textures_info *dst, - unsigned count, - struct pipe_sampler_view **views, - void (*set_resource)(struct r600_context*, struct r600_pipe_resource_state*, unsigned)) -{ - struct r600_pipe_sampler_view **rviews = (struct r600_pipe_sampler_view **)views; - unsigned i; - - if (count) - r600_inval_texture_cache(rctx); - - for (i = 0; i < count; i++) { - if (rviews[i]) { - if (((struct r600_resource_texture *)rviews[i]->base.texture)->is_depth) - rctx->have_depth_texture = true; - - /* Changing from array to non-arrays textures and vice versa requires updating TEX_ARRAY_OVERRIDE. */ - if ((rviews[i]->base.texture->target == PIPE_TEXTURE_1D_ARRAY || - rviews[i]->base.texture->target == PIPE_TEXTURE_2D_ARRAY) != dst->is_array_sampler[i]) - dst->samplers_dirty = true; - - set_resource(rctx, &rviews[i]->state, i + R600_MAX_CONST_BUFFERS); - } else { - set_resource(rctx, NULL, i + R600_MAX_CONST_BUFFERS); - } - - pipe_sampler_view_reference( - (struct pipe_sampler_view **)&dst->views[i], - views[i]); - } - - for (i = count; i < dst->n_views; i++) { - if (dst->views[i]) { - set_resource(rctx, NULL, i + R600_MAX_CONST_BUFFERS); - pipe_sampler_view_reference((struct pipe_sampler_view **)&dst->views[i], NULL); - } - } - - dst->n_views = count; -} - static void r600_set_vs_sampler_views(struct pipe_context *ctx, unsigned count, struct pipe_sampler_view **views) { |