Mesa (main): lavapipe: store subpass directly to rendering_state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 01:31:45 UTC 2021
Module: Mesa
Branch: main
Commit: d914df72ab7a40eeb2414ea78708eea34413c24d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d914df72ab7a40eeb2414ea78708eea34413c24d
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri Oct 1 16:13:08 2021 -0400
lavapipe: store subpass directly to rendering_state
this is fewer array derefs
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13349>
---
src/gallium/frontends/lavapipe/lvp_execute.c | 38 +++++++++++++---------------
1 file changed, 18 insertions(+), 20 deletions(-)
diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c
index 7cd0abdb7a8..074ea0f24bc 100644
--- a/src/gallium/frontends/lavapipe/lvp_execute.c
+++ b/src/gallium/frontends/lavapipe/lvp_execute.c
@@ -140,7 +140,7 @@ struct rendering_state {
uint8_t push_constants[128 * 4];
const struct lvp_render_pass *pass;
- uint32_t subpass;
+ struct lvp_subpass *subpass;
const struct lvp_framebuffer *vk_framebuffer;
VkRect2D render_area;
@@ -1355,7 +1355,7 @@ static inline bool
attachment_needs_clear(struct rendering_state *state,
uint32_t a)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
uint32_t view_mask = subpass->view_mask;
return (state->pending_clear_aspects[a] &&
(!view_mask || (view_mask & ~state->cleared_views[a])));
@@ -1365,7 +1365,7 @@ static bool
subpass_needs_clear(struct rendering_state *state)
{
uint32_t a;
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
for (uint32_t i = 0; i < subpass->color_count; i++) {
if (!subpass->color_attachments[i])
continue;
@@ -1427,7 +1427,7 @@ get_attachment(struct rendering_state *state,
static void render_subpass_clear(struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
for (unsigned i = 0; i < subpass->color_count; i++) {
if (!subpass->color_attachments[i])
@@ -1519,7 +1519,7 @@ static void render_subpass_clear(struct rendering_state *state)
static void render_subpass_clear_fast(struct rendering_state *state)
{
/* attempt to use the clear interface first, then fallback to per-attchment clears */
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
bool has_color_value = false;
uint32_t buffers = 0;
VkClearValue color_value = {0};
@@ -1602,7 +1602,7 @@ slow_clear:
static void render_pass_resolve(struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
if (subpass->depth_stencil_attachment && *subpass->depth_stencil_attachment &&
subpass->ds_resolve_attachment && *subpass->ds_resolve_attachment) {
@@ -1693,13 +1693,11 @@ static void render_pass_resolve(struct rendering_state *state)
}
static void begin_render_subpass(struct rendering_state *state,
- int subpass_idx)
+ const struct lvp_subpass *subpass)
{
- state->subpass = subpass_idx;
-
+ state->subpass = (void*)subpass;
state->framebuffer.nr_cbufs = 0;
- const struct lvp_subpass *subpass = &state->pass->subpasses[subpass_idx];
for (unsigned i = 0; i < subpass->color_count; i++) {
struct lvp_render_pass_attachment *color_att = subpass->color_attachments[i];
if (color_att) {
@@ -1791,7 +1789,7 @@ static void begin_render_pass(const VkRenderPassBeginInfo *render_pass_begin,
state->pending_clear_aspects[i] = state->attachments[i].pending_clear_aspects;
state->cleared_views[i] = 0;
}
- begin_render_subpass(state, 0);
+ begin_render_subpass(state, state->pass->subpasses);
}
@@ -1817,7 +1815,7 @@ static void handle_end_render_pass2(struct vk_cmd_queue_entry *cmd,
free(state->attachments);
state->attachments = NULL;
state->pass = NULL;
- state->subpass = 0;
+ state->subpass = NULL;
}
static void handle_next_subpass2(struct vk_cmd_queue_entry *cmd,
@@ -1832,7 +1830,7 @@ static void handle_next_subpass2(struct vk_cmd_queue_entry *cmd,
static void handle_draw(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias draw;
state->info.index_size = 0;
@@ -1851,7 +1849,7 @@ static void handle_draw(struct vk_cmd_queue_entry *cmd,
static void handle_draw_multi(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias *draws = calloc(cmd->u.draw_multi_ext.draw_count,
sizeof(*draws));
@@ -2474,7 +2472,7 @@ static void handle_update_buffer(struct vk_cmd_queue_entry *cmd,
static void handle_draw_indexed(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias draw = {0};
state->info.index_bounds_valid = false;
@@ -2502,7 +2500,7 @@ static void handle_draw_indexed(struct vk_cmd_queue_entry *cmd,
static void handle_draw_multi_indexed(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias *draws = calloc(cmd->u.draw_multi_indexed_ext.draw_count,
sizeof(*draws));
@@ -2544,7 +2542,7 @@ static void handle_draw_multi_indexed(struct vk_cmd_queue_entry *cmd,
static void handle_draw_indirect(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state, bool indexed)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias draw = {0};
if (indexed) {
state->info.index_bounds_valid = false;
@@ -2964,7 +2962,7 @@ static void handle_clear_attachments(struct vk_cmd_queue_entry *cmd,
{
for (uint32_t a = 0; a < cmd->u.clear_attachments.attachment_count; a++) {
VkClearAttachment *att = &cmd->u.clear_attachments.attachments[a];
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct lvp_image_view *imgv;
if (att->aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) {
@@ -3067,7 +3065,7 @@ static void handle_resolve_image(struct vk_cmd_queue_entry *cmd,
static void handle_draw_indirect_count(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state, bool indexed)
{
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias draw = {0};
if (indexed) {
state->info.index_bounds_valid = false;
@@ -3425,7 +3423,7 @@ static void handle_draw_indirect_byte_count(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
struct vk_cmd_draw_indirect_byte_count_ext *dibc = &cmd->u.draw_indirect_byte_count_ext;
- const struct lvp_subpass *subpass = &state->pass->subpasses[state->subpass];
+ const struct lvp_subpass *subpass = state->subpass;
struct pipe_draw_start_count_bias draw = {0};
pipe_buffer_read(state->pctx,
More information about the mesa-commit
mailing list