diff --git a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc index 1d57ea2ba..4e3cc28f7 100644 --- a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc +++ b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc @@ -58,7 +58,46 @@ D3D11GraphicsDriver::D3D11GraphicsDriver( &buffer_desc, NULL, &state_.constant_buffers.gs_consts); // TODO(benvanik): pattern? - invalid_texture_view_ = NULL; + D3D11_TEXTURE2D_DESC texture_desc; + xe_zero_struct(&texture_desc, sizeof(texture_desc)); + texture_desc.Width = 4; + texture_desc.Height = 4; + texture_desc.MipLevels = 1; + texture_desc.ArraySize = 1; + texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + texture_desc.SampleDesc.Count = 1; + texture_desc.SampleDesc.Quality = 0; + texture_desc.Usage = D3D11_USAGE_IMMUTABLE; + texture_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + texture_desc.CPUAccessFlags = 0; + texture_desc.MiscFlags = 0; // D3D11_RESOURCE_MISC_GENERATE_MIPS? + uint32_t texture_data[] = { + 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, + 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, + 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, + 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00, + }; + D3D11_SUBRESOURCE_DATA initial_data; + initial_data.SysMemPitch = 4 * texture_desc.Width; + initial_data.SysMemSlicePitch = 0; + initial_data.pSysMem = texture_data; + ID3D11Texture2D* texture = NULL; + hr = device_->CreateTexture2D( + &texture_desc, &initial_data, (ID3D11Texture2D**)&texture); + if (FAILED(hr)) { + XEFATAL("D3D11: unable to create invalid texture"); + return; + } + + D3D11_SHADER_RESOURCE_VIEW_DESC texture_view_desc; + xe_zero_struct(&texture_view_desc, sizeof(texture_view_desc)); + texture_view_desc.Format = texture_desc.Format; + texture_view_desc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D; + texture_view_desc.Texture2D.MipLevels = 1; + texture_view_desc.Texture2D.MostDetailedMip = 0; + hr = device_->CreateShaderResourceView( + texture, &texture_view_desc, &invalid_texture_view_); + XESAFERELEASE(texture); D3D11_SAMPLER_DESC sampler_desc; xe_zero_struct(&sampler_desc, sizeof(sampler_desc)); @@ -79,6 +118,7 @@ D3D11GraphicsDriver::D3D11GraphicsDriver( &sampler_desc, &invalid_texture_sampler_state_); if (FAILED(hr)) { XEFATAL("D3D11: unable to create invalid sampler state"); + return; } }