This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SPIR-V and GCC


On Wednesday, March 4, 2015 5:22 PM, David Malcolm <dmalcolm@redhat.com> wrote:
On Wed, 2015-03-04 at 14:36 +0000, BogDan wrote:
> Hello folks,
> 
> 
> Probably is a little bit too early, but I'd like to ask if there is
> any chance to use gcc to produce SPIR-V [1]. 
> It will be just great if we'll be able to write our shaders in e.g.
> C/C++/(any language supported by gcc) and use GCC to compile them as
> SPIR-V!
> It will be fantastic to use only one compiler collection for CPU and
> for GPU compute&graphics!
> 
> Cheers,
> 
> BogDan.
> [1] https://www.khronos.org/registry/spir-v/

I work on gcc, but in a former life I was a game developer [1], so this
piqued my interest :)



WOW you've work on AVP!



A few questions:

(A) Does SPIR-V have an assembler? The URL you posted talks about it
being a binary format, but the example in there shows a "disassembled"
textual form. The reason I ask is that the internals of gcc's backend
expect to be writing out "assembler", which then goes through an
assembler program to produce a binary. In theory I guess one could have
the "assembler" format generated by the backend be binary, but it's
likely to be *much* easier to hack on if there's an intermediate textual
form.



SPIR-V it's an Intermediate Language binary format. First versions were 
based on LLVM. SPIR-V has nothing to do with the old SPIR implementations,
but for some reason khronos decide to keep the name :)
This http://www.g-truc.net/post-0714.html great article explans better
what SPIR-V is.



(B) Are you thinking about this for primarly ahead-of-time
compilation, or are you interested in just-in-time compilation to
SPIR-V? I ask since I maintain the new "libgccjit" feature in GCC 5.
One of the current assumptions in libgccjit is that host==target, but I
hope to relax that for gcc 6 so that libgccjit could e.g. generate code
for a GPU. Another gcc 6 possibility could be multi-target support for
libgccjit, so that you can populate a gcc_jit_context with code, then
have it generate machine code for both the CPU and for the GPU (mostly
just thinking aloud here).



Even though most of the people will use it for ahead-of-time compilation,
but IMHO it can be both!



(C) (probably most important) Is a SPIR-V backend something you'd be
up for working on? Any other volunteers out there?
(Maybe a GSoC thing?)



Personally, I never touched gcc source code before, and I don't have 
any idea about (any) compilers internals (thought I have experience 
working for free software projects [0]). Anyway I think it will be a 
great experience to (at least try to :) ) help in my spare time.
A GSOC project is a great idea as well!



Thanks,
BogDan


P.S. Sorry for the inline reply, I had to use yahoo mail and ...

[0] http://blog.qt.io/blog/2012/11/08/necessitas-android-port-contributed-to-the-qt-project


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]