llvmpipe/cs: fix image/sampler binding for compute
authorDave Airlie <airlied@redhat.com>
Fri, 10 Jul 2020 05:46:54 +0000 (15:46 +1000)
committerMarge Bot <eric+marge@anholt.net>
Fri, 10 Jul 2020 22:04:27 +0000 (22:04 +0000)
The compute shader dirtying is a bit wrong here, since we don't
have a second stage like for fragment shaders, so dirty the compute
shader whenever a sampler or image changes, (ssbo/contexts don't
needs this).

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5835>

src/gallium/drivers/llvmpipe/lp_state_cs.c

index 7bd52bb78b02ec0c71c80135c1339b11790a5d3b..59757234a83307e4cc761e0105c7700dde63ae9a 100644 (file)
@@ -1210,9 +1210,6 @@ update_csctx_ssbo(struct llvmpipe_context *llvmpipe)
 static void
 llvmpipe_cs_update_derived(struct llvmpipe_context *llvmpipe, void *input)
 {
-   if (llvmpipe->cs_dirty & (LP_CSNEW_CS))
-      llvmpipe_update_cs(llvmpipe);
-
    if (llvmpipe->cs_dirty & LP_CSNEW_CONSTANTS) {
       lp_csctx_set_cs_constants(llvmpipe->csctx,
                                 ARRAY_SIZE(llvmpipe->constants[PIPE_SHADER_COMPUTE]),
@@ -1248,6 +1245,13 @@ llvmpipe_cs_update_derived(struct llvmpipe_context *llvmpipe, void *input)
       csctx->cs.current.jit_context.kernel_args = input;
    }
 
+   if (llvmpipe->cs_dirty & (LP_CSNEW_CS |
+                             LP_CSNEW_IMAGES |
+                             LP_CSNEW_SAMPLER_VIEW |
+                             LP_CSNEW_SAMPLER))
+      llvmpipe_update_cs(llvmpipe);
+
+
    llvmpipe->cs_dirty = 0;
 }