예제 #1
0
device_memory = vkAllocateMemory(device = logical_device,
                                 pAllocateInfo = memAllocInfo,
                                 pAllocator = 0,
                                 )
                                   
logging.info('Make the GPU memory visible to CPU') 
_ppData = vkMapMemory(device = logical_device,
                      memory = device_memory,
                      offset = 0,
                      size = mem_size,
                      flags = 0)

# ************************************************************************************************
logging.info('Initialize the memory with random integer using _ppData, which is visible to CPU') 

ppData = ffi.from_buffer("int[]",_ppData)
print('** Assign random int between -1000 and 1000')
for x in range(buffer_length*2):
    ppData[x] = random.randint(-1000,1000)

# Further modify gpu memory (using numpy) from CPU. Finally, assign 4000 to input buffer and
# 0 to output buffer. 

arr = np.frombuffer(_ppData,dtype=np.int32)
print('** Numpy array:')
print(arr)

arr[2] = 100
print('** Buffer after assigning 100 to index 2:')
print('Numpy array: %r'%arr)
print(ppData[2])
예제 #2
0
def _new(ctype, **kwargs):
    _type = ffi.typeof(ctype)

    # keep only valued kwargs
    kwargs = {k: kwargs[k] for k in kwargs if kwargs[k]}

    # cast pointer
    ptrs = {}
    pfns = {}
    pcs = {}
    for k, v in kwargs.items():
        # convert tuple pair to dict
        ktype = dict(_type.fields)[k].type

        if k == 'pCode':
            pcs[k] = ffi.cast('uint32_t*', ffi.from_buffer(v))
        elif k.startswith('pfn'):
            pfn_name = _get_pfn_name(ctype)
            mod = sys.modules[__name__]
            setattr(mod, '_internal_' + pfn_name, v)
            pfns[k] = getattr(mod, '_external_' + pfn_name)
        elif ktype.kind == 'pointer':
            ptrs[k] = _cast_ptr(v, ktype)

    # init object
    init = dict(kwargs,  **{k: v for k, (v, _) in ptrs.items()})
    init.update(pfns)
    init.update(pcs)

    ret = ffi.new(_type.cname + '*', init)[0]