mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
vulkan/state: Track the input attachment count
Tilers need to know, at the very least, which input attachments are "real" input attachments which map to a color or depth/stencil attachment in tile memory and which are "fake" input attachments that should be treated as regular textures. To do this we need to know VkRenderingInputAttachmentIndexInfoKHR::colorAttachmentCount, which wasn't provided by the state tracking infrastructure. When the VkRenderingInputAttachmentIndexInfoKHR isn't provided, we don't know it, though, so we have to record a special UKNOWN value. In that case, the driver will know thanks to VUID-VkGraphicsPipelineCreateInfo-renderPass-09652 that all input attachments are "real" input attachments that map directly to color attachments if they have an InputAttachmentIndex. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31261>
This commit is contained in:
parent
82169ec551
commit
8e153bbd8f
2 changed files with 17 additions and 0 deletions
|
|
@ -1070,6 +1070,7 @@ vk_input_attachment_location_state_init(struct vk_input_attachment_location_stat
|
||||||
{
|
{
|
||||||
*ial = (struct vk_input_attachment_location_state) {
|
*ial = (struct vk_input_attachment_location_state) {
|
||||||
.color_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
|
.color_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||||
|
.color_attachment_count = MESA_VK_COLOR_ATTACHMENT_COUNT_UNKNOWN,
|
||||||
.depth_att = MESA_VK_ATTACHMENT_UNUSED,
|
.depth_att = MESA_VK_ATTACHMENT_UNUSED,
|
||||||
.stencil_att = MESA_VK_ATTACHMENT_UNUSED,
|
.stencil_att = MESA_VK_ATTACHMENT_UNUSED,
|
||||||
};
|
};
|
||||||
|
|
@ -1087,6 +1088,8 @@ vk_input_attachment_location_state_init(struct vk_input_attachment_location_stat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ial->color_attachment_count = ial_info->colorAttachmentCount;
|
||||||
|
|
||||||
ial->depth_att =
|
ial->depth_att =
|
||||||
map_ds_input_attachment_index(ial_info->pDepthInputAttachmentIndex);
|
map_ds_input_attachment_index(ial_info->pDepthInputAttachmentIndex);
|
||||||
ial->stencil_att =
|
ial->stencil_att =
|
||||||
|
|
|
||||||
|
|
@ -721,6 +721,8 @@ static_assert(MESA_VK_MAX_COLOR_ATTACHMENTS == 8,
|
||||||
#define MESA_VK_RP_ATTACHMENT_COLOR_BIT(n) \
|
#define MESA_VK_RP_ATTACHMENT_COLOR_BIT(n) \
|
||||||
((enum vk_rp_attachment_flags)(MESA_VK_RP_ATTACHMENT_COLOR_0_BIT << (n)))
|
((enum vk_rp_attachment_flags)(MESA_VK_RP_ATTACHMENT_COLOR_0_BIT << (n)))
|
||||||
|
|
||||||
|
#define MESA_VK_COLOR_ATTACHMENT_COUNT_UNKNOWN 0xff
|
||||||
|
|
||||||
/***/
|
/***/
|
||||||
struct vk_input_attachment_location_state {
|
struct vk_input_attachment_location_state {
|
||||||
/** VkRenderingInputAttachmentIndexInfoKHR::pColorAttachmentLocations
|
/** VkRenderingInputAttachmentIndexInfoKHR::pColorAttachmentLocations
|
||||||
|
|
@ -729,6 +731,18 @@ struct vk_input_attachment_location_state {
|
||||||
*/
|
*/
|
||||||
uint8_t color_map[MESA_VK_MAX_COLOR_ATTACHMENTS];
|
uint8_t color_map[MESA_VK_MAX_COLOR_ATTACHMENTS];
|
||||||
|
|
||||||
|
/** VkRenderingInputAttachmentIndexInfoKHR::colorAttachmentCount
|
||||||
|
*
|
||||||
|
* This must match vk_render_pass_state::color_attachment_count or be equal
|
||||||
|
* to MESA_VK_COLOR_ATTACHMENT_COUNT_UNKNOWN, in which case it can be
|
||||||
|
* assumed that there is an identity mapping and every input attachment
|
||||||
|
* with an index is a color attachment. Unlike vk_render_pass_state this
|
||||||
|
* state is available when compiling the fragment shader.
|
||||||
|
*
|
||||||
|
* MESA_VK_DYNAMIC_INPUT_ATTACHMENT_MAP
|
||||||
|
*/
|
||||||
|
uint8_t color_attachment_count;
|
||||||
|
|
||||||
/** VkRenderingInputAttachmentIndexInfoKHR::pDepthInputAttachmentIndex
|
/** VkRenderingInputAttachmentIndexInfoKHR::pDepthInputAttachmentIndex
|
||||||
*
|
*
|
||||||
* MESA_VK_DYNAMIC_INPUT_ATTACHMENT_MAP
|
* MESA_VK_DYNAMIC_INPUT_ATTACHMENT_MAP
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue