summaryrefslogtreecommitdiffstats
path: root/tools/gfx/d3d12
diff options
context:
space:
mode:
authorskallweitNV <64953474+skallweitNV@users.noreply.github.com>2022-11-07 17:59:15 +0100
committerGitHub <noreply@github.com>2022-11-07 08:59:15 -0800
commitea99c274dea12fffdc89a8d4eeefcbb670232ba8 (patch)
treefde86d173a4cca226433ec689c10dcc173b4fd16 /tools/gfx/d3d12
parent72ce0584d273ac5f04c3d9096f3523da68cc6fc1 (diff)
Initial version of DeviceLimits implemented in d3d12, d3d11, vulkan and cuda (#2496)
Diffstat (limited to 'tools/gfx/d3d12')
-rw-r--r--tools/gfx/d3d12/d3d12-device.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/gfx/d3d12/d3d12-device.cpp b/tools/gfx/d3d12/d3d12-device.cpp
index ebb416c39..3c6a98c2b 100644
--- a/tools/gfx/d3d12/d3d12-device.cpp
+++ b/tools/gfx/d3d12/d3d12-device.cpp
@@ -725,6 +725,40 @@ Result DeviceImpl::initialize(const Desc& desc)
// Retrieve timestamp frequency.
m_resourceCommandQueue->m_d3dQueue->GetTimestampFrequency(&m_info.timestampFrequency);
+ // Get device limits.
+ {
+ DeviceLimits limits = {};
+ limits.maxTextureDimension1D = D3D12_REQ_TEXTURE1D_U_DIMENSION;
+ limits.maxTextureDimension2D = D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ limits.maxTextureDimension3D = D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
+ limits.maxTextureDimensionCube = D3D12_REQ_TEXTURECUBE_DIMENSION;
+ limits.maxTextureArrayLayers = D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
+
+ limits.maxVertexInputElements = D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT;
+ limits.maxVertexInputElementOffset = 256; // TODO
+ limits.maxVertexStreams = D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT;
+ limits.maxVertexStreamStride = D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES;
+
+ limits.maxComputeThreadsPerGroup = D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP;
+ limits.maxComputeThreadGroupSize[0] = D3D12_CS_THREAD_GROUP_MAX_X;
+ limits.maxComputeThreadGroupSize[1] = D3D12_CS_THREAD_GROUP_MAX_Y;
+ limits.maxComputeThreadGroupSize[2] = D3D12_CS_THREAD_GROUP_MAX_Z;
+ limits.maxComputeDispatchThreadGroups[0] = D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION;
+ limits.maxComputeDispatchThreadGroups[1] = D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION;
+ limits.maxComputeDispatchThreadGroups[2] = D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION;
+
+ limits.maxViewports = D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
+ limits.maxViewportDimensions[0] = D3D12_VIEWPORT_BOUNDS_MAX;
+ limits.maxViewportDimensions[1] = D3D12_VIEWPORT_BOUNDS_MAX;
+ limits.maxFramebufferDimensions[0] = D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ limits.maxFramebufferDimensions[1] = D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ limits.maxFramebufferDimensions[2] = 1;
+
+ limits.maxShaderVisibleSamplers = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE;
+
+ m_info.limits = limits;
+ }
+
SLANG_RETURN_ON_FAIL(createTransientResourceHeapImpl(
ITransientResourceHeap::Flags::AllowResizing,
0,