HRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags, ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect) { struct d3d10_effect *object; HRESULT hr; FIXME("data %p, data_size %lu, flags %#x, device %p, effect_pool %p, effect %p stub!\n", data, data_size, flags, device, effect_pool, effect); if (!(object = heap_alloc_zero(sizeof(*object)))) { ERR("Failed to allocate D3D10 effect object memory\n"); return E_OUTOFMEMORY; } wine_rb_init(&object->types, d3d10_effect_type_compare); object->ID3D10Effect_iface.lpVtbl = &d3d10_effect_vtbl; object->refcount = 1; ID3D10Device_AddRef(device); object->device = device; hr = d3d10_effect_parse(object, data, data_size); if (FAILED(hr)) { ERR("Failed to parse effect\n"); IUnknown_Release(&object->ID3D10Effect_iface); return hr; } *effect = &object->ID3D10Effect_iface; TRACE("Created ID3D10Effect %p\n", object); return S_OK; }
HRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags, ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect) { struct d3d10_effect *object; HRESULT hr; FIXME("data %p, data_size %lu, flags %#x, device %p, effect_pool %p, effect %p stub!\n", data, data_size, flags, device, effect_pool, effect); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { ERR("Failed to allocate D3D10 effect object memory\n"); return E_OUTOFMEMORY; } if (wine_rb_init(&object->types, &d3d10_effect_type_rb_functions) == -1) { ERR("Failed to initialize type rbtree.\n"); HeapFree(GetProcessHeap(), 0, object); return E_FAIL; } object->ID3D10Effect_iface.lpVtbl = &d3d10_effect_vtbl; object->refcount = 1; ID3D10Device_AddRef(device); object->device = device; hr = d3d10_effect_parse(object, data, data_size); if (FAILED(hr)) { ERR("Failed to parse effect\n"); IUnknown_Release(&object->ID3D10Effect_iface); return hr; } *effect = &object->ID3D10Effect_iface; TRACE("Created ID3D10Effect %p\n", object); return S_OK; }
/*********************************************************************** * Creates and links a new module to a process */ struct module* module_new(struct process* pcs, const WCHAR* name, enum module_type type, BOOL virtual, DWORD64 mod_addr, DWORD64 size, unsigned long stamp, unsigned long checksum) { struct module* module; unsigned i; assert(type == DMT_ELF || type == DMT_PE || type == DMT_MACHO); if (!(module = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*module)))) return NULL; module->next = pcs->lmodules; pcs->lmodules = module; TRACE("=> %s %s-%s %s\n", get_module_type(type, virtual), wine_dbgstr_longlong(mod_addr), wine_dbgstr_longlong(mod_addr + size), debugstr_w(name)); pool_init(&module->pool, 65536); module->process = pcs; module->module.SizeOfStruct = sizeof(module->module); module->module.BaseOfImage = mod_addr; module->module.ImageSize = size; module_set_module(module, name); module->module.ImageName[0] = '\0'; lstrcpynW(module->module.LoadedImageName, name, sizeof(module->module.LoadedImageName) / sizeof(WCHAR)); module->module.SymType = SymNone; module->module.NumSyms = 0; module->module.TimeDateStamp = stamp; module->module.CheckSum = checksum; memset(module->module.LoadedPdbName, 0, sizeof(module->module.LoadedPdbName)); module->module.CVSig = 0; memset(module->module.CVData, 0, sizeof(module->module.CVData)); module->module.PdbSig = 0; memset(&module->module.PdbSig70, 0, sizeof(module->module.PdbSig70)); module->module.PdbAge = 0; module->module.PdbUnmatched = FALSE; module->module.DbgUnmatched = FALSE; module->module.LineNumbers = FALSE; module->module.GlobalSymbols = FALSE; module->module.TypeInfo = FALSE; module->module.SourceIndexed = FALSE; module->module.Publics = FALSE; module->reloc_delta = 0; module->type = type; module->is_virtual = virtual; for (i = 0; i < DFI_LAST; i++) module->format_info[i] = NULL; module->sortlist_valid = FALSE; module->sorttab_size = 0; module->addr_sorttab = NULL; module->num_sorttab = 0; module->num_symbols = 0; vector_init(&module->vsymt, sizeof(struct symt*), 128); /* FIXME: this seems a bit too high (on a per module basis) * need some statistics about this */ hash_table_init(&module->pool, &module->ht_symbols, 4096); hash_table_init(&module->pool, &module->ht_types, 4096); vector_init(&module->vtypes, sizeof(struct symt*), 32); module->sources_used = 0; module->sources_alloc = 0; module->sources = 0; wine_rb_init(&module->sources_offsets_tree, &source_rb_functions); return module; }