mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-21 14:20:29 +01:00
venus: support VK_EXT_sample_locations
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33520>
This commit is contained in:
parent
ae3bc10d58
commit
ff64092ff3
4 changed files with 131 additions and 3 deletions
|
|
@ -641,7 +641,7 @@ Khronos extensions that are not part of any Vulkan version:
|
||||||
VK_EXT_queue_family_foreign DONE (anv, hasvk, nvk, lvp, panvk, radv, tu, v3dv, vn)
|
VK_EXT_queue_family_foreign DONE (anv, hasvk, nvk, lvp, panvk, radv, tu, v3dv, vn)
|
||||||
VK_EXT_rasterization_order_attachment_access DONE (lvp, tu, vn)
|
VK_EXT_rasterization_order_attachment_access DONE (lvp, tu, vn)
|
||||||
VK_EXT_robustness2 DONE (anv, hasvk, lvp, nvk, radv, tu, vn)
|
VK_EXT_robustness2 DONE (anv, hasvk, lvp, nvk, radv, tu, vn)
|
||||||
VK_EXT_sample_locations DONE (anv, hasvk, nvk, radv/gfx9-, tu/a650+)
|
VK_EXT_sample_locations DONE (anv, hasvk, nvk, radv/gfx9-, tu/a650+, vn)
|
||||||
VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, radv)
|
VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, radv)
|
||||||
VK_EXT_shader_atomic_float2 DONE (anv, lvp, radv)
|
VK_EXT_shader_atomic_float2 DONE (anv, lvp, radv)
|
||||||
VK_EXT_shader_image_atomic_int64 DONE (nvk, radv)
|
VK_EXT_shader_image_atomic_int64 DONE (nvk, radv)
|
||||||
|
|
|
||||||
|
|
@ -2539,3 +2539,12 @@ vn_CmdSetFragmentShadingRateKHR(
|
||||||
VN_CMD_ENQUEUE(vkCmdSetFragmentShadingRateKHR, commandBuffer,
|
VN_CMD_ENQUEUE(vkCmdSetFragmentShadingRateKHR, commandBuffer,
|
||||||
pFragmentSize, combinerOps);
|
pFragmentSize, combinerOps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vn_CmdSetSampleLocationsEXT(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkSampleLocationsInfoEXT *pSampleLocationsInfo)
|
||||||
|
{
|
||||||
|
VN_CMD_ENQUEUE(vkCmdSetSampleLocationsEXT, commandBuffer,
|
||||||
|
pSampleLocationsInfo);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -510,6 +510,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev)
|
||||||
VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info;
|
VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info;
|
||||||
VkPhysicalDeviceProvokingVertexPropertiesEXT provoking_vertex;
|
VkPhysicalDeviceProvokingVertexPropertiesEXT provoking_vertex;
|
||||||
VkPhysicalDeviceRobustness2PropertiesEXT robustness_2;
|
VkPhysicalDeviceRobustness2PropertiesEXT robustness_2;
|
||||||
|
VkPhysicalDeviceSampleLocationsPropertiesEXT sample_locations;
|
||||||
VkPhysicalDeviceTransformFeedbackPropertiesEXT transform_feedback;
|
VkPhysicalDeviceTransformFeedbackPropertiesEXT transform_feedback;
|
||||||
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
|
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
|
||||||
vertex_attribute_divisor;
|
vertex_attribute_divisor;
|
||||||
|
|
@ -568,6 +569,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev)
|
||||||
VN_ADD_PNEXT_EXT(props2, PCI_BUS_INFO_PROPERTIES_EXT, local_props.pci_bus_info, exts->EXT_pci_bus_info);
|
VN_ADD_PNEXT_EXT(props2, PCI_BUS_INFO_PROPERTIES_EXT, local_props.pci_bus_info, exts->EXT_pci_bus_info);
|
||||||
VN_ADD_PNEXT_EXT(props2, PROVOKING_VERTEX_PROPERTIES_EXT, local_props.provoking_vertex, exts->EXT_provoking_vertex);
|
VN_ADD_PNEXT_EXT(props2, PROVOKING_VERTEX_PROPERTIES_EXT, local_props.provoking_vertex, exts->EXT_provoking_vertex);
|
||||||
VN_ADD_PNEXT_EXT(props2, ROBUSTNESS_2_PROPERTIES_EXT, local_props.robustness_2, exts->EXT_robustness2);
|
VN_ADD_PNEXT_EXT(props2, ROBUSTNESS_2_PROPERTIES_EXT, local_props.robustness_2, exts->EXT_robustness2);
|
||||||
|
VN_ADD_PNEXT_EXT(props2, SAMPLE_LOCATIONS_PROPERTIES_EXT, local_props.sample_locations, exts->EXT_sample_locations);
|
||||||
VN_ADD_PNEXT_EXT(props2, TRANSFORM_FEEDBACK_PROPERTIES_EXT, local_props.transform_feedback, exts->EXT_transform_feedback);
|
VN_ADD_PNEXT_EXT(props2, TRANSFORM_FEEDBACK_PROPERTIES_EXT, local_props.transform_feedback, exts->EXT_transform_feedback);
|
||||||
VN_ADD_PNEXT_EXT(props2, VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor);
|
VN_ADD_PNEXT_EXT(props2, VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor);
|
||||||
|
|
||||||
|
|
@ -630,6 +632,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev)
|
||||||
VN_SET_VK_PROPS_EXT(props, &local_props.pci_bus_info, exts->EXT_pci_bus_info);
|
VN_SET_VK_PROPS_EXT(props, &local_props.pci_bus_info, exts->EXT_pci_bus_info);
|
||||||
VN_SET_VK_PROPS_EXT(props, &local_props.provoking_vertex, exts->EXT_provoking_vertex);
|
VN_SET_VK_PROPS_EXT(props, &local_props.provoking_vertex, exts->EXT_provoking_vertex);
|
||||||
VN_SET_VK_PROPS_EXT(props, &local_props.robustness_2, exts->EXT_robustness2);
|
VN_SET_VK_PROPS_EXT(props, &local_props.robustness_2, exts->EXT_robustness2);
|
||||||
|
VN_SET_VK_PROPS_EXT(props, &local_props.sample_locations, exts->EXT_sample_locations);
|
||||||
VN_SET_VK_PROPS_EXT(props, &local_props.transform_feedback, exts->EXT_transform_feedback);
|
VN_SET_VK_PROPS_EXT(props, &local_props.transform_feedback, exts->EXT_transform_feedback);
|
||||||
VN_SET_VK_PROPS_EXT(props, &local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor);
|
VN_SET_VK_PROPS_EXT(props, &local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor);
|
||||||
|
|
||||||
|
|
@ -1121,6 +1124,7 @@ vn_physical_device_get_passthrough_extensions(
|
||||||
.EXT_queue_family_foreign = true,
|
.EXT_queue_family_foreign = true,
|
||||||
.EXT_rasterization_order_attachment_access = true,
|
.EXT_rasterization_order_attachment_access = true,
|
||||||
.EXT_robustness2 = true,
|
.EXT_robustness2 = true,
|
||||||
|
.EXT_sample_locations = true,
|
||||||
.EXT_shader_stencil_export = true,
|
.EXT_shader_stencil_export = true,
|
||||||
.EXT_shader_subgroup_ballot = true,
|
.EXT_shader_subgroup_ballot = true,
|
||||||
.EXT_transform_feedback = true,
|
.EXT_transform_feedback = true,
|
||||||
|
|
@ -2743,3 +2747,18 @@ vn_GetPhysicalDeviceFragmentShadingRatesKHR(
|
||||||
return vn_call_vkGetPhysicalDeviceFragmentShadingRatesKHR(
|
return vn_call_vkGetPhysicalDeviceFragmentShadingRatesKHR(
|
||||||
ring, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates);
|
ring, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vn_GetPhysicalDeviceMultisamplePropertiesEXT(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
VkSampleCountFlagBits samples,
|
||||||
|
VkMultisamplePropertiesEXT *pMultisampleProperties)
|
||||||
|
{
|
||||||
|
struct vn_physical_device *physical_dev =
|
||||||
|
vn_physical_device_from_handle(physicalDevice);
|
||||||
|
struct vn_ring *ring = physical_dev->instance->ring.ring;
|
||||||
|
|
||||||
|
/* TODO per-device cache */
|
||||||
|
vn_call_vkGetPhysicalDeviceMultisamplePropertiesEXT(
|
||||||
|
ring, physicalDevice, samples, pMultisampleProperties);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,10 @@ struct vn_graphics_pipeline_info_self {
|
||||||
|
|
||||||
/** VkPipelineMultisampleStateCreateInfo::pSampleMask */
|
/** VkPipelineMultisampleStateCreateInfo::pSampleMask */
|
||||||
bool multisample_state_sample_mask : 1;
|
bool multisample_state_sample_mask : 1;
|
||||||
|
/** VkPipelineMultisampleStateCreateInfo::pNext
|
||||||
|
* VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsInfo
|
||||||
|
*/
|
||||||
|
bool multisample_state_sample_locations : 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -158,6 +162,10 @@ struct vn_graphics_dynamic_state {
|
||||||
bool scissor_with_count : 1;
|
bool scissor_with_count : 1;
|
||||||
/** VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE */
|
/** VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE */
|
||||||
bool rasterizer_discard_enable : 1;
|
bool rasterizer_discard_enable : 1;
|
||||||
|
/** VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT */
|
||||||
|
bool sample_locations : 1;
|
||||||
|
/** VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT */
|
||||||
|
bool sample_locations_enable : 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -201,6 +209,14 @@ struct vn_graphics_pipeline_state {
|
||||||
* Valid if and only if gpl.pre_raster_shaders is set.
|
* Valid if and only if gpl.pre_raster_shaders is set.
|
||||||
*/
|
*/
|
||||||
bool rasterizer_discard_enable;
|
bool rasterizer_discard_enable;
|
||||||
|
|
||||||
|
/** VkPipelineMultisampleStateCreateInfo::pNext
|
||||||
|
* - VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable
|
||||||
|
*
|
||||||
|
* Valid if and only if multisample_state is valid along with a valid
|
||||||
|
* sample location state chained in its pNext.
|
||||||
|
*/
|
||||||
|
bool sample_locations_enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vn_graphics_pipeline {
|
struct vn_graphics_pipeline {
|
||||||
|
|
@ -216,6 +232,7 @@ struct vn_graphics_pipeline {
|
||||||
struct vn_graphics_pipeline_fix_tmp {
|
struct vn_graphics_pipeline_fix_tmp {
|
||||||
VkGraphicsPipelineCreateInfo *infos;
|
VkGraphicsPipelineCreateInfo *infos;
|
||||||
VkPipelineMultisampleStateCreateInfo *multisample_state_infos;
|
VkPipelineMultisampleStateCreateInfo *multisample_state_infos;
|
||||||
|
VkPipelineSampleLocationsStateCreateInfoEXT *sl_infos;
|
||||||
VkPipelineViewportStateCreateInfo *viewport_state_infos;
|
VkPipelineViewportStateCreateInfo *viewport_state_infos;
|
||||||
|
|
||||||
/* Fixing the pNext chain
|
/* Fixing the pNext chain
|
||||||
|
|
@ -637,6 +654,7 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc,
|
||||||
struct vn_graphics_pipeline_fix_tmp *tmp;
|
struct vn_graphics_pipeline_fix_tmp *tmp;
|
||||||
VkGraphicsPipelineCreateInfo *infos;
|
VkGraphicsPipelineCreateInfo *infos;
|
||||||
VkPipelineMultisampleStateCreateInfo *multisample_state_infos;
|
VkPipelineMultisampleStateCreateInfo *multisample_state_infos;
|
||||||
|
VkPipelineSampleLocationsStateCreateInfoEXT *sl_infos;
|
||||||
VkPipelineViewportStateCreateInfo *viewport_state_infos;
|
VkPipelineViewportStateCreateInfo *viewport_state_infos;
|
||||||
|
|
||||||
/* for pNext */
|
/* for pNext */
|
||||||
|
|
@ -652,6 +670,7 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc,
|
||||||
vk_multialloc_add(&ma, &infos, __typeof__(*infos), info_count);
|
vk_multialloc_add(&ma, &infos, __typeof__(*infos), info_count);
|
||||||
vk_multialloc_add(&ma, &multisample_state_infos,
|
vk_multialloc_add(&ma, &multisample_state_infos,
|
||||||
__typeof__(*multisample_state_infos), info_count);
|
__typeof__(*multisample_state_infos), info_count);
|
||||||
|
vk_multialloc_add(&ma, &sl_infos, __typeof__(*sl_infos), info_count);
|
||||||
vk_multialloc_add(&ma, &viewport_state_infos,
|
vk_multialloc_add(&ma, &viewport_state_infos,
|
||||||
__typeof__(*viewport_state_infos), info_count);
|
__typeof__(*viewport_state_infos), info_count);
|
||||||
|
|
||||||
|
|
@ -673,6 +692,7 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc,
|
||||||
|
|
||||||
tmp->infos = infos;
|
tmp->infos = infos;
|
||||||
tmp->multisample_state_infos = multisample_state_infos;
|
tmp->multisample_state_infos = multisample_state_infos;
|
||||||
|
tmp->sl_infos = sl_infos;
|
||||||
tmp->viewport_state_infos = viewport_state_infos;
|
tmp->viewport_state_infos = viewport_state_infos;
|
||||||
|
|
||||||
if (alloc_pnext) {
|
if (alloc_pnext) {
|
||||||
|
|
@ -771,6 +791,12 @@ vn_graphics_dynamic_state_update(
|
||||||
case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE:
|
case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE:
|
||||||
raw.rasterizer_discard_enable = true;
|
raw.rasterizer_discard_enable = true;
|
||||||
break;
|
break;
|
||||||
|
case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:
|
||||||
|
raw.sample_locations = true;
|
||||||
|
break;
|
||||||
|
case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT:
|
||||||
|
raw.sample_locations_enable = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -805,9 +831,13 @@ vn_graphics_dynamic_state_update(
|
||||||
}
|
}
|
||||||
if (direct_gpl.fragment_shader) {
|
if (direct_gpl.fragment_shader) {
|
||||||
dynamic->sample_mask |= raw.sample_mask;
|
dynamic->sample_mask |= raw.sample_mask;
|
||||||
|
dynamic->sample_locations |= raw.sample_locations;
|
||||||
|
dynamic->sample_locations_enable |= raw.sample_locations_enable;
|
||||||
}
|
}
|
||||||
if (direct_gpl.fragment_output) {
|
if (direct_gpl.fragment_output) {
|
||||||
dynamic->sample_mask |= raw.sample_mask;
|
dynamic->sample_mask |= raw.sample_mask;
|
||||||
|
dynamic->sample_locations |= raw.sample_locations;
|
||||||
|
dynamic->sample_locations_enable |= raw.sample_locations_enable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1038,6 +1068,13 @@ vn_graphics_pipeline_state_fill(
|
||||||
vk_find_struct_const(info->pNext, PIPELINE_LIBRARY_CREATE_INFO_KHR);
|
vk_find_struct_const(info->pNext, PIPELINE_LIBRARY_CREATE_INFO_KHR);
|
||||||
const uint32_t lib_count = lib_info ? lib_info->libraryCount : 0;
|
const uint32_t lib_count = lib_info ? lib_info->libraryCount : 0;
|
||||||
|
|
||||||
|
const VkPipelineSampleLocationsStateCreateInfoEXT *sl_info = NULL;
|
||||||
|
if (info->pMultisampleState) {
|
||||||
|
sl_info = vk_find_struct_const(
|
||||||
|
info->pMultisampleState->pNext,
|
||||||
|
PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT);
|
||||||
|
}
|
||||||
|
|
||||||
/* This tracks which fields have valid values in the
|
/* This tracks which fields have valid values in the
|
||||||
* VkGraphicsPipelineCreateInfo pNext chain.
|
* VkGraphicsPipelineCreateInfo pNext chain.
|
||||||
*
|
*
|
||||||
|
|
@ -1193,6 +1230,25 @@ vn_graphics_pipeline_state_fill(
|
||||||
valid.self.multisample_state_sample_mask =
|
valid.self.multisample_state_sample_mask =
|
||||||
!state->dynamic.sample_mask;
|
!state->dynamic.sample_mask;
|
||||||
|
|
||||||
|
/* If VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT is used, the static
|
||||||
|
* sampleLocationsInfo is ignored. Whether custom sample locations
|
||||||
|
* have been enabled depends on if
|
||||||
|
* VkPipelineSampleLocationsStateCreateInfoEXT has been chained and if
|
||||||
|
* VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable
|
||||||
|
* is VK_TRUE.
|
||||||
|
*
|
||||||
|
* If VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT is not used, the static
|
||||||
|
* sampleLocationsInfo validity depends on whether
|
||||||
|
* VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state is used
|
||||||
|
* or the static sampleLocationsEnable is true.
|
||||||
|
*/
|
||||||
|
if (!state->dynamic.sample_locations) {
|
||||||
|
if (state->dynamic.sample_locations_enable)
|
||||||
|
valid.self.multisample_state_sample_locations = true;
|
||||||
|
else if (sl_info && sl_info->sampleLocationsEnable == VK_TRUE)
|
||||||
|
valid.self.multisample_state_sample_locations = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (state->render_pass.attachment_aspects &
|
if (state->render_pass.attachment_aspects &
|
||||||
(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT))
|
(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT))
|
||||||
valid.self.depth_stencil_state = true;
|
valid.self.depth_stencil_state = true;
|
||||||
|
|
@ -1302,6 +1358,10 @@ vn_graphics_pipeline_state_fill(
|
||||||
valid.self.multisample_state &&
|
valid.self.multisample_state &&
|
||||||
info->pMultisampleState &&
|
info->pMultisampleState &&
|
||||||
info->pMultisampleState->pSampleMask,
|
info->pMultisampleState->pSampleMask,
|
||||||
|
.multisample_state_sample_locations =
|
||||||
|
!valid.self.multisample_state_sample_locations &&
|
||||||
|
valid.self.multisample_state &&
|
||||||
|
sl_info && sl_info->sampleLocationsInfo.sampleLocationsCount,
|
||||||
.depth_stencil_state =
|
.depth_stencil_state =
|
||||||
!valid.self.depth_stencil_state &&
|
!valid.self.depth_stencil_state &&
|
||||||
info->pDepthStencilState,
|
info->pDepthStencilState,
|
||||||
|
|
@ -1331,6 +1391,37 @@ vn_graphics_pipeline_state_fill(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vn_multisample_info_pnext_init(
|
||||||
|
const VkPipelineMultisampleStateCreateInfo *info,
|
||||||
|
struct vn_graphics_pipeline_fix_tmp *fix_tmp,
|
||||||
|
uint32_t index)
|
||||||
|
{
|
||||||
|
VkPipelineSampleLocationsStateCreateInfoEXT *sl =
|
||||||
|
&fix_tmp->sl_infos[index];
|
||||||
|
|
||||||
|
VkBaseOutStructure *cur = (void *)&fix_tmp->infos[index].pMultisampleState;
|
||||||
|
|
||||||
|
vk_foreach_struct_const(src, info->pNext) {
|
||||||
|
void *next = NULL;
|
||||||
|
switch (src->sType) {
|
||||||
|
case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
|
||||||
|
memcpy(sl, src, sizeof(*sl));
|
||||||
|
next = sl;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (next) {
|
||||||
|
cur->pNext = next;
|
||||||
|
cur = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cur->pNext = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vn_fix_graphics_pipeline_create_info_self(
|
vn_fix_graphics_pipeline_create_info_self(
|
||||||
const struct vn_graphics_pipeline_info_self *ignore,
|
const struct vn_graphics_pipeline_info_self *ignore,
|
||||||
|
|
@ -1365,13 +1456,22 @@ vn_fix_graphics_pipeline_create_info_self(
|
||||||
fix_tmp->infos[index].basePipelineHandle = VK_NULL_HANDLE;
|
fix_tmp->infos[index].basePipelineHandle = VK_NULL_HANDLE;
|
||||||
|
|
||||||
/* VkPipelineMultisampleStateCreateInfo */
|
/* VkPipelineMultisampleStateCreateInfo */
|
||||||
if (ignore->multisample_state_sample_mask) {
|
if (ignore->multisample_state_sample_mask ||
|
||||||
|
ignore->multisample_state_sample_locations) {
|
||||||
/* Swap original pMultisampleState with temporary state. */
|
/* Swap original pMultisampleState with temporary state. */
|
||||||
fix_tmp->multisample_state_infos[index] = *info->pMultisampleState;
|
fix_tmp->multisample_state_infos[index] = *info->pMultisampleState;
|
||||||
fix_tmp->infos[index].pMultisampleState =
|
fix_tmp->infos[index].pMultisampleState =
|
||||||
&fix_tmp->multisample_state_infos[index];
|
&fix_tmp->multisample_state_infos[index];
|
||||||
|
|
||||||
fix_tmp->multisample_state_infos[index].pSampleMask = NULL;
|
if (ignore->multisample_state_sample_mask)
|
||||||
|
fix_tmp->multisample_state_infos[index].pSampleMask = NULL;
|
||||||
|
if (ignore->multisample_state_sample_locations) {
|
||||||
|
/* initialize pNext chain with allocated tmp storage */
|
||||||
|
vn_multisample_info_pnext_init(info->pMultisampleState, fix_tmp,
|
||||||
|
index);
|
||||||
|
fix_tmp->sl_infos[index].sampleLocationsInfo.sampleLocationsCount =
|
||||||
|
0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* VkPipelineViewportStateCreateInfo */
|
/* VkPipelineViewportStateCreateInfo */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue