diff options
| author | skallweitNV <64953474+skallweitNV@users.noreply.github.com> | 2022-11-07 17:59:15 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-07 08:59:15 -0800 |
| commit | ea99c274dea12fffdc89a8d4eeefcbb670232ba8 (patch) | |
| tree | fde86d173a4cca226433ec689c10dcc173b4fd16 /tools/gfx/d3d11/d3d11-device.cpp | |
| parent | 72ce0584d273ac5f04c3d9096f3523da68cc6fc1 (diff) | |
Initial version of DeviceLimits implemented in d3d12, d3d11, vulkan and cuda (#2496)
Diffstat (limited to 'tools/gfx/d3d11/d3d11-device.cpp')
| -rw-r--r-- | tools/gfx/d3d11/d3d11-device.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tools/gfx/d3d11/d3d11-device.cpp b/tools/gfx/d3d11/d3d11-device.cpp index 4872d2a54..f15c94da6 100644 --- a/tools/gfx/d3d11/d3d11-device.cpp +++ b/tools/gfx/d3d11/d3d11-device.cpp @@ -212,6 +212,81 @@ SlangResult DeviceImpl::initialize(const Desc& desc) m_immediateContext->GetData(m_disjointQuery, &disjointData, sizeof(disjointData), 0); m_info.timestampFrequency = disjointData.Frequency; } + + // Get device limits. + { + uint32_t maxTextureDimensionUV = 2048; + if (featureLevel >= D3D_FEATURE_LEVEL_9_3) + maxTextureDimensionUV = 4096; + if (featureLevel >= D3D_FEATURE_LEVEL_10_0) + maxTextureDimensionUV = 8192; + if (featureLevel >= D3D_FEATURE_LEVEL_11_0) + maxTextureDimensionUV = 16384; + + uint32_t maxTextureDimensionW = 256; + if (featureLevel >= D3D_FEATURE_LEVEL_10_0) + maxTextureDimensionW = 2048; + + uint32_t maxTextureDimensionCube = 512; + if (featureLevel >= D3D_FEATURE_LEVEL_9_3) + maxTextureDimensionCube = maxTextureDimensionUV; + + uint32_t maxInputElements = 16; + if (featureLevel >= D3D_FEATURE_LEVEL_10_1) + maxInputElements = 32; + + uint32_t maxColorAttachments = 4; + if (featureLevel >= D3D_FEATURE_LEVEL_10_1) + maxColorAttachments = 8; + + uint32_t maxComputeThreadGroupSizeXY = 0; + uint32_t maxComputeThreadGroupSizeZ = 0; + uint32_t maxComputeDispatchThreadGroupsZ = 0; + if (featureLevel >= D3D_FEATURE_LEVEL_10_0) + { + maxComputeThreadGroupSizeXY = D3D11_CS_4_X_THREAD_GROUP_MAX_X; + maxComputeThreadGroupSizeZ = 1; + maxComputeDispatchThreadGroupsZ = 1; + } + if (featureLevel >= D3D_FEATURE_LEVEL_11_0) + { + maxComputeThreadGroupSizeXY = D3D11_CS_THREAD_GROUP_MAX_X; + maxComputeThreadGroupSizeZ = D3D11_CS_THREAD_GROUP_MAX_Z; + maxComputeDispatchThreadGroupsZ = D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION; + } + + DeviceLimits limits = {}; + limits.maxTextureDimension1D = maxTextureDimensionUV; + limits.maxTextureDimension2D = maxTextureDimensionUV; + limits.maxTextureDimension3D = maxTextureDimensionW; + limits.maxTextureDimensionCube = maxTextureDimensionCube; + limits.maxTextureArrayLayers = maxTextureDimensionCube; + + limits.maxVertexInputElements = maxInputElements; + limits.maxVertexInputElementOffset = 256; // TODO + limits.maxVertexStreams = D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ; + limits.maxVertexStreamStride = D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES; + + limits.maxComputeThreadsPerGroup = D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP; + limits.maxComputeThreadGroupSize[0] = maxComputeThreadGroupSizeXY; + limits.maxComputeThreadGroupSize[1] = maxComputeThreadGroupSizeXY; + limits.maxComputeThreadGroupSize[2] = maxComputeThreadGroupSizeZ; + limits.maxComputeDispatchThreadGroups[0] = D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION; + limits.maxComputeDispatchThreadGroups[1] = D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION; + limits.maxComputeDispatchThreadGroups[2] = maxComputeDispatchThreadGroupsZ; + + limits.maxViewports = D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; + limits.maxViewportDimensions[0] = D3D11_VIEWPORT_BOUNDS_MAX; + limits.maxViewportDimensions[1] = D3D11_VIEWPORT_BOUNDS_MAX; + limits.maxFramebufferDimensions[0] = 4096; // TODO + limits.maxFramebufferDimensions[1] = 4096; // TODO + limits.maxFramebufferDimensions[2] = 1; + + limits.maxShaderVisibleSamplers = D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT; + + m_info.limits = limits; + } + return SLANG_OK; } |
