summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/freedreno/a3xx/fd3_compiler.c2
-rw-r--r--src/gallium/drivers/freedreno/a3xx/fd3_emit.c16
2 files changed, 9 insertions, 9 deletions
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c b/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
index 3fd3c5a6f32..c8e66fc76dd 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
@@ -157,7 +157,7 @@ compile_init(struct fd3_compile_context *ctx, struct fd3_shader_stateobj *so,
info->file_max[TGSI_FILE_OUTPUT] + 1;
so->first_immediate = ctx->base_reg[TGSI_FILE_IMMEDIATE];
- ctx->immediate_idx = 4 * (info->file_max[TGSI_FILE_IMMEDIATE] + 1);
+ ctx->immediate_idx = 4 * (ctx->info.file_max[TGSI_FILE_IMMEDIATE] + 1);
ret = tgsi_parse_init(&ctx->parser, tokens);
if (ret != TGSI_PARSE_OK)
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
index c479666b1cf..543c116ce2f 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
@@ -115,12 +115,10 @@ emit_constants(struct fd_ringbuffer *ring,
// I expect that size should be a multiple of vec4's:
assert(size == align(size, 4));
- /* gallium could have const-buffer still bound, even though the
- * shader is not using it. Writing consts above constlen (or
- * rather, HLSQ_{VS,FS}_CONTROL_REG.CONSTLENGTH) will cause a
- * hang.
+ /* gallium could leave const buffers bound above what the
+ * current shader uses.. don't let that confuse us.
*/
- if ((base / 4) >= shader->constlen)
+ if (base >= (4 * shader->first_immediate))
break;
if (constbuf->dirty_mask & (1 << index)) {
@@ -137,9 +135,11 @@ emit_constants(struct fd_ringbuffer *ring,
/* emit shader immediates: */
if (shader) {
for (i = 0; i < shader->immediates_count; i++) {
- fd3_emit_constant(ring, sb,
- 4 * (shader->first_immediate + i),
- 0, 4, shader->immediates[i].val, NULL);
+ base = 4 * (shader->first_immediate + i);
+ if (base >= (4 * shader->constlen))
+ break;
+ fd3_emit_constant(ring, sb, base,
+ 0, 4, shader->immediates[i].val, NULL);
}
}
}