diff options
author | Christian König <[email protected]> | 2011-07-11 11:28:23 +0200 |
---|---|---|
committer | Christian König <[email protected]> | 2011-07-11 11:28:23 +0200 |
commit | d6eb1f82570659b7b5a562faa06d804e63a0fc64 (patch) | |
tree | 3ccab9bcc8f0bb39e538c52a563d168c109d0502 /src | |
parent | e45d8958244919ccfccd72527cdf7e96e996c781 (diff) |
pipe-video: merge fixes
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/tests/trivial/.gitignore | 3 | ||||
-rw-r--r-- | src/gallium/tests/unit/Makefile | 49 | ||||
-rw-r--r-- | src/gallium/tests/unit/pipe_barrier_test.c | 86 | ||||
-rw-r--r-- | src/gallium/tests/unit/u_cache_test.c | 121 | ||||
-rw-r--r-- | src/gallium/tests/unit/u_half_test.c | 32 |
5 files changed, 291 insertions, 0 deletions
diff --git a/src/gallium/tests/trivial/.gitignore b/src/gallium/tests/trivial/.gitignore new file mode 100644 index 00000000000..af6cdedbeba --- /dev/null +++ b/src/gallium/tests/trivial/.gitignore @@ -0,0 +1,3 @@ +tri +quad-tex +result.bmp diff --git a/src/gallium/tests/unit/Makefile b/src/gallium/tests/unit/Makefile new file mode 100644 index 00000000000..bb3039f3bc7 --- /dev/null +++ b/src/gallium/tests/unit/Makefile @@ -0,0 +1,49 @@ +# progs/gallium/simple/Makefile + +TOP = ../../../.. +include $(TOP)/configs/current + +INCLUDES = \ + -I. \ + -I$(TOP)/src/gallium/include \ + -I$(TOP)/src/gallium/auxiliary \ + -I$(TOP)/src/gallium/drivers \ + -I$(TOP)/src/gallium/winsys \ + $(PROG_INCLUDES) + +LINKS = \ + $(TOP)/src/gallium/drivers/trace/libtrace.a \ + $(TOP)/src/gallium/winsys/sw/null/libws_null.a \ + $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \ + $(GALLIUM_AUXILIARIES) \ + $(PROG_LINKS) + +SOURCES = \ + pipe_barrier_test.c \ + u_cache_test.c \ + u_half_test.c \ + u_format_test.c \ + u_format_compatible_test.c \ + translate_test.c + + +OBJECTS = $(SOURCES:.c=.o) + +PROGS = $(OBJECTS:.o=) + +##### TARGETS ##### + +default: $(PROGS) + +clean: + -rm -f $(PROGS) + -rm -f *.o + -rm -f result.bmp + +##### RULES ##### + +$(OBJECTS): %.o: %.c + $(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $(PROG_DEFINES) $< -o $@ + +$(PROGS): %: %.o + $(CC) $(LDFLAGS) $< $(LINKS) -lm -lpthread -ldl -o $@ diff --git a/src/gallium/tests/unit/pipe_barrier_test.c b/src/gallium/tests/unit/pipe_barrier_test.c new file mode 100644 index 00000000000..f5d72b0abae --- /dev/null +++ b/src/gallium/tests/unit/pipe_barrier_test.c @@ -0,0 +1,86 @@ +/************************************************************************** + * + * Copyright 2009-2010 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. + * + **************************************************************************/ + + +/* + * Test case for pipe_barrier. + * + * The test succeeds if no thread exits before all the other threads reach + * the barrier. + */ + + +#include <stdio.h> + +#include "os/os_thread.h" +#include "os/os_time.h" + + +#define NUM_THREADS 10 + +static pipe_thread threads[NUM_THREADS]; +static pipe_barrier barrier; +static int thread_ids[NUM_THREADS]; + + +static PIPE_THREAD_ROUTINE(thread_function, thread_data) +{ + int thread_id = *((int *) thread_data); + + printf("thread %d starting\n", thread_id); + os_time_sleep(thread_id * 1000 * 1000); + printf("thread %d before barrier\n", thread_id); + pipe_barrier_wait(&barrier); + printf("thread %d exiting\n", thread_id); + + return NULL; +} + + +int main() +{ + int i; + + printf("pipe_barrier_test starting\n"); + + pipe_barrier_init(&barrier, NUM_THREADS); + + for (i = 0; i < NUM_THREADS; i++) { + thread_ids[i] = i; + threads[i] = pipe_thread_create(thread_function, (void *) &thread_ids[i]); + } + + for (i = 0; i < NUM_THREADS; i++ ) { + pipe_thread_wait(threads[i]); + } + + pipe_barrier_destroy(&barrier); + + printf("pipe_barrier_test exiting\n"); + + return 0; +} diff --git a/src/gallium/tests/unit/u_cache_test.c b/src/gallium/tests/unit/u_cache_test.c new file mode 100644 index 00000000000..0b62a765230 --- /dev/null +++ b/src/gallium/tests/unit/u_cache_test.c @@ -0,0 +1,121 @@ +/************************************************************************** + * + * Copyright 2010 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. + * + **************************************************************************/ + + +/* + * Test case for u_cache. + */ + + +#include <assert.h> +#include <stdio.h> + +#include "util/u_cache.h" +#include "util/u_hash.h" + + +typedef uint32_t cache_test_key; +typedef uint32_t cache_test_value; + + +static uint32_t +cache_test_hash(const void *key) +{ + return util_hash_crc32(key, sizeof(cache_test_key)); +} + + +static void +cache_test_destroy(void *key, void *value) +{ + free(key); + free(value); +} + + +static int +cache_test_compare(const void *key1, const void *key2) { + return !(key1 == key2); +} + + +int main() { + unsigned cache_size; + unsigned cache_count; + + for (cache_size = 2; cache_size < (1 << 15); cache_size *= 2) { + for (cache_count = (cache_size << 5); cache_count < (cache_size << 10); cache_count *= 2) { + struct util_cache * cache; + cache_test_key *key; + cache_test_value *value_in; + cache_test_value *value_out; + int i; + + printf("Testing cache size of %d with %d values.\n", cache_size, cache_count); + + cache = util_cache_create(cache_test_hash, + cache_test_compare, + cache_test_destroy, + cache_size); + + /* + * Retrieve a value from an empty cache. + */ + key = malloc(sizeof(cache_test_key)); + *key = 0xdeadbeef; + value_out = (cache_test_value *) util_cache_get(cache, key); + assert(value_out == NULL); + free(key); + + + /* + * Repeatedly insert into and retrieve values from the cache. + */ + for (i = 0; i < cache_count; i++) { + key = malloc(sizeof(cache_test_key)); + value_in = malloc(sizeof(cache_test_value)); + + *key = rand(); + *value_in = rand(); + util_cache_set(cache, key, value_in); + + value_out = util_cache_get(cache, key); + assert(value_out != NULL); + assert(value_in == value_out); + assert(*value_in == *value_out); + } + + /* + * In debug builds, this will trigger a self-check by the cache of + * the distribution of hits in its internal cache entries. + */ + util_cache_destroy(cache); + } + } + + return 0; +} diff --git a/src/gallium/tests/unit/u_half_test.c b/src/gallium/tests/unit/u_half_test.c new file mode 100644 index 00000000000..00bda7f50a6 --- /dev/null +++ b/src/gallium/tests/unit/u_half_test.c @@ -0,0 +1,32 @@ +#include <stdlib.h> +#include <stdio.h> +#include <float.h> + +#include "util/u_math.h" +#include "util/u_half.h" + +int +main(int argc, char **argv) +{ + unsigned i; + unsigned roundtrip_fails = 0; + for(i = 0; i < 1 << 16; ++i) + { + uint16_t h = (uint16_t) i; + union fi f; + uint16_t rh; + f.ui = util_half_to_floatui(h); + rh = util_floatui_to_half(f.ui); + if(h != rh) + { + printf("Roundtrip failed: %x -> %x = %f -> %x\n", h, f.ui, f.f, rh); + ++roundtrip_fails; + } + } + + if(roundtrip_fails) + printf("Failure! %u/65536 half floats failed a conversion to float and back.\n", roundtrip_fails); + else + printf("Success!\n"); + return 0; +} |