nv50: implement a basic compute support
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 14 Oct 2015 19:42:41 +0000 (21:42 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Sat, 14 Nov 2015 22:42:15 +0000 (23:42 +0100)
commitff72440b40211326eda118232fabd53965410afd
treea86202d500d81b667c11266e536fcfaad4e00ce2
parent7167a058baa2b524e31e51d8924fe5d0ea661b70
nv50: implement a basic compute support

This adds the ability to launch simple compute kernels like the one I
will use to read out MP performance counters in the upcoming patch.

This compute support is based on the work of Francisco Jerez (aka curro)
that he did as part of his EVoC project in 2011/2012 to get OpenCL
working on Tesla. His original work can be found here:
https://github.com/curro/mesa/commits/nv50-compute

I did some improvements on the original code, like fixing using both 3D
and COMPUTE simultaneously, improving global buffers binding, and making
the code closer to what nvc0 already does. This compute support has been
tested by Pierre Moreau and myself with some compute kernels. This is a
step towards OpenCL.

Speaking about this, it seems like compute programs overlap fragment
programs when they are used both. To fix this, we need to re-validate
fragment programs when binding compute programs and vice versa.

Note that, textures, samplers and surfaces still need to be implemented.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Tested-by: Pierre Moreau <pierre.morrow@free.fr>
Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/Makefile.sources
src/gallium/drivers/nouveau/nv50/nv50_compute.c [new file with mode: 0644]
src/gallium/drivers/nouveau/nv50/nv50_compute.xml.h [new file with mode: 0644]
src/gallium/drivers/nouveau/nv50/nv50_context.c
src/gallium/drivers/nouveau/nv50/nv50_context.h
src/gallium/drivers/nouveau/nv50/nv50_program.c
src/gallium/drivers/nouveau/nv50/nv50_program.h
src/gallium/drivers/nouveau/nv50/nv50_screen.c
src/gallium/drivers/nouveau/nv50/nv50_screen.h
src/gallium/drivers/nouveau/nv50/nv50_state.c