Jan Vesely <jan.ves...@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.ves...@rutgers.edu>

Looks good to me, thanks,
Reviewed-by: Francisco Jerez <curroje...@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

Attachment: pgp0pBbiUjKni.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to