freedreno: move a2xx specific hack out of core
authorRob Clark <robdclark@gmail.com>
Sun, 16 Apr 2017 15:57:04 +0000 (11:57 -0400)
committerRob Clark <robdclark@gmail.com>
Tue, 18 Apr 2017 20:32:00 +0000 (16:32 -0400)
Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/a2xx/fd2_texture.c
src/gallium/drivers/freedreno/freedreno_texture.c

index c500fbc9b87822f07a3170087ee4d75ec3c5a918..089c337118fb2a477d81c32f542008a2fd834c30 100644 (file)
@@ -151,6 +151,25 @@ fd2_sampler_view_create(struct pipe_context *pctx, struct pipe_resource *prsc,
        return &so->base;
 }
 
+static void
+fd2_set_sampler_views(struct pipe_context *pctx, enum pipe_shader_type shader,
+               unsigned start, unsigned nr,
+               struct pipe_sampler_view **views)
+{
+       if (shader == PIPE_SHADER_FRAGMENT) {
+               struct fd_context *ctx = fd_context(pctx);
+
+               /* on a2xx, since there is a flat address space for textures/samplers,
+                * a change in # of fragment textures/samplers will trigger patching and
+                * re-emitting the vertex shader:
+                */
+               if (nr != ctx->tex[PIPE_SHADER_FRAGMENT].num_textures)
+                       ctx->dirty |= FD_DIRTY_TEXSTATE;
+       }
+
+       fd_set_sampler_views(pctx, shader, start, nr, views);
+}
+
 /* map gallium sampler-id to hw const-idx.. adreno uses a flat address
  * space of samplers (const-idx), so we need to map the gallium sampler-id
  * which is per-shader to a global const-idx space.
@@ -177,5 +196,5 @@ fd2_texture_init(struct pipe_context *pctx)
        pctx->create_sampler_state = fd2_sampler_state_create;
        pctx->bind_sampler_states = fd2_sampler_states_bind;
        pctx->create_sampler_view = fd2_sampler_view_create;
-       pctx->set_sampler_views = fd_set_sampler_views;
+       pctx->set_sampler_views = fd2_set_sampler_views;
 }
index d27f47eb29f875259f3ef333142ab07815152fc8..e9d90aa3a77ea2c7e952be306156eabfa67c5326 100644 (file)
@@ -112,15 +112,6 @@ fd_set_sampler_views(struct pipe_context *pctx, enum pipe_shader_type shader,
 
        switch (shader) {
        case PIPE_SHADER_FRAGMENT:
-               /* on a2xx, since there is a flat address space for textures/samplers,
-                * a change in # of fragment textures/samplers will trigger patching
-                * and re-emitting the vertex shader:
-                *
-                * (note: later gen's ignore FD_DIRTY_TEXSTATE so fine to set it)
-                */
-               if (nr != ctx->tex[PIPE_SHADER_FRAGMENT].num_textures)
-                       ctx->dirty |= FD_DIRTY_TEXSTATE;
-
                ctx->dirty |= FD_DIRTY_FRAGTEX;
                break;
        case PIPE_SHADER_VERTEX: