D3DContext::D3DContext(ApplicationWindow* targetWindow, const Description& description) : mTargetWindow(targetWindow) { if (!CreateDeviceAndSwapChain(description)) throw std::runtime_error("Failed to create device and swap chain"); if (!CreateBackBufferView()) throw std::runtime_error("Failed to create a back buffer view"); if (!CreateDepthStencilBuffer(description.DepthBuffer)) throw std::runtime_error("Failed to create a depth/stencil buffer"); mDevice->OMSetRenderTargets(1, &mBackBufferView, mDepthStencilView); SetViewports(description.Viewports); SetActiveViewport(0); }
//--------------------------------------------------------------- void CGraphicsLayer::InitD3D(int Width,int Height,int bpp) { //HRESULT r=0; m_rcScreenRect.top= m_rcScreenRect.left=0; m_rcScreenRect.right=Width; m_rcScreenRect.bottom=Height; if(CreateDeviceAndSwapChain()){return;} CreateShader(); if(CreateRasterizer()){return;} CreateViewport(); CreateDepthStencilBuffer(); m_pDeviceContext->OMSetRenderTargets(1,&m_pRenderTargetView,m_pDepthStencilView); }
D3DWrapper::D3DWrapper(Window* targetWindow, const Description& description) : m_targetWindow(targetWindow) { HRESULT result = S_OK; m_targetWindow->AddEventListener(this); result = CreateDeviceAndSwapChain(description.m_displayMode, description.m_fullscreen); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create device and swap chain"); result = CreateBackBufferView(); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create back buffer view"); result = CreateDepthStencilBuffer(description.m_displayMode.m_width, description.m_displayMode.m_height); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create depth stencil buffer/view"); m_deviceContext->OMSetRenderTargets(1, &m_backBufferView.Resource(), m_depthStencilView.Resource()); SetViewports(description.m_viewports); }
void CFXAPISample::Initialize () { window_.reset (new Window ("AMD CFX API test", 1920, 1080)); CreateDeviceAndSwapChain (); InitializeAMDCFXAPI (); CreateMeshBuffers (); D3D11_DEPTH_STENCIL_DESC dsDesc = {}; dsDesc.DepthEnable = false; dsDesc.DepthFunc = D3D11_COMPARISON_ALWAYS; device_->CreateDepthStencilState (&dsDesc, &depthStencilState_); ComPtr<ID3DBlob> vsCode, psCode; D3DCompileFromFile (L"..\\src\\Shaders\\shaders.hlsl", nullptr, nullptr, "VS_main", "vs_5_0", 0, 0, &vsCode, nullptr); D3DCompileFromFile (L"..\\src\\Shaders\\shaders.hlsl", nullptr, nullptr, "PS_main", "ps_5_0", 0, 0, &psCode, nullptr); D3D11_INPUT_ELEMENT_DESC layoutDesc[] = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0} }; device_->CreateVertexShader (vsCode->GetBufferPointer (), vsCode->GetBufferSize (), 0, &vertexShader_); device_->CreatePixelShader (psCode->GetBufferPointer (), psCode->GetBufferSize (), nullptr, &pixelShader_); device_->CreateInputLayout (layoutDesc, 2, vsCode->GetBufferPointer (), vsCode->GetBufferSize (), &inputLayout_); D3D11_TEXTURE2D_DESC textureDesc; textureDesc.ArraySize = 1; textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; textureDesc.CPUAccessFlags = 0; textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; textureDesc.Height = 1; textureDesc.MipLevels = 1; textureDesc.MiscFlags = 0; textureDesc.SampleDesc.Count = 1; textureDesc.SampleDesc.Quality = 0; textureDesc.Usage = D3D11_USAGE_DEFAULT; textureDesc.Width = 1; if (cfxEnabled_) { // Our texture is also a render target and is only updated every second // frame. Create it using the Crossfire API to enable transfers on it. agsDriverExtensions_CreateTexture2D (agsContext_, &textureDesc, nullptr, &texture_, // If set to TransferDisable, flickering will be present // as the updated version is not transfered to the second GPU. // With TransferApp1StepP2P, the Crossfire API will copy the // data to the second GPU. AGS_AFR_TRANSFER_1STEP_P2P); } else { device_->CreateTexture2D (&textureDesc, nullptr, &texture_); } device_->CreateShaderResourceView (texture_.Get (), nullptr, &textureSRV_); device_->CreateRenderTargetView (texture_.Get (), nullptr, &textureRTV_); textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; device_->CreateTexture2D (&textureDesc, nullptr, &uploadTexture_); device_->CreateShaderResourceView (uploadTexture_.Get (), nullptr, &uploadTextureSRV_); }