mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
i965/gs: Implement basic gl_PrimitiveIDIn functionality.
If the geometry shader refers to the built-in variable gl_PrimitiveIDIn, we need to set a bit in 3DSTATE_GS to tell the hardware to dispatch primitive ID to r1, and we need to leave room for it when allocating registers. Note: this feature doesn't yet work properly when software primitive restart is in use (the primitive ID counter will incorrectly reset with each primitive restart, since software primitive restart works by performing multiple draw calls). I plan to address that in a future patch series. Fixes piglit test "spec/glsl-1.50/execution/geometry/primitive-id-in". Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
f67fa8f3c8
commit
3374dabce7
4 changed files with 11 additions and 0 deletions
|
|
@ -588,6 +588,8 @@ struct brw_gs_prog_data
|
|||
* Ignored if control_data_header_size is 0.
|
||||
*/
|
||||
unsigned control_data_format;
|
||||
|
||||
bool include_primitive_id;
|
||||
};
|
||||
|
||||
/** Number of texture sampler units */
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ do_gs_prog(struct brw_context *brw,
|
|||
c.key = *key;
|
||||
c.gp = gp;
|
||||
|
||||
c.prog_data.include_primitive_id =
|
||||
(gp->program.Base.InputsRead & VARYING_BIT_PRIMITIVE_ID) != 0;
|
||||
|
||||
/* Allocate the references to the uniforms that will end up in the
|
||||
* prog_data associated with the compiled program, and which will be freed
|
||||
* by the state cache.
|
||||
|
|
|
|||
|
|
@ -102,6 +102,10 @@ vec4_gs_visitor::setup_payload()
|
|||
*/
|
||||
reg++;
|
||||
|
||||
/* If the shader uses gl_PrimitiveIDIn, that goes in r1. */
|
||||
if (c->prog_data.include_primitive_id)
|
||||
attribute_map[VARYING_SLOT_PRIMITIVE_ID] = reg++;
|
||||
|
||||
reg = setup_uniforms(reg);
|
||||
|
||||
reg = setup_varying_inputs(reg, attribute_map);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ upload_gs_state(struct brw_context *brw)
|
|||
GEN7_GS_CONTROL_DATA_HEADER_SIZE_SHIFT) |
|
||||
GEN7_GS_DISPATCH_MODE_DUAL_OBJECT |
|
||||
GEN6_GS_STATISTICS_ENABLE |
|
||||
(brw->gs.prog_data->include_primitive_id ?
|
||||
GEN7_GS_INCLUDE_PRIMITIVE_ID : 0) |
|
||||
GEN7_GS_ENABLE;
|
||||
|
||||
if (brw->is_haswell) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue