pvr: rework pds_state array length logic

This attempts to avoid needing hwdefs in headers. It's not perfect, but
hopefully a step in the right direction.

Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38352>
This commit is contained in:
Erik Faye-Lund 2025-10-31 14:29:19 +01:00
parent 1eab712245
commit 4490275332
4 changed files with 15 additions and 14 deletions

View file

@ -1653,7 +1653,7 @@ static VkResult pvr_clear_color_attachment_static(
USC_MRT_RESOURCE_TYPE_MEMORY;
const struct pvr_pds_clear_attachment_program_info *clear_attachment_program;
struct pvr_pds_pixel_shader_sa_program texture_program;
uint32_t pds_state[PVR_STATIC_CLEAR_PDS_STATE_COUNT];
uint32_t pds_state[PVR_PDS_STATE_LENGTH];
struct pvr_suballoc_bo *pds_texture_program_bo;
struct pvr_static_clear_ppp_template template;
struct pvr_suballoc_bo *const_shareds_buffer;

View file

@ -37,8 +37,15 @@
#include "vk_alloc.h"
#include "vk_log.h"
static_assert(PVR_STATIC_CLEAR_PPP_PDS_TYPE_TEXTUREDATABASE + 1 ==
PVR_STATIC_CLEAR_PDS_STATE_COUNT,
#define PVR_STATIC_CLEAR_PDS_STATE_COUNT \
(pvr_cmd_length(TA_STATE_PDS_SHADERBASE) + \
pvr_cmd_length(TA_STATE_PDS_TEXUNICODEBASE) + \
pvr_cmd_length(TA_STATE_PDS_SIZEINFO1) + \
pvr_cmd_length(TA_STATE_PDS_SIZEINFO2) + \
pvr_cmd_length(TA_STATE_PDS_VARYINGBASE) + \
pvr_cmd_length(TA_STATE_PDS_TEXTUREDATABASE))
static_assert(PVR_PDS_STATE_LENGTH == PVR_STATIC_CLEAR_PDS_STATE_COUNT,
"pvr_static_clear_ppp_pds_state_type might require fixing.");
static void pvr_device_setup_graphics_static_clear_ppp_base(

View file

@ -35,14 +35,6 @@
#define PVR_CLEAR_VERTEX_COUNT 4
#define PVR_CLEAR_VERTEX_COORDINATES 3
#define PVR_STATIC_CLEAR_PDS_STATE_COUNT \
(pvr_cmd_length(TA_STATE_PDS_SHADERBASE) + \
pvr_cmd_length(TA_STATE_PDS_TEXUNICODEBASE) + \
pvr_cmd_length(TA_STATE_PDS_SIZEINFO1) + \
pvr_cmd_length(TA_STATE_PDS_SIZEINFO2) + \
pvr_cmd_length(TA_STATE_PDS_VARYINGBASE) + \
pvr_cmd_length(TA_STATE_PDS_TEXTUREDATABASE))
/* These can be used as offsets within a PVR_STATIC_CLEAR_PDS_STATE_COUNT dwords
* sized array to get the respective state word.
*
@ -62,6 +54,8 @@ enum pvr_static_clear_ppp_pds_state_type {
PVR_STATIC_CLEAR_PPP_PDS_TYPE_TEXTUREDATABASE = 5,
};
#define PVR_PDS_STATE_LENGTH (PVR_STATIC_CLEAR_PPP_PDS_TYPE_TEXTUREDATABASE + 1)
#define PVR_STATIC_CLEAR_VARIANT_COUNT (VK_IMAGE_ASPECT_STENCIL_BIT << 1U)
struct pvr_bo;
@ -97,7 +91,7 @@ struct pvr_static_clear_ppp_template {
* Note: this is a pointer to an array of const uint32_t and not an array
* of pointers or a function pointer.
*/
const uint32_t (*pds_state)[PVR_STATIC_CLEAR_PDS_STATE_COUNT];
const uint32_t (*pds_state)[PVR_PDS_STATE_LENGTH];
struct ROGUE_TA_REGION_CLIP0 region_clip0;
struct ROGUE_TA_REGION_CLIP1 region_clip1;

View file

@ -3443,7 +3443,7 @@ static VkResult pvr_cs_write_load_op_for_view(struct pvr_cmd_buffer *cmd_buffer,
const struct pvr_device *device = cmd_buffer->device;
struct pvr_static_clear_ppp_template template =
device->static_clear_state.ppp_templates[VK_IMAGE_ASPECT_COLOR_BIT];
uint32_t pds_state[PVR_STATIC_CLEAR_PDS_STATE_COUNT];
uint32_t pds_state[PVR_PDS_STATE_LENGTH];
struct pvr_pds_upload shareds_update_program;
struct pvr_suballoc_bo *pvr_bo;
VkResult result;
@ -7852,7 +7852,7 @@ static void pvr_insert_transparent_obj(struct pvr_cmd_buffer *const cmd_buffer,
*/
struct pvr_static_clear_ppp_template clear =
device->static_clear_state.ppp_templates[VK_IMAGE_ASPECT_COLOR_BIT];
uint32_t pds_state[PVR_STATIC_CLEAR_PDS_STATE_COUNT] = { 0 };
uint32_t pds_state[PVR_PDS_STATE_LENGTH] = { 0 };
struct pvr_csb *csb = &sub_cmd->control_stream;
struct pvr_suballoc_bo *ppp_bo;