mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
radeonsi: create get_base_vertex() helper
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ae47af50d6
commit
7f91473414
1 changed files with 20 additions and 14 deletions
|
|
@ -1908,6 +1908,25 @@ static LLVMValueRef get_sample_id(struct si_shader_context *ctx)
|
|||
return unpack_param(ctx, SI_PARAM_ANCILLARY, 8, 4);
|
||||
}
|
||||
|
||||
static LLVMValueRef get_base_vertex(struct ac_shader_abi *abi)
|
||||
{
|
||||
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
|
||||
|
||||
/* For non-indexed draws, the base vertex set by the driver
|
||||
* (for direct draws) or the CP (for indirect draws) is the
|
||||
* first vertex ID, but GLSL expects 0 to be returned.
|
||||
*/
|
||||
LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn,
|
||||
ctx->param_vs_state_bits);
|
||||
LLVMValueRef indexed;
|
||||
|
||||
indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, "");
|
||||
indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
|
||||
|
||||
return LLVMBuildSelect(ctx->ac.builder, indexed, ctx->abi.base_vertex,
|
||||
ctx->i32_0, "");
|
||||
}
|
||||
|
||||
static LLVMValueRef get_block_size(struct ac_shader_abi *abi)
|
||||
{
|
||||
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
|
||||
|
|
@ -2068,21 +2087,8 @@ void si_load_system_value(struct si_shader_context *ctx,
|
|||
break;
|
||||
|
||||
case TGSI_SEMANTIC_BASEVERTEX:
|
||||
{
|
||||
/* For non-indexed draws, the base vertex set by the driver
|
||||
* (for direct draws) or the CP (for indirect draws) is the
|
||||
* first vertex ID, but GLSL expects 0 to be returned.
|
||||
*/
|
||||
LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn, ctx->param_vs_state_bits);
|
||||
LLVMValueRef indexed;
|
||||
|
||||
indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, "");
|
||||
indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
|
||||
|
||||
value = LLVMBuildSelect(ctx->ac.builder, indexed,
|
||||
ctx->abi.base_vertex, ctx->i32_0, "");
|
||||
value = get_base_vertex(&ctx->abi);
|
||||
break;
|
||||
}
|
||||
|
||||
case TGSI_SEMANTIC_BASEINSTANCE:
|
||||
value = ctx->abi.start_instance;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue