| 10 | using namespace gte; |
| 11 | |
| 12 | DX11Texture1Array::DX11Texture1Array(ID3D11Device* device, Texture1Array const* textureArray) |
| 13 | : |
| 14 | DX11TextureArray(textureArray) |
| 15 | { |
| 16 | // Specify the texture description. |
| 17 | D3D11_TEXTURE1D_DESC desc; |
| 18 | desc.Width = textureArray->GetLength(); |
| 19 | desc.MipLevels = textureArray->GetNumLevels(); |
| 20 | desc.ArraySize = textureArray->GetNumItems(); |
| 21 | desc.Format = static_cast<DXGI_FORMAT>(textureArray->GetFormat()); |
| 22 | desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; |
| 23 | desc.MiscFlags = D3D11_RESOURCE_MISC_NONE; |
| 24 | uint32_t usage = textureArray->GetUsage(); |
| 25 | if (usage == Resource::Usage::IMMUTABLE) |
| 26 | { |
| 27 | desc.Usage = D3D11_USAGE_IMMUTABLE; |
| 28 | desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE; |
| 29 | } |
| 30 | else if (usage == Resource::Usage::DYNAMIC_UPDATE) |
| 31 | { |
| 32 | desc.Usage = D3D11_USAGE_DYNAMIC; |
| 33 | desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; |
| 34 | } |
| 35 | else // usage == Resource::Usage::SHADER_OUTPUT |
| 36 | { |
| 37 | desc.Usage = D3D11_USAGE_DEFAULT; |
| 38 | desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS; |
| 39 | desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE; |
| 40 | } |
| 41 | |
| 42 | if (textureArray->WantAutogenerateMipmaps()) |
| 43 | { |
| 44 | desc.Usage = D3D11_USAGE_DEFAULT; |
| 45 | desc.BindFlags |= D3D11_BIND_RENDER_TARGET; |
| 46 | desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE; |
| 47 | desc.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; |
| 48 | } |
| 49 | |
| 50 | // Create the texture. |
| 51 | ID3D11Texture1D* dxTexture = nullptr; |
| 52 | if (textureArray->GetData()) |
| 53 | { |
| 54 | uint32_t const numSubresources = textureArray->GetNumSubresources(); |
| 55 | std::vector<D3D11_SUBRESOURCE_DATA> data(numSubresources); |
| 56 | for (uint32_t index = 0; index < numSubresources; ++index) |
| 57 | { |
| 58 | auto sr = textureArray->GetSubresource(index); |
| 59 | data[index].pSysMem = sr.data; |
| 60 | data[index].SysMemPitch = 0; |
| 61 | data[index].SysMemSlicePitch = 0; |
| 62 | } |
| 63 | DX11Log(device->CreateTexture1D(&desc, &data[0], &dxTexture)); |
| 64 | } |
| 65 | else |
| 66 | { |
| 67 | DX11Log(device->CreateTexture1D(&desc, nullptr, &dxTexture)); |
| 68 | } |
| 69 | mDXObject = dxTexture; |
nothing calls this directly
no test coverage detected