diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-10-28 18:24:26 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-10-28 18:28:23 +0300 |
commit | c63925853fd27683fbdf7b61804e5526693d376a (patch) | |
tree | 62ca514feeca52161cbaae6aeaf775d5a46c241e | |
parent | 472c2277f5492495a170d6251b748d27e848003b (diff) |
vkd3d: Stub out the more recent FEATURE_DATA structs.update-idl
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | libs/vkd3d/device.c | 111 | ||||
-rw-r--r-- | libs/vkd3d/vkd3d_private.h | 4 |
2 files changed, 115 insertions, 0 deletions
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 9be4429e..5d8ed7b8 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -3574,6 +3574,76 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(d3d12_device_i return S_OK; } + case D3D12_FEATURE_D3D12_OPTIONS8: + { + D3D12_FEATURE_DATA_D3D12_OPTIONS8 *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + *data = device->d3d12_caps.options8; + + TRACE("Unaligned block textures supported %u.\n", data->UnalignedBlockTexturesSupported); + return S_OK; + } + + case D3D12_FEATURE_D3D12_OPTIONS9: + { + D3D12_FEATURE_DATA_D3D12_OPTIONS9 *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + *data = device->d3d12_caps.options9; + + TRACE("AtomicInt64 on typed resource supported %u.\n", data->AtomicInt64OnTypedResourceSupported); + TRACE("AtomicInt64 on group shared supported %u.\n", data->AtomicInt64OnGroupSharedSupported); + TRACE("Mesh shader pipeline stats supported %u.\n", data->MeshShaderPipelineStatsSupported); + TRACE("Mesh shader supports full range render target array index %u.\n", data->MeshShaderSupportsFullRangeRenderTargetArrayIndex); + TRACE("Derivatives in mesh and amplification shaders supported %u.\n", data->DerivativesInMeshAndAmplificationShadersSupported); + TRACE("Wave MMA tier #%x.\n", data->WaveMMATier); + return S_OK; + } + + case D3D12_FEATURE_D3D12_OPTIONS10: + { + D3D12_FEATURE_DATA_D3D12_OPTIONS10 *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + *data = device->d3d12_caps.options10; + + TRACE("Variable rate shading sum combiner supported %u.\n", data->VariableRateShadingSumCombinerSupported); + TRACE("Mesh shader per primitive shading rate supported %u.\n", data->MeshShaderPerPrimitiveShadingRateSupported); + return S_OK; + } + + case D3D12_FEATURE_D3D12_OPTIONS11: + { + D3D12_FEATURE_DATA_D3D12_OPTIONS11 *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + *data = device->d3d12_caps.options11; + + TRACE("AtomicInt64 on descriptor heap resource supported %u.\n", data->AtomicInt64OnDescriptorHeapResourceSupported); + return S_OK; + } + case D3D12_FEATURE_QUERY_META_COMMAND: { D3D12_FEATURE_DATA_QUERY_META_COMMAND *data = feature_data; @@ -5170,6 +5240,43 @@ static void d3d12_device_caps_init_feature_options7(struct d3d12_device *device) options7->SamplerFeedbackTier = D3D12_SAMPLER_FEEDBACK_TIER_NOT_SUPPORTED; } +static void d3d12_device_caps_init_feature_options8(struct d3d12_device *device) +{ + D3D12_FEATURE_DATA_D3D12_OPTIONS8 *options8 = &device->d3d12_caps.options8; + + /* Advertise that it is possible to use a top mip level which is not aligned to 4. + * Weird legacy D3D11 requirement that is not relevant anymore, and does not exist in Vulkan. */ + options8->UnalignedBlockTexturesSupported = TRUE; +} + +static void d3d12_device_caps_init_feature_options9(struct d3d12_device *device) +{ + D3D12_FEATURE_DATA_D3D12_OPTIONS9 *options9 = &device->d3d12_caps.options9; + + options9->AtomicInt64OnGroupSharedSupported = FALSE; /* TODO */ + options9->AtomicInt64OnTypedResourceSupported = FALSE; /* TODO */ + options9->DerivativesInMeshAndAmplificationShadersSupported = FALSE; + options9->MeshShaderSupportsFullRangeRenderTargetArrayIndex = FALSE; + options9->MeshShaderPipelineStatsSupported = FALSE; + options9->WaveMMATier = D3D12_WAVE_MMA_TIER_NOT_SUPPORTED; +} + +static void d3d12_device_caps_init_feature_options10(struct d3d12_device *device) +{ + D3D12_FEATURE_DATA_D3D12_OPTIONS10 *options10 = &device->d3d12_caps.options10; + + options10->VariableRateShadingSumCombinerSupported = + d3d12_device_determine_variable_shading_rate_tier(device) >= D3D12_VARIABLE_SHADING_RATE_TIER_1; + options10->MeshShaderPerPrimitiveShadingRateSupported = FALSE; +} + +static void d3d12_device_caps_init_feature_options11(struct d3d12_device *device) +{ + D3D12_FEATURE_DATA_D3D12_OPTIONS11 *options11 = &device->d3d12_caps.options11; + + options11->AtomicInt64OnDescriptorHeapResourceSupported = FALSE; /* TODO */ +} + static void d3d12_device_caps_init_feature_level(struct d3d12_device *device) { const VkPhysicalDeviceFeatures *features = &device->device_info.features2.features; @@ -5405,6 +5512,10 @@ static void d3d12_device_caps_init(struct d3d12_device *device) d3d12_device_caps_init_feature_options5(device); d3d12_device_caps_init_feature_options6(device); d3d12_device_caps_init_feature_options7(device); + d3d12_device_caps_init_feature_options8(device); + d3d12_device_caps_init_feature_options9(device); + d3d12_device_caps_init_feature_options10(device); + d3d12_device_caps_init_feature_options11(device); d3d12_device_caps_init_feature_level(device); d3d12_device_caps_override(device); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index a4055825..83578854 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -2739,6 +2739,10 @@ struct d3d12_caps D3D12_FEATURE_DATA_D3D12_OPTIONS5 options5; D3D12_FEATURE_DATA_D3D12_OPTIONS6 options6; D3D12_FEATURE_DATA_D3D12_OPTIONS7 options7; + D3D12_FEATURE_DATA_D3D12_OPTIONS8 options8; + D3D12_FEATURE_DATA_D3D12_OPTIONS9 options9; + D3D12_FEATURE_DATA_D3D12_OPTIONS10 options10; + D3D12_FEATURE_DATA_D3D12_OPTIONS11 options11; D3D_FEATURE_LEVEL max_feature_level; D3D_SHADER_MODEL max_shader_model; |