[Mesa-dev] [PATCH] r600g: Fix flush issue with llvm on r700
Vadim Girlin
vadimgirlin at gmail.com
Wed Nov 21 06:54:36 PST 2012
On Tue, 2012-11-20 at 23:26 +0100, Vincent Lejeune wrote:
> ---
> src/gallium/drivers/r600/r600_llvm.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/r600/r600_llvm.c b/src/gallium/drivers/r600/r600_llvm.c
> index b3d4e6b..170dac7 100644
> --- a/src/gallium/drivers/r600/r600_llvm.c
> +++ b/src/gallium/drivers/r600/r600_llvm.c
> @@ -11,6 +11,7 @@
> #include "r600_asm.h"
> #include "r600_opcodes.h"
> #include "r600_shader.h"
> +#include "r600_pipe.h"
> #include "radeon_llvm.h"
> #include "radeon_llvm_emit.h"
>
> @@ -324,8 +325,10 @@ static void llvm_emit_tex(
>
> sampler_src = emit_data->inst->Instruction.NumSrcRegs-1;
>
> + // XXX: Resource ID offset is R600_MAX_CONST_BUFFERS but LLVM already adds 2
> + // to the generated machine resource id
> args[c++] = lp_build_const_int32(gallivm,
> - emit_data->inst->Src[sampler_src].Register.Index);
> + emit_data->inst->Src[sampler_src].Register.Index + R600_MAX_CONST_BUFFERS - 2);
> args[c++] = lp_build_const_int32(gallivm,
> emit_data->inst->Texture.Texture);
>
As Marek said, it's not a flushing issue. The problem is with the
difference in sampler_id/resource_id mapping between the compiler and
the driver introduced by recent driver changes. There is a temporary fix
in the Tom's llvm tree:
http://cgit.freedesktop.org/~tstellar/llvm/commit/?id=dca75e6619ed9262936a233deb03de9da897aa93
Actually I think that the compiler shouldn't be aware of these internal
driver details at all, driver should precompute and pass both id's to
the compiler, and then these id's should go through the llvm backend
unchanged (at least while we are not using indexing for
resource_id/sampler_id and not trying to optimize it somehow).
Vadim
More information about the mesa-dev
mailing list