gs_swap_chain::gs_swap_chain(gs_device *device, gs_init_data *data) : device (device), numBuffers (data->num_backbuffers), hwnd ((HWND)data->window.hwnd) { HRESULT hr; DXGI_SWAP_CHAIN_DESC swapDesc; make_swap_desc(swapDesc, data); hr = device->factory->CreateSwapChain(device->device, &swapDesc, swap.Assign()); if (FAILED(hr)) throw HRError("Failed to create swap chain", hr); Init(data); }
void gs_device::InitDevice(const gs_init_data *data, IDXGIAdapter *adapter) { wstring adapterName; DXGI_SWAP_CHAIN_DESC swapDesc; DXGI_ADAPTER_DESC desc; D3D_FEATURE_LEVEL levelUsed = D3D_FEATURE_LEVEL_9_3; HRESULT hr = 0; make_swap_desc(swapDesc, data); uint32_t createFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; #ifdef _DEBUG //createFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif adapterName = (adapter->GetDesc(&desc) == S_OK) ? desc.Description : L"<unknown>"; char *adapterNameUTF8; os_wcs_to_utf8_ptr(adapterName.c_str(), 0, &adapterNameUTF8); blog(LOG_INFO, "Loading up D3D11 on adapter %s (%" PRIu32 ")", adapterNameUTF8, data->adapter); bfree(adapterNameUTF8); hr = D3D11CreateDeviceAndSwapChain(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, createFlags, featureLevels, sizeof(featureLevels) / sizeof(D3D_FEATURE_LEVEL), D3D11_SDK_VERSION, &swapDesc, defaultSwap.swap.Assign(), device.Assign(), &levelUsed, context.Assign()); if (FAILED(hr)) throw UnsupportedHWError("Failed to create device and " "swap chain", hr); blog(LOG_INFO, "D3D11 loaded sucessfully, feature level used: %u", (unsigned int)levelUsed); defaultSwap.device = this; defaultSwap.hwnd = (HWND)data->window.hwnd; defaultSwap.numBuffers = data->num_backbuffers; defaultSwap.Init(data); }