mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 03:10:09 +01:00
v3dv: make TLB clearing paths return true/false
We are currently able to clear any supported format using the TLB, but this is more consistent with other parts of the code and is what we want should we add any formats in the future where we can't get away with TLB clears. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
parent
a5cede6111
commit
bbdfc5296b
1 changed files with 18 additions and 18 deletions
|
|
@ -1433,13 +1433,20 @@ get_hw_clear_color(const VkClearColorValue *color,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
/* Returns true if the implementation is able to handle the case, false
|
||||
* otherwise.
|
||||
*/
|
||||
static bool
|
||||
clear_image_tlb(struct v3dv_cmd_buffer *cmd_buffer,
|
||||
struct v3dv_image *image,
|
||||
VkFormat fb_format,
|
||||
const VkClearValue *clear_value,
|
||||
const VkImageSubresourceRange *range)
|
||||
{
|
||||
const VkOffset3D origin = { 0, 0, 0 };
|
||||
VkFormat fb_format;
|
||||
if (!can_use_tlb(image, &origin, &fb_format))
|
||||
return false;
|
||||
|
||||
uint32_t internal_type, internal_bpp;
|
||||
get_internal_type_bpp_for_image_aspects(fb_format, range->aspectMask,
|
||||
&internal_type, &internal_bpp);
|
||||
|
|
@ -1486,7 +1493,7 @@ clear_image_tlb(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
|
||||
struct v3dv_job *job = v3dv_cmd_buffer_start_job(cmd_buffer, -1);
|
||||
if (!job)
|
||||
return;
|
||||
return true;
|
||||
|
||||
/* We start a a new job for each layer so the frame "depth" is 1 */
|
||||
v3dv_job_start_frame(job, width, height, 1, 1, internal_bpp);
|
||||
|
|
@ -1508,6 +1515,8 @@ clear_image_tlb(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
v3dv_cmd_buffer_finish_job(cmd_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1525,15 +1534,10 @@ v3dv_CmdClearColorImage(VkCommandBuffer commandBuffer,
|
|||
.color = *pColor,
|
||||
};
|
||||
|
||||
VkFormat compat_format;
|
||||
const VkOffset3D origin = { 0, 0, 0 };
|
||||
for (uint32_t i = 0; i < rangeCount; i++) {
|
||||
if (can_use_tlb(image, &origin, &compat_format)) {
|
||||
clear_image_tlb(cmd_buffer, image, compat_format,
|
||||
&clear_value, &pRanges[i]);
|
||||
} else {
|
||||
assert(!"Fallback path for vkCmdClearColorImage not implemented");
|
||||
}
|
||||
if (clear_image_tlb(cmd_buffer, image, &clear_value, &pRanges[i]))
|
||||
continue;
|
||||
unreachable("Unsupported color clear.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1552,14 +1556,10 @@ v3dv_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer,
|
|||
.depthStencil = *pDepthStencil,
|
||||
};
|
||||
|
||||
const VkOffset3D origin = { 0, 0, 0 };
|
||||
for (uint32_t i = 0; i < rangeCount; i++) {
|
||||
if (can_use_tlb(image, &origin, NULL)) {
|
||||
clear_image_tlb(cmd_buffer, image, image->vk_format,
|
||||
&clear_value, &pRanges[i]);
|
||||
} else {
|
||||
assert(!"Fallback path for vkCmdClearDepthStencilImage not implemented");
|
||||
}
|
||||
if (clear_image_tlb(cmd_buffer, image, &clear_value, &pRanges[i]))
|
||||
continue;
|
||||
unreachable("Unsupported depth/stencil clear.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue