summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/swr/swr_shader.cpp
diff options
context:
space:
mode:
authorBruce Cherniak <bruce.cherniak@intel.com>2017-03-01 22:58:36 -0600
committerTim Rowley <timothy.o.rowley@intel.com>2017-03-02 13:39:56 -0600
commita7b8d50bcb56b5d093aee24a722f2a5288b79b14 (patch)
tree08821eff90778a9eca0a2f8a0937b0c17e916df6 /src/gallium/drivers/swr/swr_shader.cpp
parent74aa6fd9a0b5e137101720fb0ddb43cb06a47f28 (diff)
swr: fix crash in swr_update_derived following st/mesa state changes
Recent change to st/mesa state update logic caused major regressions to swr validation code. swr uses the same validation logic (swr_update_derived) for both draw and Clear calls. New st/mesa state update logic results in certain state objects not being set/bound during Clear. This was causing null ptr exceptions. Creation of static dummy state objects allows setting these pointers during Clear validation, without interfering with relevant state validation. Once fixed, new logic also highlighted an error in dirty bit checking for fragment shader and clip validation. (The alternative is to have a simplified validation routine for Clear. Which may do that at some point.) Reviewed-by: Tim Rowley <timothy.o.rowley@intel.com>
Diffstat (limited to 'src/gallium/drivers/swr/swr_shader.cpp')
-rw-r--r--src/gallium/drivers/swr/swr_shader.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/swr/swr_shader.cpp b/src/gallium/drivers/swr/swr_shader.cpp
index 676938c4c9a..9169f6dc74e 100644
--- a/src/gallium/drivers/swr/swr_shader.cpp
+++ b/src/gallium/drivers/swr/swr_shader.cpp
@@ -366,6 +366,9 @@ BuilderSWR::CompileVS(struct swr_context *ctx, swr_jit_vs_key &key)
PFN_VERTEX_FUNC
swr_compile_vs(struct swr_context *ctx, swr_jit_vs_key &key)
{
+ if (!ctx->vs->pipe.tokens)
+ return NULL;
+
BuilderSWR builder(
reinterpret_cast<JitManager *>(swr_screen(ctx->pipe.screen)->hJitMgr),
"VS");
@@ -726,6 +729,9 @@ BuilderSWR::CompileFS(struct swr_context *ctx, swr_jit_fs_key &key)
PFN_PIXEL_KERNEL
swr_compile_fs(struct swr_context *ctx, swr_jit_fs_key &key)
{
+ if (!ctx->fs->pipe.tokens)
+ return NULL;
+
BuilderSWR builder(
reinterpret_cast<JitManager *>(swr_screen(ctx->pipe.screen)->hJitMgr),
"FS");