blob: f2689529742f96ef0d99753da41d56d4d5951fa3 [file] [log] [blame]
/*
* Copyright © 2010 Intel Corporation
* SPDX-License-Identifier: MIT
*/
#pragma once
#include "brw_reg.h"
struct brw_shader;
class brw_builder;
struct brw_thread_payload {
/** The number of thread payload registers the hardware will supply. */
uint8_t num_regs;
virtual ~brw_thread_payload() = default;
protected:
brw_thread_payload() : num_regs() {}
};
struct brw_vs_thread_payload : public brw_thread_payload {
brw_vs_thread_payload(const brw_shader &v);
brw_reg urb_handles;
};
struct brw_tcs_thread_payload : public brw_thread_payload {
brw_tcs_thread_payload(const brw_shader &v);
brw_reg patch_urb_output;
brw_reg primitive_id;
brw_reg icp_handle_start;
};
struct brw_tes_thread_payload : public brw_thread_payload {
brw_tes_thread_payload(const brw_shader &v);
brw_reg patch_urb_input;
brw_reg primitive_id;
brw_reg coords[3];
brw_reg urb_output;
};
struct brw_gs_thread_payload : public brw_thread_payload {
brw_gs_thread_payload(brw_shader &v);
brw_reg urb_handles;
brw_reg primitive_id;
brw_reg instance_id;
brw_reg icp_handle_start;
};
struct brw_fs_thread_payload : public brw_thread_payload {
brw_fs_thread_payload(const brw_shader &v,
bool &source_depth_to_render_target);
uint8_t subspan_coord_reg[2];
uint8_t source_depth_reg[2];
uint8_t source_w_reg[2];
uint8_t aa_dest_stencil_reg[2];
uint8_t sample_pos_reg[2];
uint8_t sample_mask_in_reg[2];
uint8_t barycentric_coord_reg[INTEL_BARYCENTRIC_MODE_COUNT][2];
uint8_t depth_w_coef_reg;
uint8_t pc_bary_coef_reg;
uint8_t npc_bary_coef_reg;
uint8_t sample_offsets_reg;
};
struct brw_cs_thread_payload : public brw_thread_payload {
brw_cs_thread_payload(const brw_shader &v);
void load_subgroup_id(const brw_builder &bld, brw_reg &dest) const;
brw_reg local_invocation_id[3];
brw_reg inline_parameter;
protected:
brw_reg subgroup_id_;
};
struct brw_task_mesh_thread_payload : public brw_cs_thread_payload {
brw_task_mesh_thread_payload(brw_shader &v);
brw_reg extended_parameter_0;
brw_reg local_index;
brw_reg urb_output;
/* URB to read Task memory inputs. Only valid for MESH stage. */
brw_reg task_urb_input;
};
struct brw_bs_thread_payload : public brw_thread_payload {
brw_bs_thread_payload(const brw_shader &v);
brw_reg inline_parameter;
brw_reg global_arg_ptr;
brw_reg local_arg_ptr;
void load_shader_type(const brw_builder &bld, brw_reg &dest) const;
};