mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-16 21:40:38 +01:00
radv: split emitting guardband into a separate helper
This will be used to emit guardband separately from scissor. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18247>
This commit is contained in:
parent
fbbae5c0b9
commit
5bbb7de514
3 changed files with 29 additions and 12 deletions
|
|
@ -1564,8 +1564,10 @@ radv_write_scissors(struct radv_cmd_buffer *cmd_buffer, struct radeon_cmdbuf *cs
|
|||
}
|
||||
|
||||
si_write_scissors(cs, count, cmd_buffer->state.dynamic.scissor.scissors,
|
||||
cmd_buffer->state.dynamic.viewport.viewports, rast_prim,
|
||||
cmd_buffer->state.dynamic.line_width);
|
||||
cmd_buffer->state.dynamic.viewport.viewports);
|
||||
|
||||
si_write_guardband(cs, count, cmd_buffer->state.dynamic.viewport.viewports, rast_prim,
|
||||
cmd_buffer->state.dynamic.line_width);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -1685,7 +1685,10 @@ void si_emit_compute(struct radv_device *device, struct radeon_cmdbuf *cs);
|
|||
void cik_create_gfx_config(struct radv_device *device);
|
||||
|
||||
void si_write_scissors(struct radeon_cmdbuf *cs, int count, const VkRect2D *scissors,
|
||||
const VkViewport *viewports, unsigned rast_prim, float line_width);
|
||||
const VkViewport *viewports);
|
||||
|
||||
void si_write_guardband(struct radeon_cmdbuf *cs, int count, const VkViewport *viewports,
|
||||
unsigned rast_prim, float line_width);
|
||||
|
||||
uint32_t si_get_ia_multi_vgt_param(struct radv_cmd_buffer *cmd_buffer, bool instanced_draw,
|
||||
bool indirect_draw, bool count_from_stream_output,
|
||||
|
|
|
|||
|
|
@ -715,12 +715,10 @@ si_intersect_scissor(const VkRect2D *a, const VkRect2D *b)
|
|||
|
||||
void
|
||||
si_write_scissors(struct radeon_cmdbuf *cs, int count, const VkRect2D *scissors,
|
||||
const VkViewport *viewports, unsigned rast_prim, float line_width)
|
||||
const VkViewport *viewports)
|
||||
{
|
||||
int i;
|
||||
float scale[3], translate[3], guardband_x = INFINITY, guardband_y = INFINITY;
|
||||
float discard_x = 1.0f, discard_y = 1.0f;
|
||||
const float max_range = 32767.0f;
|
||||
|
||||
if (!count)
|
||||
return;
|
||||
|
||||
|
|
@ -729,6 +727,25 @@ si_write_scissors(struct radeon_cmdbuf *cs, int count, const VkRect2D *scissors,
|
|||
VkRect2D viewport_scissor = si_scissor_from_viewport(viewports + i);
|
||||
VkRect2D scissor = si_intersect_scissor(&scissors[i], &viewport_scissor);
|
||||
|
||||
radeon_emit(cs, S_028250_TL_X(scissor.offset.x) | S_028250_TL_Y(scissor.offset.y) |
|
||||
S_028250_WINDOW_OFFSET_DISABLE(1));
|
||||
radeon_emit(cs, S_028254_BR_X(scissor.offset.x + scissor.extent.width) |
|
||||
S_028254_BR_Y(scissor.offset.y + scissor.extent.height));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
si_write_guardband(struct radeon_cmdbuf *cs, int count, const VkViewport *viewports,
|
||||
unsigned rast_prim, float line_width)
|
||||
{
|
||||
int i;
|
||||
float scale[3], translate[3], guardband_x = INFINITY, guardband_y = INFINITY;
|
||||
float discard_x = 1.0f, discard_y = 1.0f;
|
||||
const float max_range = 32767.0f;
|
||||
if (!count)
|
||||
return;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
radv_get_viewport_xform(viewports + i, scale, translate);
|
||||
scale[0] = fabsf(scale[0]);
|
||||
scale[1] = fabsf(scale[1]);
|
||||
|
|
@ -741,11 +758,6 @@ si_write_scissors(struct radeon_cmdbuf *cs, int count, const VkRect2D *scissors,
|
|||
guardband_x = MIN2(guardband_x, (max_range - fabsf(translate[0])) / scale[0]);
|
||||
guardband_y = MIN2(guardband_y, (max_range - fabsf(translate[1])) / scale[1]);
|
||||
|
||||
radeon_emit(cs, S_028250_TL_X(scissor.offset.x) | S_028250_TL_Y(scissor.offset.y) |
|
||||
S_028250_WINDOW_OFFSET_DISABLE(1));
|
||||
radeon_emit(cs, S_028254_BR_X(scissor.offset.x + scissor.extent.width) |
|
||||
S_028254_BR_Y(scissor.offset.y + scissor.extent.height));
|
||||
|
||||
if (radv_rast_prim_is_points_or_lines(rast_prim)) {
|
||||
/* When rendering wide points or lines, we need to be more conservative about when to
|
||||
* discard them entirely. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue