mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
mesa: Record transform feedback strides/offsets in linker output.
This patch adds two new fields to the gl_transform_feedback_info
struct:
- BufferStride records the total number of components (per vertex)
that transform feedback is being instructed to store in each buffer.
- Outputs[i].DstOffset records the offset within the interleaved
structure of each transform feedback output.
These values are needed by the i965 gen6 and r600g back-ends, so it
seems better to have the linker provide them rather than force each
back-end to compute them independently.
Also, DstOffset helps pave the way for supporting
ARB_transform_feedback3, which allows the transform feedback output to
contain holes between attributes by specifying
gl_SkipComponents{1,2,3,4} as the varying name.
Reviewed-by: Marek Olšák <maraeo@gmail.com>
This commit is contained in:
parent
9f8573b7ae
commit
942d452047
2 changed files with 14 additions and 1 deletions
|
|
@ -1598,7 +1598,9 @@ tfeedback_decl::store(struct gl_shader_program *prog,
|
|||
info->Outputs[info->NumOutputs].OutputRegister = this->location + v;
|
||||
info->Outputs[info->NumOutputs].NumComponents = this->vector_elements;
|
||||
info->Outputs[info->NumOutputs].OutputBuffer = buffer;
|
||||
info->Outputs[info->NumOutputs].DstOffset = info->BufferStride[buffer];
|
||||
++info->NumOutputs;
|
||||
info->BufferStride[buffer] += this->vector_elements;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1863,7 +1865,8 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog,
|
|||
tfeedback_decl *tfeedback_decls)
|
||||
{
|
||||
unsigned total_tfeedback_components = 0;
|
||||
prog->LinkedTransformFeedback.NumOutputs = 0;
|
||||
memset(&prog->LinkedTransformFeedback, 0,
|
||||
sizeof(prog->LinkedTransformFeedback));
|
||||
for (unsigned i = 0; i < num_tfeedback_decls; ++i) {
|
||||
unsigned buffer =
|
||||
prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS ? i : 0;
|
||||
|
|
|
|||
|
|
@ -1821,7 +1821,17 @@ struct gl_transform_feedback_info {
|
|||
unsigned OutputRegister;
|
||||
unsigned OutputBuffer;
|
||||
unsigned NumComponents;
|
||||
|
||||
/** offset (in DWORDs) of this output within the interleaved structure */
|
||||
unsigned DstOffset;
|
||||
} Outputs[MAX_PROGRAM_OUTPUTS];
|
||||
|
||||
/**
|
||||
* Total number of components stored in each buffer. This may be used by
|
||||
* hardware back-ends to determine the correct stride when interleaving
|
||||
* multiple transform feedback outputs in the same buffer.
|
||||
*/
|
||||
unsigned BufferStride[MAX_FEEDBACK_ATTRIBS];
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue