[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