freedreno/a5xx: image support
[mesa.git] / src / gallium / drivers / freedreno / a5xx / fd5_emit.c
index 3d8e43ad3e4d6e76c29d98229a3754c977f088f9..39cc77d40a35569b3574a12b058a6fe7d2c5b5ae 100644 (file)
@@ -37,6 +37,7 @@
 #include "fd5_emit.h"
 #include "fd5_blend.h"
 #include "fd5_context.h"
+#include "fd5_image.h"
 #include "fd5_program.h"
 #include "fd5_rasterizer.h"
 #include "fd5_texture.h"
@@ -764,10 +765,12 @@ fd5_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
        if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_TEX) {
                needs_border |= emit_textures(ctx, ring, SB4_FS_TEX,
                                &ctx->tex[PIPE_SHADER_FRAGMENT]);
-               OUT_PKT4(ring, REG_A5XX_TPL1_FS_TEX_COUNT, 1);
-               OUT_RING(ring, ctx->tex[PIPE_SHADER_FRAGMENT].num_textures);
        }
 
+       OUT_PKT4(ring, REG_A5XX_TPL1_FS_TEX_COUNT, 1);
+       OUT_RING(ring, ctx->shaderimg[PIPE_SHADER_FRAGMENT].enabled_mask ?
+                       ~0 : ctx->tex[PIPE_SHADER_FRAGMENT].num_textures);
+
        OUT_PKT4(ring, REG_A5XX_TPL1_CS_TEX_COUNT, 1);
        OUT_RING(ring, 0);
 
@@ -776,6 +779,9 @@ fd5_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
 
        if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_SSBO)
                emit_ssbos(ctx, ring, SB4_SSBO, &ctx->shaderbuf[PIPE_SHADER_FRAGMENT]);
+
+       if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_IMAGE)
+               fd5_emit_images(ctx, ring, PIPE_SHADER_FRAGMENT);
 }
 
 void
@@ -806,13 +812,17 @@ fd5_emit_cs_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
 
                OUT_PKT4(ring, REG_A5XX_TPL1_FS_TEX_COUNT, 1);
                OUT_RING(ring, 0);
-
-               OUT_PKT4(ring, REG_A5XX_TPL1_CS_TEX_COUNT, 1);
-               OUT_RING(ring, ctx->tex[PIPE_SHADER_COMPUTE].num_textures);
        }
 
+       OUT_PKT4(ring, REG_A5XX_TPL1_CS_TEX_COUNT, 1);
+       OUT_RING(ring, ctx->shaderimg[PIPE_SHADER_COMPUTE].enabled_mask ?
+                       ~0 : ctx->tex[PIPE_SHADER_COMPUTE].num_textures);
+
        if (dirty & FD_DIRTY_SHADER_SSBO)
                emit_ssbos(ctx, ring, SB4_CS_SSBO, &ctx->shaderbuf[PIPE_SHADER_COMPUTE]);
+
+       if (dirty & FD_DIRTY_SHADER_IMAGE)
+               fd5_emit_images(ctx, ring, PIPE_SHADER_COMPUTE);
 }
 
 /* emit setup at begin of new cmdstream buffer (don't rely on previous