summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
Commit message (Collapse)AuthorAgeFilesLines
* util: Use #ifdef instead of #if.Vinson Lee2010-08-211-1/+1
| | | | This is a typo fix of earlier commit 0f3b3751b8643352dcc242567b3696bd1505df1d.
* util: Define dump_cpu only for DEBUG builds.Vinson Lee2010-08-211-0/+2
| | | | | | | dump_cpu is used only when DEBUG is defined. Fixes the following GCC warning on builds without DEBUG defined. util/u_cpu_detect.c:76: warning: 'debug_get_option_dump_cpu' defined but not used
* translate_sse: Silence uninitialized variable warnings.Vinson Lee2010-08-211-0/+14
| | | | Initialize variables on error paths.
* draw: Don't assert if indices point outside vertex buffer.José Fonseca2010-08-221-2/+7
| | | | | | | | | | | | This is valid input, and asserting here does causes the test suites that verify this to crash. Also, the assert was wrongly accepting the case max_index == vert_info->count which, IIUC, is the first vertex outside the buffer. Assuming the vert_info->count is precise (which often is not the case).
* util: Silence uninitialized variable warnings.Vinson Lee2010-08-211-0/+4
|
* util: Move loop variable declaration outside for loop.Vinson Lee2010-08-211-1/+2
| | | | Fixes build error with MSVC.
* gallivm: Emit DIVPS instead of RCPPS.José Fonseca2010-08-211-12/+24
| | | | | | | See comments for detailed rationale. Thanks to Michal Krol and Zack Rusin for detecting and investigating this in detail.
* auxiliary: Add missing files to SCons build.Vinson Lee2010-08-211-14/+16
| | | | | Add u_linear.c and u_linkages.c to SCons build. Reorder list of files to be more alphabetical.
* auxiliary: Reorder list of files in Makefile.Vinson Lee2010-08-211-14/+14
| | | | This patch reorders the list of files so that the order is more alphabetic.
* gallium/auxiliary: add semantic linkage utility codeLuca Barbieri2010-08-213-0/+211
|
* u_debug_describe: use switch instead of if chainLuca Barbieri2010-08-211-7/+17
|
* u_debug_describe: add PIPE_TEXTURE_RECTLuca Barbieri2010-08-211-0/+2
|
* auxiliary: add copyright headersLuca Barbieri2010-08-2110-5/+258
| | | | Thanks to Jose Fonseca for pointing out they were missing.
* util: Match printf format to silence warning.José Fonseca2010-08-211-1/+1
|
* util: Make the reference debuggin code more C++ friendly.José Fonseca2010-08-214-13/+30
| | | | | C++ doesn't accept function <-> void* conversions without a putting a fight.
* util: Remove the x86 exception handlers.José Fonseca2010-08-211-55/+0
| | | | Unused now that check_os_katmai_support was removed.
* os_stream: fix bugs in allocation pathLuca Barbieri2010-08-211-16/+8
|
* util: Fix build for C++ compilers.Michal Krol2010-08-202-0/+16
|
* gallium: hook up reference count debugging codeLuca Barbieri2010-08-201-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds the ability to produce a log file containing all reference count changes, and object creation/destruction, on Gallium objects. The data allows to answer these crucial questions: 1. This app is exhausting all my memory due to a resource leak: where is the bug? 2. Which resources is this app using at a given moment? Which parts of the code created them? 3. What kinds of resources does this app use? 4. How fast does this app create and destroy resources? Which parts of the code create resources fast? The output is compatible with the one produced by the similar facility in Mozilla Firefox, allowing to use Mozilla's tools to analyze the data. To get the log file: export GALLIUM_REFCNT_LOG=<file> To get function names and source lines in the log file: tools/addr2line.sh <file> To process the log file, see: http://www.mozilla.org/performance/refcnt-balancer.html
* auxiliary: add reference count debugging codeLuca Barbieri2010-08-204-0/+187
|
* os_stream: add printf facilityLuca Barbieri2010-08-208-3/+85
|
* u_debug_symbol: add symbol name cachingLuca Barbieri2010-08-202-1/+43
| | | | | Without this, any form of logging that dumps stack traces continuously will spend a lot of time resolving symbol names.
* u_debug_symbol: add support for getting symbol names from glibcLuca Barbieri2010-08-201-0/+23
|
* u_debug_symbol: support getting a string without outputLuca Barbieri2010-08-202-14/+27
|
* auxiliary: add functions to describe gallium objectsLuca Barbieri2010-08-204-0/+55
|
* u_staging: improve interfaceLuca Barbieri2010-08-202-11/+7
|
* auxiliary: support using PIPE_TEXTURE_RECT internallyLuca Barbieri2010-08-202-34/+81
| | | | | | | | | | Currently Gallium internals always use PIPE_TEXTURE_2D and normalized coordinates to access textures. However, PIPE_TEXTURE_2D is not always supported for NPOT textures, and PIPE_TEXTURE_RECT requires unnormalized coordinates. Hence, this change adds support for both kinds of normalization.
* u_staging: use PIPE_TEXTURE_RECTLuca Barbieri2010-08-201-1/+1
|
* u_blitter: use TGSI_TEXTURE_RECTLuca Barbieri2010-08-201-1/+1
| | | | | This seems to make sense, although I suspect the semantics of TGSI_TEXTURE_RECT need to be closely reviewed.
* gallium: make all checks for PIPE_TEXTURE_2D check for PIPE_TEXTURE_RECT tooLuca Barbieri2010-08-205-5/+13
| | | | | | | Searched for them with: git grep -E '[!=]=.*PIPE_TEXTURE_2D|PIPE_TEXTURE_2D.*[!=]=|case.*PIPE_TEXTURE_2D' Behavior hasn't been changed.
* translate_sse: enable on Win64Luca Barbieri2010-08-201-2/+1
| | | | According to Vinson, enabling it causes no regressions
* u_blitter: fix a memory leakMarek Olšák2010-08-191-0/+1
|
* translate_sse: try to fix Win64Luca Barbieri2010-08-191-1/+2
| | | | Not sure whether it works now (it is still disabled).
* translate_sse: fix emit_load_sse2Luca Barbieri2010-08-191-0/+2
|
* gallivm: Use proper index to lookup predicate register array.michal2010-08-181-1/+1
| | | | Doesn't fix anything, as those indices were both always 0.
* translate_sse: don't overwrite source buffer pointerLuca Barbieri2010-08-181-5/+5
| | | | | We were putting the source pointer in a register used as a temporary, breaking all paths that don't read the data in a single instruction.
* gallivm: Fix and re-enable MMX-disabling codenobled2010-08-171-5/+1
| | | | Signed-off-by: José Fonseca <[email protected]>
* util: Remove check_os_katmai_support.Vinson Lee2010-08-161-119/+1
| | | | | | | | | | | | | | | | | check_os_katmai_support checks that the operating system running on a SSE-capable processor supports SSE. This is necessary for unpatched 2.2.x and earlier kernels. 2.4.x and later kernels support SSE. check_os_katmai_support will disable SSE capabilities for 32-bit x86 operating systems for which there is no code path. Currently, this function handles Linux, Windows, and several BSDs. Mac OS, Cygwin, and Solaris are several operating systems with no code paths. Rather than add code for the unhandled operating systems, remove this function altogether. This will fix SSE detection on all recent 32-bit x86 operating systems. This completely breaks functionality on unpatched 2.2.x and earlier kernels, although there are likely no Gallium3D users on such operating systems.
* translate: Move loop variable declaration outside for loop.Vinson Lee2010-08-161-1/+2
| | | | Fixes MSVC build.
* translate: Remove unused temporary register.José Fonseca2010-08-161-1/+0
| | | | Assuming the side-effect of x86_make_reg is also unnecessary.
* translate: Eliminate void pointer arithmetic.José Fonseca2010-08-161-1/+1
| | | | Non-portable.
* draw_llvm: fix segfaults on non-SSE2 CPUs where it is disabled (v2)Luca Barbieri2010-08-163-17/+32
| | | | | | | | | | | | | | | Changes in v2: - Change function name Currently draw_llvm refuses to create itself on non-SSE2 CPUs due to an alleged LLVM bug. However, this is implemented improperly, because other parts of draw still attempt to access draw->llvm, resulting in segfaults. Instead, put the check in debug_get_option_draw_use_llvm, check that before calling draw_llvm_create, and then check whether draw->llvm is non-null everywhere else.
* translate_sse: major rewrite (v5)Luca Barbieri2010-08-162-239/+936
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NOTE: Win64 is untested, and is thus currently disabled. If you have such a system, please enable it and report whether it works. To enable it, change src/gallium/auxiliary/translate/translate.c Changes in v5: - On Win64, preserve %xmm6 and %xmm7 as required by the ABI - Use _WIN64 instead of WIN64 Changes in v4: - Use x86_target() and x86_target_caps() - Enable translate_sse in x86-64, but not in Win64 Changes in v3: - Win64 support (untested) - Use u_cpu_detect.h constants instead of #ifs Changes in v2: - Minimize #ifs - Give a name to magic number CHANNELS_0001 - Add support for CPUs without SSE (only memcpy and swizzles, like non SSE2) - Fixed comments translate_sse is currently very limited to the point of being useless in essentially all cases. In particular, it only support some float32 and unorm8 formats and doesn't work on x86-64. This commit rewrites it to support: 1. Dumb memory copy for any pair of identical formats 2. All formats that are swizzles of each other 3. Converting 32/64-bit floats and all 8/16/32-bit integers to 32-bit float 4. Converting unorm8/snorm8 to snorm16 and uscaled8/sscaled8 to sscaled16 5. Support for x86-64 (doesn't take advantage of it in any way though) This new translate can even be useful to translate index buffers for cards that lack 8-bit index support. It passes the testsuite I wrote, but note that this is a major change, and more testing would be great.
* rtasm: add minimal x86-64 support and new instructions (v5)Luca Barbieri2010-08-163-40/+551
| | | | | | | | | | | | | | | | | | | | | | | | Changes in v5: - Add sse2_movdqa Changes in v4: - Use _WIN64 instead of WIN64 Changes in v3: - Add target and target caps functions, so that they could be different in principle from the current CPU and they don't need #ifs to check Changes in v2: - Win64 support (untested) - Use u_cpu_detect.h constants instead of #ifs This commit adds minimal x86-64 support: only movs between registers are supported for r8-r15, and x64_rexw() must be used to ask for 64-bit operations. It also adds several new instructions for the new translate_sse code. movdqa
* translate: add support for 8/16-bit indicesLuca Barbieri2010-08-165-19/+108
| | | | | Currently, only 32-bit indices are supported, but some use cases translate needs support for all types.
* translate_sse: remove useless generated function wrappersLuca Barbieri2010-08-161-51/+4
| | | | | | | | | | Currently translate_sse puts two trivial wrappers in the translate vtable. These slow it down and enlarge the source code for no gain, except perhaps the ability to set a breakpoint there, so remove them. Breakpoints can be set on the caller of the translate functions, with no loss of functionality.
* translate_generic: factor out common code between linear and indexedLuca Barbieri2010-08-161-115/+62
| | | | This moves the common code into a separate ALWAYS_INLINE function.
* translate_generic: use memcpy if possible (v3)Luca Barbieri2010-08-161-33/+75
| | | | | | | | | | | | | | | | | | | | | | | | Changes in v3: - If we can do a copy, don't try to get an emit func, as that can assert(0) Changes in v2: - Add comment regarding copy_size When used in GPU drivers, translate can be used to simultaneously perform a gather operation, and convert away from unsupported formats. In this use case, input and output formats will often be identical: clearly it would make sense to use a memcpy in this case. Instead, translate will insist to convert to and from 32-bit floating point numbers. This is not only extremely expensive, but it also loses precision for 32/64-bit integers and 64-bit floating point numbers. This patch changes translate_generic to just use memcpy if the formats are identical, non-blocked, and with an integral number of bytes per pixel (note that all sensible vertex formats are like this).
* drwa: Fix polygon edge flags.Chia-I Wu2010-08-161-1/+1
| | | | | Fix a copy-and-paste error introduced by f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9.
* draw: No need to make max_vertices even.Chia-I Wu2010-08-166-30/+0
| | | | | | | | | Triangle strip alternates the front/back orientation of its triangles. max_vertices was made even so that varray never splitted a triangle strip at the wrong positions. It did not work with triangle strips with adjacencies. And it is no longer relevant with vsplit.