radv: Remove remaining hard coded references to VS.
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -493,6 +493,14 @@ radv_lookup_user_sgpr(struct radv_pipeline *pipeline,
|
|||||||
gl_shader_stage stage,
|
gl_shader_stage stage,
|
||||||
int idx)
|
int idx)
|
||||||
{
|
{
|
||||||
|
if (stage == MESA_SHADER_VERTEX) {
|
||||||
|
if (pipeline->shaders[MESA_SHADER_VERTEX])
|
||||||
|
return &pipeline->shaders[MESA_SHADER_VERTEX]->info.user_sgprs_locs.shader_data[idx];
|
||||||
|
if (pipeline->shaders[MESA_SHADER_TESS_CTRL])
|
||||||
|
return &pipeline->shaders[MESA_SHADER_TESS_CTRL]->info.user_sgprs_locs.shader_data[idx];
|
||||||
|
if (pipeline->shaders[MESA_SHADER_GEOMETRY])
|
||||||
|
return &pipeline->shaders[MESA_SHADER_GEOMETRY]->info.user_sgprs_locs.shader_data[idx];
|
||||||
|
}
|
||||||
return &pipeline->shaders[stage]->info.user_sgprs_locs.shader_data[idx];
|
return &pipeline->shaders[stage]->info.user_sgprs_locs.shader_data[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,9 +724,12 @@ radv_emit_vertex_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
{
|
{
|
||||||
struct radv_shader_variant *vs;
|
struct radv_shader_variant *vs;
|
||||||
|
|
||||||
assert (pipeline->shaders[MESA_SHADER_VERTEX]);
|
radeon_set_context_reg(cmd_buffer->cs, R_028A84_VGT_PRIMITIVEID_EN, pipeline->graphics.vgt_primitiveid_en);
|
||||||
|
|
||||||
|
/* Skip shaders merged into HS/GS */
|
||||||
vs = pipeline->shaders[MESA_SHADER_VERTEX];
|
vs = pipeline->shaders[MESA_SHADER_VERTEX];
|
||||||
|
if (!vs)
|
||||||
|
return;
|
||||||
|
|
||||||
if (vs->info.vs.as_ls)
|
if (vs->info.vs.as_ls)
|
||||||
radv_emit_hw_ls(cmd_buffer, vs);
|
radv_emit_hw_ls(cmd_buffer, vs);
|
||||||
@@ -726,8 +737,6 @@ radv_emit_vertex_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
radv_emit_hw_es(cmd_buffer, vs, &vs->info.vs.es_info);
|
radv_emit_hw_es(cmd_buffer, vs, &vs->info.vs.es_info);
|
||||||
else
|
else
|
||||||
radv_emit_hw_vs(cmd_buffer, pipeline, vs, &vs->info.vs.outinfo);
|
radv_emit_hw_vs(cmd_buffer, pipeline, vs, &vs->info.vs.outinfo);
|
||||||
|
|
||||||
radeon_set_context_reg(cmd_buffer->cs, R_028A84_VGT_PRIMITIVEID_EN, pipeline->graphics.vgt_primitiveid_en);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1697,7 +1706,7 @@ radv_cmd_buffer_update_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
|
|
||||||
if ((cmd_buffer->state.pipeline != cmd_buffer->state.emitted_pipeline || cmd_buffer->state.vb_dirty) &&
|
if ((cmd_buffer->state.pipeline != cmd_buffer->state.emitted_pipeline || cmd_buffer->state.vb_dirty) &&
|
||||||
cmd_buffer->state.pipeline->vertex_elements.count &&
|
cmd_buffer->state.pipeline->vertex_elements.count &&
|
||||||
cmd_buffer->state.pipeline->shaders[MESA_SHADER_VERTEX]->info.info.vs.has_vertex_buffers) {
|
radv_get_vertex_shader(cmd_buffer->state.pipeline)->info.info.vs.has_vertex_buffers) {
|
||||||
struct radv_vertex_elements_info *velems = &cmd_buffer->state.pipeline->vertex_elements;
|
struct radv_vertex_elements_info *velems = &cmd_buffer->state.pipeline->vertex_elements;
|
||||||
unsigned vb_offset;
|
unsigned vb_offset;
|
||||||
void *vb_ptr;
|
void *vb_ptr;
|
||||||
@@ -2989,7 +2998,7 @@ radv_cs_emit_indirect_draw_packet(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct radeon_winsys_cs *cs = cmd_buffer->cs;
|
struct radeon_winsys_cs *cs = cmd_buffer->cs;
|
||||||
unsigned di_src_sel = indexed ? V_0287F0_DI_SRC_SEL_DMA
|
unsigned di_src_sel = indexed ? V_0287F0_DI_SRC_SEL_DMA
|
||||||
: V_0287F0_DI_SRC_SEL_AUTO_INDEX;
|
: V_0287F0_DI_SRC_SEL_AUTO_INDEX;
|
||||||
bool draw_id_enable = cmd_buffer->state.pipeline->shaders[MESA_SHADER_VERTEX]->info.info.vs.needs_draw_id;
|
bool draw_id_enable = radv_get_vertex_shader(cmd_buffer->state.pipeline)->info.info.vs.needs_draw_id;
|
||||||
uint32_t base_reg = cmd_buffer->state.pipeline->graphics.vtx_base_sgpr;
|
uint32_t base_reg = cmd_buffer->state.pipeline->graphics.vtx_base_sgpr;
|
||||||
assert(base_reg);
|
assert(base_reg);
|
||||||
|
|
||||||
|
@@ -1207,6 +1207,16 @@ static void si_multiwave_lds_size_workaround(struct radv_device *device,
|
|||||||
*lds_size = MAX2(*lds_size, 8);
|
*lds_size = MAX2(*lds_size, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct radv_shader_variant *
|
||||||
|
radv_get_vertex_shader(struct radv_pipeline *pipeline)
|
||||||
|
{
|
||||||
|
if (pipeline->shaders[MESA_SHADER_VERTEX])
|
||||||
|
return pipeline->shaders[MESA_SHADER_VERTEX];
|
||||||
|
if (pipeline->shaders[MESA_SHADER_TESS_CTRL])
|
||||||
|
return pipeline->shaders[MESA_SHADER_TESS_CTRL];
|
||||||
|
return pipeline->shaders[MESA_SHADER_GEOMETRY];
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
calculate_tess_state(struct radv_pipeline *pipeline,
|
calculate_tess_state(struct radv_pipeline *pipeline,
|
||||||
const VkGraphicsPipelineCreateInfo *pCreateInfo)
|
const VkGraphicsPipelineCreateInfo *pCreateInfo)
|
||||||
@@ -1223,7 +1233,7 @@ calculate_tess_state(struct radv_pipeline *pipeline,
|
|||||||
|
|
||||||
/* This calculates how shader inputs and outputs among VS, TCS, and TES
|
/* This calculates how shader inputs and outputs among VS, TCS, and TES
|
||||||
* are laid out in LDS. */
|
* are laid out in LDS. */
|
||||||
num_tcs_inputs = util_last_bit64(pipeline->shaders[MESA_SHADER_VERTEX]->info.vs.outputs_written);
|
num_tcs_inputs = util_last_bit64(radv_get_vertex_shader(pipeline)->info.vs.outputs_written);
|
||||||
|
|
||||||
num_tcs_outputs = util_last_bit64(pipeline->shaders[MESA_SHADER_TESS_CTRL]->info.tcs.outputs_written); //tcs->outputs_written
|
num_tcs_outputs = util_last_bit64(pipeline->shaders[MESA_SHADER_TESS_CTRL]->info.tcs.outputs_written); //tcs->outputs_written
|
||||||
num_tcs_output_cp = pipeline->shaders[MESA_SHADER_TESS_CTRL]->info.tcs.tcs_vertices_out; //TCS VERTICES OUT
|
num_tcs_output_cp = pipeline->shaders[MESA_SHADER_TESS_CTRL]->info.tcs.tcs_vertices_out; //TCS VERTICES OUT
|
||||||
@@ -2024,7 +2034,7 @@ radv_pipeline_init(struct radv_pipeline *pipeline,
|
|||||||
if (loc->sgpr_idx != -1) {
|
if (loc->sgpr_idx != -1) {
|
||||||
pipeline->graphics.vtx_base_sgpr = radv_shader_stage_to_user_data_0(MESA_SHADER_VERTEX, device->physical_device->rad_info.chip_class, radv_pipeline_has_gs(pipeline), radv_pipeline_has_tess(pipeline));
|
pipeline->graphics.vtx_base_sgpr = radv_shader_stage_to_user_data_0(MESA_SHADER_VERTEX, device->physical_device->rad_info.chip_class, radv_pipeline_has_gs(pipeline), radv_pipeline_has_tess(pipeline));
|
||||||
pipeline->graphics.vtx_base_sgpr += loc->sgpr_idx * 4;
|
pipeline->graphics.vtx_base_sgpr += loc->sgpr_idx * 4;
|
||||||
if (pipeline->shaders[MESA_SHADER_VERTEX]->info.info.vs.needs_draw_id)
|
if (radv_get_vertex_shader(pipeline)->info.info.vs.needs_draw_id)
|
||||||
pipeline->graphics.vtx_emit_num = 3;
|
pipeline->graphics.vtx_emit_num = 3;
|
||||||
else
|
else
|
||||||
pipeline->graphics.vtx_emit_num = 2;
|
pipeline->graphics.vtx_emit_num = 2;
|
||||||
|
@@ -1129,6 +1129,8 @@ struct ac_userdata_info *radv_lookup_user_sgpr(struct radv_pipeline *pipeline,
|
|||||||
gl_shader_stage stage,
|
gl_shader_stage stage,
|
||||||
int idx);
|
int idx);
|
||||||
|
|
||||||
|
struct radv_shader_variant *radv_get_vertex_shader(struct radv_pipeline *pipeline);
|
||||||
|
|
||||||
struct radv_graphics_pipeline_create_info {
|
struct radv_graphics_pipeline_create_info {
|
||||||
bool use_rectlist;
|
bool use_rectlist;
|
||||||
bool db_depth_clear;
|
bool db_depth_clear;
|
||||||
|
Reference in New Issue
Block a user