On 18/04/16 16:30, Tom Stellard wrote:
On Mon, Apr 18, 2016 at 10:14:35AM +0100, Jose Fonseca wrote:
All power of two of up native vector length.

There is actually a bug in lp_build_round for v2, whereby it doesn't
round to nearest.  Fixing is left to the future, but the test is now
able to expect it to fail.
---
  src/gallium/drivers/llvmpipe/lp_test_arit.c | 43 ++++++++++++++++++++---------
  1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_test_arit.c 
b/src/gallium/drivers/llvmpipe/lp_test_arit.c
index ba831f3..f3ba5a1 100644
--- a/src/gallium/drivers/llvmpipe/lp_test_arit.c
+++ b/src/gallium/drivers/llvmpipe/lp_test_arit.c
@@ -297,14 +297,16 @@ unary_tests[] = {
   */
  static LLVMValueRef
  build_unary_test_func(struct gallivm_state *gallivm,
-                      const struct unary_test_t *test)
+                      const struct unary_test_t *test,
+                      unsigned length,
+                      const char *test_name)
  {
-   struct lp_type type = lp_type_float_vec(32, lp_native_vector_width);
+   struct lp_type type = lp_type_float_vec(32, length * 32);
     LLVMContextRef context = gallivm->context;
     LLVMModuleRef module = gallivm->module;
     LLVMTypeRef vf32t = lp_build_vec_type(gallivm, type);
     LLVMTypeRef args[2] = { LLVMPointerType(vf32t, 0), LLVMPointerType(vf32t, 
0) };
-   LLVMValueRef func = LLVMAddFunction(module, test->name,
+   LLVMValueRef func = LLVMAddFunction(module, test_name,
                                         
LLVMFunctionType(LLVMVoidTypeInContext(context),
                                                          args, Elements(args), 
0));
     LLVMValueRef arg0 = LLVMGetParam(func, 0);
@@ -371,14 +373,15 @@ flush_denorm_to_zero(float val)
   * Test one LLVM unary arithmetic builder function.
   */
  static boolean
-test_unary(unsigned verbose, FILE *fp, const struct unary_test_t *test)
+test_unary(unsigned verbose, FILE *fp, const struct unary_test_t *test, 
unsigned length)
  {
+   char test_name[128];
+   util_snprintf(test_name, sizeof test_name, "%s.v%u", test->name, length);
     struct gallivm_state *gallivm;
     LLVMValueRef test_func;
     unary_func_t test_func_jit;
     boolean success = TRUE;
     int i, j;
-   int length = lp_native_vector_width / 32;
     float *in, *out;

     in = align_malloc(length * 4, length * 4);
@@ -391,7 +394,7 @@ test_unary(unsigned verbose, FILE *fp, const struct 
unary_test_t *test)

     gallivm = gallivm_create("test_module", LLVMGetGlobalContext());

This is not related to this patch, but the c++ equivalent of
LLVMGetGlobalContext() has been removed from LLVM, and I think the C
API may be removed at some point in the future, so these tests should
be migrated to use LLVMCreateContext().

-Tom

Thanks for the heads up.  I went ahead and fixed this in the tests.

There's still a use in llvmpipe, but it's guarded by PIPE_SUBSYSTEM_EMBEDDED, so it shouldn't affect anybody. We'll deal with that when LLVM breaks the C ABI -- it's just a matter of creating the context in llvmpipe_screen


Jose

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to