Requires Evergreen or later hardware. Signed-off-by: Glenn Kennard <glenn.kennard@gmail.com>tags/10.4-branchpoint
@@ -104,7 +104,7 @@ GL 4.0, GLSL 4.00: | |||
- Fused multiply-add DONE () | |||
- Packing/bitfield/conversion functions DONE (r600) | |||
- Enhanced textureGather DONE (r600, radeonsi) | |||
- Geometry shader instancing DONE () | |||
- Geometry shader instancing DONE (r600) | |||
- Geometry shader multiple streams DONE () | |||
- Enhanced per-sample shading DONE (r600) | |||
- Interpolation functions DONE () |
@@ -2963,8 +2963,8 @@ void evergreen_update_gs_state(struct pipe_context *ctx, struct r600_pipe_shader | |||
if (rctx->screen->b.info.drm_minor >= 35) { | |||
r600_store_context_reg(cb, R_028B90_VGT_GS_INSTANCE_CNT, | |||
S_028B90_CNT(0) | | |||
S_028B90_ENABLE(0)); | |||
S_028B90_CNT(MIN2(rshader->gs_num_invocations, 127)) | | |||
S_028B90_ENABLE(rshader->gs_num_invocations > 0)); | |||
} | |||
r600_store_context_reg_seq(cb, R_02891C_SQ_GS_VERT_ITEMSIZE, 4); | |||
r600_store_value(cb, cp_shader->ring_item_size >> 2); |
@@ -706,6 +706,8 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx) | |||
break; | |||
} else if (d->Semantic.Name == TGSI_SEMANTIC_VERTEXID) | |||
break; | |||
else if (d->Semantic.Name == TGSI_SEMANTIC_INVOCATIONID) | |||
break; | |||
default: | |||
R600_ERR("unsupported file %d declaration\n", d->Declaration.File); | |||
return -EINVAL; | |||
@@ -811,6 +813,12 @@ static void tgsi_src(struct r600_shader_ctx *ctx, | |||
r600_src->swizzle[2] = 0; | |||
r600_src->swizzle[3] = 0; | |||
r600_src->sel = 0; | |||
} else if (ctx->info.system_value_semantic_name[tgsi_src->Register.Index] == TGSI_SEMANTIC_INVOCATIONID) { | |||
r600_src->swizzle[0] = 3; | |||
r600_src->swizzle[1] = 3; | |||
r600_src->swizzle[2] = 3; | |||
r600_src->swizzle[3] = 3; | |||
r600_src->sel = 1; | |||
} | |||
} else { | |||
if (tgsi_src->Register.Indirect) | |||
@@ -1753,6 +1761,9 @@ static int r600_shader_from_tgsi(struct r600_context *rctx, | |||
case TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES: | |||
shader->gs_max_out_vertices = property->u[0].Data; | |||
break; | |||
case TGSI_PROPERTY_GS_INVOCATIONS: | |||
shader->gs_num_invocations = property->u[0].Data; | |||
break; | |||
} | |||
break; | |||
default: |
@@ -74,6 +74,7 @@ struct r600_shader { | |||
unsigned gs_input_prim; | |||
unsigned gs_output_prim; | |||
unsigned gs_max_out_vertices; | |||
unsigned gs_num_invocations; | |||
/* size in bytes of a data item in the ring (single vertex data) */ | |||
unsigned ring_item_size; | |||