diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index 57bb63fc81c..0dcaa777a69 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -520,6 +520,7 @@ dzn_physical_device_cache_caps(struct dzn_physical_device *pdev) ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_ARCHITECTURE1, &pdev->architecture, sizeof(pdev->architecture)); ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS, &pdev->options, sizeof(pdev->options)); + ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS1, &pdev->options1, sizeof(pdev->options1)); ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS2, &pdev->options2, sizeof(pdev->options2)); ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS3, &pdev->options3, sizeof(pdev->options3)); ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS12, &pdev->options12, sizeof(pdev->options12)); @@ -1708,6 +1709,10 @@ dzn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, pdevice->desc.dedicated_system_memory + pdevice->desc.shared_system_memory) / 4, 128ull * 1024 * 1024, 2ull * 1024 * 1024 * 1024), + .subgroupSupportedOperations = VK_SUBGROUP_FEATURE_BASIC_BIT, + .subgroupSupportedStages = VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_COMPUTE_BIT | + VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT, + .subgroupSize = pdevice->options1.WaveOps ? pdevice->options1.WaveLaneCountMin : 1, }; memcpy(core_1_1.driverUUID, pdevice->driver_uuid, VK_UUID_SIZE); memcpy(core_1_1.deviceUUID, pdevice->device_uuid, VK_UUID_SIZE); @@ -1783,6 +1788,11 @@ dzn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVulkan13Properties core_1_3 = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES, + .minSubgroupSize = pdevice->options1.WaveOps ? pdevice->options1.WaveLaneCountMin : 1, + .minSubgroupSize = pdevice->options1.WaveOps ? pdevice->options1.WaveLaneCountMax : 1, + .maxComputeWorkgroupSubgroups = D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP / + (pdevice->options1.WaveOps ? pdevice->options1.WaveLaneCountMin : 1), + .requiredSubgroupSizeStages = 0, }; vk_foreach_struct(ext, pProperties->pNext) { diff --git a/src/microsoft/vulkan/dzn_pipeline.c b/src/microsoft/vulkan/dzn_pipeline.c index 60515cf568b..929c88f02f4 100644 --- a/src/microsoft/vulkan/dzn_pipeline.c +++ b/src/microsoft/vulkan/dzn_pipeline.c @@ -219,6 +219,7 @@ dzn_pipeline_get_nir_shader(struct dzn_device *device, .caps = { .draw_parameters = true, .multiview = true, + .subgroup_basic = true, }, .ubo_addr_format = nir_address_format_32bit_index_offset, .ssbo_addr_format = nir_address_format_32bit_index_offset, diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h index 2f7d3d1cf4a..aab1ce4332b 100644 --- a/src/microsoft/vulkan/dzn_private.h +++ b/src/microsoft/vulkan/dzn_private.h @@ -207,6 +207,7 @@ struct dzn_physical_device { D3D_ROOT_SIGNATURE_VERSION root_sig_version; D3D12_FEATURE_DATA_ARCHITECTURE1 architecture; D3D12_FEATURE_DATA_D3D12_OPTIONS options; + D3D12_FEATURE_DATA_D3D12_OPTIONS1 options1; D3D12_FEATURE_DATA_D3D12_OPTIONS2 options2; D3D12_FEATURE_DATA_D3D12_OPTIONS3 options3; D3D12_FEATURE_DATA_D3D12_OPTIONS12 options12;