diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index c9eb13927a7..de21a805b10 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -951,6 +951,7 @@ bool si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader sscreen->ws->buffer_unmap(sscreen->ws, shader->bo->buf); ac_rtld_close(&binary); + shader->gpu_address = u.rx_va; return size >= 0; } diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index f8f2fe5519f..b1ff7fe654d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -845,6 +845,10 @@ struct si_shader { struct si_shader *gs_copy_shader; struct si_resource *bo; + /* gpu_address should be bo->gpu_address except if SQTT is + * in use. + */ + uint64_t gpu_address; struct si_resource *scratch_bo; union si_shader_key key; struct util_queue_fence ready; diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index 128a5657aad..78681b8089d 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -374,6 +374,8 @@ static bool si_update_shaders(struct si_context *sctx) pipeline->offset[i] = offset; + shader->gpu_address = u.rx_va; + offset += align(size, 256); struct si_pm4_state *pm4 = &shader->pm4;