mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d: Add support for VK_EXT_depth_clip_enable.
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
committed by
Alexandre Julliard
parent
32aa45a86d
commit
a95c9f8ad8
@ -67,7 +67,7 @@ AS_IF([test "x$ac_cv_header_spirv_unified1_GLSL_std_450_h" != "xyes" \
|
|||||||
-a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
|
-a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
|
||||||
[AC_MSG_ERROR([GLSL.std.450.h not found.])])
|
[AC_MSG_ERROR([GLSL.std.450.h not found.])])
|
||||||
|
|
||||||
VKD3D_CHECK_VULKAN_HEADER_VERSION([88], [AC_MSG_ERROR([Vulkan headers are too old, 1.1.88 is required.])])
|
VKD3D_CHECK_VULKAN_HEADER_VERSION([101], [AC_MSG_ERROR([Vulkan headers are too old, 1.1.101 is required.])])
|
||||||
|
|
||||||
dnl Check for libraries
|
dnl Check for libraries
|
||||||
m4_ifdef([PKG_PROG_PKG_CONFIG], [PKG_PROG_PKG_CONFIG], [m4_fatal([pkg-config autoconf macros not found.])])
|
m4_ifdef([PKG_PROG_PKG_CONFIG], [PKG_PROG_PKG_CONFIG], [m4_fatal([pkg-config autoconf macros not found.])])
|
||||||
|
@ -135,6 +135,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] =
|
|||||||
{VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, KHR_push_descriptor)},
|
{VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, KHR_push_descriptor)},
|
||||||
/* EXT extensions */
|
/* EXT extensions */
|
||||||
{VK_EXT_DEBUG_MARKER_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, EXT_debug_marker)},
|
{VK_EXT_DEBUG_MARKER_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, EXT_debug_marker)},
|
||||||
|
{VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, EXT_depth_clip_enable)},
|
||||||
{VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, EXT_descriptor_indexing)},
|
{VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, EXT_descriptor_indexing)},
|
||||||
{VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
|
{VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
|
||||||
offsetof(struct vkd3d_vulkan_info, EXT_transform_feedback)},
|
offsetof(struct vkd3d_vulkan_info, EXT_transform_feedback)},
|
||||||
@ -899,6 +900,7 @@ static void vkd3d_trace_physical_device_features(const VkPhysicalDeviceFeatures2
|
|||||||
{
|
{
|
||||||
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features;
|
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features;
|
||||||
const VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing;
|
const VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing;
|
||||||
|
const VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_features;
|
||||||
const VkPhysicalDeviceFeatures *features = &features2->features;
|
const VkPhysicalDeviceFeatures *features = &features2->features;
|
||||||
const VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb;
|
const VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb;
|
||||||
|
|
||||||
@ -1009,6 +1011,13 @@ static void vkd3d_trace_physical_device_features(const VkPhysicalDeviceFeatures2
|
|||||||
descriptor_indexing->runtimeDescriptorArray);
|
descriptor_indexing->runtimeDescriptorArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
depth_clip_features = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT);
|
||||||
|
if (depth_clip_features)
|
||||||
|
{
|
||||||
|
TRACE(" VkPhysicalDeviceDepthClipEnableFeaturesEXT:\n");
|
||||||
|
TRACE(" depthClipEnable: %#x.\n", depth_clip_features->depthClipEnable);
|
||||||
|
}
|
||||||
|
|
||||||
xfb = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT);
|
xfb = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT);
|
||||||
if (xfb)
|
if (xfb)
|
||||||
{
|
{
|
||||||
@ -1080,6 +1089,8 @@ static void vkd3d_init_feature_level(struct vkd3d_vulkan_info *vk_info,
|
|||||||
CHECK_FEATURE(shaderStorageImageWriteWithoutFormat);
|
CHECK_FEATURE(shaderStorageImageWriteWithoutFormat);
|
||||||
CHECK_FEATURE(tessellationShader);
|
CHECK_FEATURE(tessellationShader);
|
||||||
|
|
||||||
|
if (!vk_info->EXT_depth_clip_enable)
|
||||||
|
WARN("Depth clip enable is not supported.\n");
|
||||||
if (!vk_info->EXT_transform_feedback)
|
if (!vk_info->EXT_transform_feedback)
|
||||||
WARN("Stream output is not supported.\n");
|
WARN("Stream output is not supported.\n");
|
||||||
|
|
||||||
@ -1113,6 +1124,7 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
|
|||||||
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT vertex_divisor_properties;
|
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT vertex_divisor_properties;
|
||||||
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features;
|
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features;
|
||||||
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
||||||
|
const VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_features;
|
||||||
VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing;
|
VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing;
|
||||||
VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
|
VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
|
||||||
VkPhysicalDeviceTransformFeedbackPropertiesEXT xfb_properties;
|
VkPhysicalDeviceTransformFeedbackPropertiesEXT xfb_properties;
|
||||||
@ -1240,6 +1252,12 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
|
|||||||
optional_extensions ? optional_extensions->extension_count : 0,
|
optional_extensions ? optional_extensions->extension_count : 0,
|
||||||
*user_extension_supported, vulkan_info, "device");
|
*user_extension_supported, vulkan_info, "device");
|
||||||
|
|
||||||
|
depth_clip_features = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT);
|
||||||
|
if (depth_clip_features)
|
||||||
|
{
|
||||||
|
vulkan_info->EXT_depth_clip_enable = depth_clip_features->depthClipEnable;
|
||||||
|
}
|
||||||
|
|
||||||
divisor_features = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT);
|
divisor_features = vk_find_struct(features2->pNext, PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT);
|
||||||
if (get_spec_version(vk_extensions, count, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME) >= 3
|
if (get_spec_version(vk_extensions, count, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME) >= 3
|
||||||
&& divisor_features)
|
&& divisor_features)
|
||||||
@ -1522,6 +1540,7 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||||||
VkPhysicalDeviceDescriptorIndexingFeaturesEXT descriptor_indexing_features;
|
VkPhysicalDeviceDescriptorIndexingFeaturesEXT descriptor_indexing_features;
|
||||||
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_divisor_features;
|
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_divisor_features;
|
||||||
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
||||||
|
VkPhysicalDeviceDepthClipEnableFeaturesEXT depth_clip_features;
|
||||||
VkPhysicalDeviceTransformFeedbackFeaturesEXT xfb_features;
|
VkPhysicalDeviceTransformFeedbackFeaturesEXT xfb_features;
|
||||||
struct vkd3d_vulkan_info *vulkan_info = &device->vk_info;
|
struct vkd3d_vulkan_info *vulkan_info = &device->vk_info;
|
||||||
struct vkd3d_device_queue_info device_queue_info;
|
struct vkd3d_device_queue_info device_queue_info;
|
||||||
@ -1558,8 +1577,11 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||||||
|
|
||||||
VK_CALL(vkGetPhysicalDeviceMemoryProperties(physical_device, &device->memory_properties));
|
VK_CALL(vkGetPhysicalDeviceMemoryProperties(physical_device, &device->memory_properties));
|
||||||
|
|
||||||
|
memset(&depth_clip_features, 0, sizeof(depth_clip_features));
|
||||||
|
depth_clip_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
|
||||||
memset(&descriptor_indexing_features, 0, sizeof(descriptor_indexing_features));
|
memset(&descriptor_indexing_features, 0, sizeof(descriptor_indexing_features));
|
||||||
descriptor_indexing_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
|
descriptor_indexing_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
|
||||||
|
descriptor_indexing_features.pNext = &depth_clip_features.pNext;
|
||||||
memset(&xfb_features, 0, sizeof(xfb_features));
|
memset(&xfb_features, 0, sizeof(xfb_features));
|
||||||
xfb_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
|
xfb_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
|
||||||
xfb_features.pNext = &descriptor_indexing_features;
|
xfb_features.pNext = &descriptor_indexing_features;
|
||||||
|
@ -19,6 +19,16 @@
|
|||||||
|
|
||||||
#include "vkd3d_private.h"
|
#include "vkd3d_private.h"
|
||||||
|
|
||||||
|
static void vk_append_struct(void *h, void *structure)
|
||||||
|
{
|
||||||
|
VkBaseOutStructure *header = h;
|
||||||
|
|
||||||
|
while (header->pNext)
|
||||||
|
header = header->pNext;
|
||||||
|
|
||||||
|
header->pNext = structure;
|
||||||
|
}
|
||||||
|
|
||||||
/* ID3D12RootSignature */
|
/* ID3D12RootSignature */
|
||||||
static inline struct d3d12_root_signature *impl_from_ID3D12RootSignature(ID3D12RootSignature *iface)
|
static inline struct d3d12_root_signature *impl_from_ID3D12RootSignature(ID3D12RootSignature *iface)
|
||||||
{
|
{
|
||||||
@ -1496,7 +1506,7 @@ static enum VkCullModeFlagBits vk_cull_mode_from_d3d12(D3D12_CULL_MODE mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rs_desc_from_d3d12(struct VkPipelineRasterizationStateCreateInfo *vk_desc,
|
static void rs_desc_from_d3d12(VkPipelineRasterizationStateCreateInfo *vk_desc,
|
||||||
const D3D12_RASTERIZER_DESC *d3d12_desc)
|
const D3D12_RASTERIZER_DESC *d3d12_desc)
|
||||||
{
|
{
|
||||||
vk_desc->sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
vk_desc->sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
||||||
@ -1523,7 +1533,20 @@ static void rs_desc_from_d3d12(struct VkPipelineRasterizationStateCreateInfo *vk
|
|||||||
FIXME("Ignoring ConservativeRaster %#x.\n", d3d12_desc->ConservativeRaster);
|
FIXME("Ignoring ConservativeRaster %#x.\n", d3d12_desc->ConservativeRaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rs_stream_desc_from_d3d12(VkPipelineRasterizationStateStreamCreateInfoEXT *vk_desc,
|
static void rs_depth_clip_info_from_d3d12(VkPipelineRasterizationDepthClipStateCreateInfoEXT *depth_clip_info,
|
||||||
|
VkPipelineRasterizationStateCreateInfo *vk_rs_desc, const D3D12_RASTERIZER_DESC *d3d12_desc)
|
||||||
|
{
|
||||||
|
vk_rs_desc->depthClampEnable = VK_TRUE;
|
||||||
|
|
||||||
|
depth_clip_info->sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT;
|
||||||
|
depth_clip_info->pNext = NULL;
|
||||||
|
depth_clip_info->flags = 0;
|
||||||
|
depth_clip_info->depthClipEnable = d3d12_desc->DepthClipEnable;
|
||||||
|
|
||||||
|
vk_append_struct(vk_rs_desc, depth_clip_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rs_stream_info_from_d3d12(VkPipelineRasterizationStateStreamCreateInfoEXT *stream_info,
|
||||||
VkPipelineRasterizationStateCreateInfo *vk_rs_desc, const D3D12_STREAM_OUTPUT_DESC *so_desc,
|
VkPipelineRasterizationStateCreateInfo *vk_rs_desc, const D3D12_STREAM_OUTPUT_DESC *so_desc,
|
||||||
const struct vkd3d_vulkan_info *vk_info)
|
const struct vkd3d_vulkan_info *vk_info)
|
||||||
{
|
{
|
||||||
@ -1536,12 +1559,12 @@ static void rs_stream_desc_from_d3d12(VkPipelineRasterizationStateStreamCreateIn
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vk_desc->sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT;
|
stream_info->sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT;
|
||||||
vk_desc->pNext = NULL;
|
stream_info->pNext = NULL;
|
||||||
vk_desc->flags = 0;
|
stream_info->flags = 0;
|
||||||
vk_desc->rasterizationStream = so_desc->RasterizedStream;
|
stream_info->rasterizationStream = so_desc->RasterizedStream;
|
||||||
|
|
||||||
vk_rs_desc->pNext = vk_desc;
|
vk_append_struct(vk_rs_desc, stream_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum VkStencilOp vk_stencil_op_from_d3d12(D3D12_STENCIL_OP op)
|
static enum VkStencilOp vk_stencil_op_from_d3d12(D3D12_STENCIL_OP op)
|
||||||
@ -1859,13 +1882,13 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
struct vkd3d_shader_interface_info shader_interface;
|
struct vkd3d_shader_interface_info shader_interface;
|
||||||
const struct d3d12_root_signature *root_signature;
|
const struct d3d12_root_signature *root_signature;
|
||||||
struct vkd3d_shader_signature input_signature;
|
struct vkd3d_shader_signature input_signature;
|
||||||
struct VkSubpassDescription sub_pass_desc;
|
|
||||||
struct VkRenderPassCreateInfo pass_desc;
|
|
||||||
VkShaderStageFlagBits xfb_stage = 0;
|
VkShaderStageFlagBits xfb_stage = 0;
|
||||||
VkSampleCountFlagBits sample_count;
|
VkSampleCountFlagBits sample_count;
|
||||||
|
VkSubpassDescription sub_pass_desc;
|
||||||
const struct vkd3d_format *format;
|
const struct vkd3d_format *format;
|
||||||
enum VkVertexInputRate input_rate;
|
VkRenderPassCreateInfo pass_desc;
|
||||||
unsigned int instance_divisor;
|
unsigned int instance_divisor;
|
||||||
|
VkVertexInputRate input_rate;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
size_t rt_count;
|
size_t rt_count;
|
||||||
uint32_t mask;
|
uint32_t mask;
|
||||||
@ -2333,7 +2356,9 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
|| so_desc->RasterizedStream == D3D12_SO_NO_RASTERIZED_STREAM)
|
|| so_desc->RasterizedStream == D3D12_SO_NO_RASTERIZED_STREAM)
|
||||||
graphics->rs_desc.rasterizerDiscardEnable = VK_TRUE;
|
graphics->rs_desc.rasterizerDiscardEnable = VK_TRUE;
|
||||||
|
|
||||||
rs_stream_desc_from_d3d12(&graphics->rs_stream_desc, &graphics->rs_desc, so_desc, vk_info);
|
rs_stream_info_from_d3d12(&graphics->rs_stream_info, &graphics->rs_desc, so_desc, vk_info);
|
||||||
|
if (vk_info->EXT_depth_clip_enable)
|
||||||
|
rs_depth_clip_info_from_d3d12(&graphics->rs_depth_clip_info, &graphics->rs_desc, &desc->RasterizerState);
|
||||||
|
|
||||||
graphics->ms_desc.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
graphics->ms_desc.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
||||||
graphics->ms_desc.pNext = NULL;
|
graphics->ms_desc.pNext = NULL;
|
||||||
|
@ -95,6 +95,7 @@ struct vkd3d_vulkan_info
|
|||||||
bool KHR_push_descriptor;
|
bool KHR_push_descriptor;
|
||||||
/* EXT device extensions */
|
/* EXT device extensions */
|
||||||
bool EXT_debug_marker;
|
bool EXT_debug_marker;
|
||||||
|
bool EXT_depth_clip_enable;
|
||||||
bool EXT_descriptor_indexing;
|
bool EXT_descriptor_indexing;
|
||||||
bool EXT_transform_feedback;
|
bool EXT_transform_feedback;
|
||||||
bool EXT_vertex_attribute_divisor;
|
bool EXT_vertex_attribute_divisor;
|
||||||
@ -629,7 +630,8 @@ struct d3d12_graphics_pipeline_state
|
|||||||
VkPipelineDepthStencilStateCreateInfo ds_desc;
|
VkPipelineDepthStencilStateCreateInfo ds_desc;
|
||||||
|
|
||||||
VkSampleMask sample_mask[2];
|
VkSampleMask sample_mask[2];
|
||||||
VkPipelineRasterizationStateStreamCreateInfoEXT rs_stream_desc;
|
VkPipelineRasterizationDepthClipStateCreateInfoEXT rs_depth_clip_info;
|
||||||
|
VkPipelineRasterizationStateStreamCreateInfoEXT rs_stream_info;
|
||||||
|
|
||||||
const struct d3d12_root_signature *root_signature;
|
const struct d3d12_root_signature *root_signature;
|
||||||
|
|
||||||
|
@ -16823,7 +16823,7 @@ static void test_depth_clip(void)
|
|||||||
|
|
||||||
transition_resource_state(command_list, ds.texture,
|
transition_resource_state(command_list, ds.texture,
|
||||||
D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_COPY_SOURCE);
|
D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_COPY_SOURCE);
|
||||||
todo_if(!is_mesa_intel_device(context.device))
|
bug_if(!is_depth_clip_enable_supported(context.device))
|
||||||
check_sub_resource_float(ds.texture, 0, queue, command_list, 1.0f, 2);
|
check_sub_resource_float(ds.texture, 0, queue, command_list, 1.0f, 2);
|
||||||
reset_command_list(command_list, context.allocator);
|
reset_command_list(command_list, context.allocator);
|
||||||
|
|
||||||
|
@ -364,6 +364,11 @@ static inline bool is_radv_device(ID3D12Device *device)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool is_depth_clip_enable_supported(ID3D12Device *device)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static bool check_device_extension(VkPhysicalDevice vk_physical_device, const char *name)
|
static bool check_device_extension(VkPhysicalDevice vk_physical_device, const char *name)
|
||||||
@ -585,6 +590,12 @@ static inline bool is_radv_device(ID3D12Device *device)
|
|||||||
get_driver_properties(device, &properties);
|
get_driver_properties(device, &properties);
|
||||||
return properties.driverID == VK_DRIVER_ID_MESA_RADV_KHR;
|
return properties.driverID == VK_DRIVER_ID_MESA_RADV_KHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool is_depth_clip_enable_supported(ID3D12Device *device)
|
||||||
|
{
|
||||||
|
VkPhysicalDevice vk_physical_device = vkd3d_get_vk_physical_device(device);
|
||||||
|
return check_device_extension(vk_physical_device, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void parse_args(int argc, char **argv)
|
static void parse_args(int argc, char **argv)
|
||||||
|
Reference in New Issue
Block a user