diff options
Diffstat (limited to 'src/gallium/drivers/llvmpipe')
-rw-r--r-- | src/gallium/drivers/llvmpipe/Makefile | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/README | 9 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/SConscript | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_flow.c (renamed from src/gallium/drivers/llvmpipe/lp_bld_loop.c) | 15 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_flow.h | 69 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_format.h (renamed from src/gallium/drivers/llvmpipe/lp_bld.h) | 21 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_load.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_pack.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_store.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_unpack.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_format.c | 3 |
11 files changed, 91 insertions, 38 deletions
diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index ed24a1c7b9..91a2e2ee74 100644 --- a/src/gallium/drivers/llvmpipe/Makefile +++ b/src/gallium/drivers/llvmpipe/Makefile @@ -12,12 +12,12 @@ C_SOURCES = \ lp_bld_conv.c \ lp_bld_debug.c \ lp_bld_depth.c \ + lp_bld_flow.c \ lp_bld_intr.c \ lp_bld_pack.c \ lp_bld_unpack.c \ lp_bld_load.c \ lp_bld_store.c \ - lp_bld_loop.c \ lp_bld_logic.c \ lp_bld_logicop.c \ lp_bld_swizzle.c \ diff --git a/src/gallium/drivers/llvmpipe/README b/src/gallium/drivers/llvmpipe/README index 6e4edaa947..677352eaa1 100644 --- a/src/gallium/drivers/llvmpipe/README +++ b/src/gallium/drivers/llvmpipe/README @@ -106,3 +106,12 @@ for posterior analysis, e.g.: build/linux-x86_64/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv + +Development Notes +================= + +- We use LLVM-C bindings for now. They are not documented, but follow the C++ + interfaces very closely, and appear to be complete enough for code + generation. See + http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html + for a standalone example. diff --git a/src/gallium/drivers/llvmpipe/SConscript b/src/gallium/drivers/llvmpipe/SConscript index a2987c11f3..b8b577fe5a 100644 --- a/src/gallium/drivers/llvmpipe/SConscript +++ b/src/gallium/drivers/llvmpipe/SConscript @@ -16,12 +16,12 @@ llvmpipe = env.ConvenienceLibrary( 'lp_bld_conv.c', 'lp_bld_debug.c', 'lp_bld_depth.c', + 'lp_bld_flow.c', 'lp_bld_intr.c', 'lp_bld_pack.c', 'lp_bld_unpack.c', 'lp_bld_load.c', 'lp_bld_store.c', - 'lp_bld_loop.c', 'lp_bld_logic.c', 'lp_bld_logicop.c', 'lp_bld_swizzle.c', diff --git a/src/gallium/drivers/llvmpipe/lp_bld_loop.c b/src/gallium/drivers/llvmpipe/lp_bld_flow.c index eb6126e5f0..5fc85a19b8 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_loop.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.c @@ -25,20 +25,15 @@ * **************************************************************************/ -#include "lp_bld.h" - - /** - * @file - * Auxiliaries to build loops. - * - * LLVM's IR doesn't represent for-loops directly. Furthermore it - * it requires creating code blocks, branches, phi variables, so it - * requires a fair amount of code. + * LLVM control flow build helpers. * - * @sa http://www.llvm.org/docs/tutorial/LangImpl5.html#for + * @author Jose Fonseca <jfonseca@vmware.com> */ +#include "lp_bld_flow.h" + + void lp_build_loop_begin(LLVMBuilderRef builder, diff --git a/src/gallium/drivers/llvmpipe/lp_bld_flow.h b/src/gallium/drivers/llvmpipe/lp_bld_flow.h new file mode 100644 index 0000000000..7281b278a0 --- /dev/null +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.h @@ -0,0 +1,69 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * LLVM control flow build helpers. + * + * @author Jose Fonseca <jfonseca@vmware.com> + */ + +#ifndef LP_BLD_FLOW_H +#define LP_BLD_FLOW_H + + +#include <llvm-c/Core.h> + + +/** + * LLVM's IR doesn't represent for-loops directly. Furthermore it + * it requires creating code blocks, branches, phi variables, so it + * requires a fair amount of code. + * + * @sa http://www.llvm.org/docs/tutorial/LangImpl5.html#for + */ +struct lp_build_loop_state +{ + LLVMBasicBlockRef block; + LLVMValueRef counter; +}; + + +void +lp_build_loop_begin(LLVMBuilderRef builder, + LLVMValueRef start, + struct lp_build_loop_state *state); + + +void +lp_build_loop_end(LLVMBuilderRef builder, + LLVMValueRef end, + LLVMValueRef step, + struct lp_build_loop_state *state); + + + +#endif /* !LP_BLD_FLOW_H */ diff --git a/src/gallium/drivers/llvmpipe/lp_bld.h b/src/gallium/drivers/llvmpipe/lp_bld_format.h index c2dea1036f..01c8a752d1 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld.h +++ b/src/gallium/drivers/llvmpipe/lp_bld_format.h @@ -98,25 +98,4 @@ lp_build_store_rgba(LLVMBuilderRef builder, LLVMValueRef rgba); -struct lp_build_loop_state -{ - LLVMBasicBlockRef block; - LLVMValueRef counter; -}; - - -void -lp_build_loop_begin(LLVMBuilderRef builder, - LLVMValueRef start, - struct lp_build_loop_state *state); - - -void -lp_build_loop_end(LLVMBuilderRef builder, - LLVMValueRef end, - LLVMValueRef step, - struct lp_build_loop_state *state); - - - #endif /* !LP_BLD_H */ diff --git a/src/gallium/drivers/llvmpipe/lp_bld_load.c b/src/gallium/drivers/llvmpipe/lp_bld_load.c index b9734bdbed..27db7b2db0 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_load.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_load.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_bld_pack.c b/src/gallium/drivers/llvmpipe/lp_bld_pack.c index f436f09737..71261e4f39 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_pack.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_pack.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_bld_store.c b/src/gallium/drivers/llvmpipe/lp_bld_store.c index 6273c9ee62..1da6dac8a2 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_store.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_store.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" void diff --git a/src/gallium/drivers/llvmpipe/lp_bld_unpack.c b/src/gallium/drivers/llvmpipe/lp_bld_unpack.c index 3545bdf225..d70faac1ba 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_unpack.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_unpack.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_test_format.c b/src/gallium/drivers/llvmpipe/lp_test_format.c index 3086bf871b..1d192355ee 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_format.c +++ b/src/gallium/drivers/llvmpipe/lp_test_format.c @@ -37,7 +37,8 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_flow.h" +#include "lp_bld_format.h" struct pixel_test_case |