[Mesa-dev] [PATCH v2 1/1] clover: Align kernel argument sizes to nearest power of 2
Francisco Jerez
currojerez at riseup.net
Fri Apr 25 11:41:56 PDT 2014
Jan Vesely <jan.vesely at rutgers.edu> writes:
> v2: use a new variable for aligned size
> add comment
> make both vars const
> only use the aligned value in argument constructors
> fix comment typo
>
> Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
Looks good to me, thanks,
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> ---
> .../state_trackers/clover/llvm/invocation.cpp | 23 +++++++++++++++-------
> 1 file changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> index a81bdf8..29d2986 100644
> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> @@ -64,6 +64,7 @@
>
> #include "pipe/p_state.h"
> #include "util/u_memory.h"
> +#include "util/u_math.h"
>
> #include <iostream>
> #include <iomanip>
> @@ -308,11 +309,19 @@ namespace {
> #endif
>
> llvm::Type *arg_type = arg.getType();
> - unsigned arg_size = TD.getTypeStoreSize(arg_type);
> + const unsigned arg_store_size = TD.getTypeStoreSize(arg_type);
> +
> + // OCL specs Ch. 6.1.5: "A built-in data type that is not a power
> + // of two bytes in size must be aligned to the next larger power of
> + // two."
> + // We need this alignment for three element vectors, which
> + // can have non-power-of-2 size.
> + const unsigned arg_api_size =
> + util_next_power_of_two(arg_store_size);
>
> llvm::Type *target_type = arg_type->isIntegerTy() ?
> - TD.getSmallestLegalIntType(mod->getContext(), arg_size * 8) :
> - arg_type;
> + TD.getSmallestLegalIntType(mod->getContext(), arg_store_size * 8)
> + : arg_type;
> unsigned target_size = TD.getTypeStoreSize(target_type);
> unsigned target_align = TD.getABITypeAlignment(target_type);
>
> @@ -326,19 +335,19 @@ namespace {
> if (address_space == address_spaces[clang::LangAS::opencl_local
> - clang::LangAS::Offset]) {
> args.push_back(module::argument(module::argument::local,
> - arg_size, target_size,
> + arg_api_size, target_size,
> target_align,
> module::argument::zero_ext));
> } else {
> // XXX: Correctly handle constant address space. There is no
> // way for r600g to pass a handle for constant buffers back
> // to clover like it can for global buffers, so
> - // creating constant arguements will break r600g. For now,
> + // creating constant arguments will break r600g. For now,
> // continue treating constant buffers as global buffers
> // until we can come up with a way to create handles for
> // constant buffers.
> args.push_back(module::argument(module::argument::global,
> - arg_size, target_size,
> + arg_api_size, target_size,
> target_align,
> module::argument::zero_ext));
> }
> @@ -352,7 +361,7 @@ namespace {
> module::argument::zero_ext);
>
> args.push_back(
> - module::argument(module::argument::scalar, arg_size,
> + module::argument(module::argument::scalar, arg_api_size,
> target_size, target_align, ext_type));
> }
> }
> --
> 1.9.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140425/d64b14ff/attachment.sig>
More information about the mesa-dev
mailing list