                 if (sm == -1)
                     sm = get_compute_capability(gpu_compute_pair_forces_shared_kernel<evaluator, 0, 0>);
 
+                if (sm < 35) gpu_pair_force_bind_textures(pair_args);
+
                 block_size = block_size < max_block_size ? block_size : max_block_size;
                 dim3 grid(pair_args.N / (block_size/tpp) + 1, 1, 1);
                 if (sm < 30 && grid.x > 65535)

                  d_virial(_d_virial),
                  virial_pitch(_virial_pitch),
                  N(_N),
                  n_ghost(_n_ghost),
                  d_pos(_d_pos),
                  d_diameter(_d_diameter),
                  d_charge(_d_charge),

    cudaFuncAttributes attr;
    cudaFuncGetAttributes(&attr, func);
    return attr.binaryVersion;
    }

void gpu_pair_force_bind_textures(const pair_args_t pair_args)
    {
    // bind the position texture
    pdata_pos_tex.normalized = false;
    pdata_pos_tex.filterMode = cudaFilterModePoint;
    cudaBindTexture(0, pdata_pos_tex, pair_args.d_pos, sizeof(Scalar4)*pair_args.n_max);

    // bind the diamter texture
    pdata_diam_tex.normalized = false;
    pdata_diam_tex.filterMode = cudaFilterModePoint;
    cudaBindTexture(0, pdata_diam_tex, pair_args.d_diameter, sizeof(Scalar) * pair_args.n_max);

    pdata_charge_tex.normalized = false;
    pdata_charge_tex.filterMode = cudaFilterModePoint;
    cudaBindTexture(0, pdata_charge_tex, pair_args.d_charge, sizeof(Scalar) * pair_args.n_max);
    }

//! Kernel driver that computes lj forces on the GPU for LJForceComputeGPU
/*! \param pair_args Other arugments to pass onto the kernel
