i965/gen7: Use to the correct program when uploading transform feedback state.
Transform feedback may come from either the geometry shader or the vertex shader, so we can't use ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX] to find the current post-link transform feedback information. Fortunately we can use ctx->TransformFeedback.CurrentObject->shader_program. Cc: 10.0 <mesa-stable@lists.freedesktop.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
e190709119
commit
43e77215b1
|
@ -305,6 +305,7 @@ void brw_init_state( struct brw_context *brw )
|
|||
STATIC_ASSERT(BRW_NUM_STATE_BITS <= 8 * sizeof(brw->state.dirty.brw));
|
||||
|
||||
ctx->DriverFlags.NewTransformFeedback = BRW_NEW_TRANSFORM_FEEDBACK;
|
||||
ctx->DriverFlags.NewTransformFeedbackProg = BRW_NEW_TRANSFORM_FEEDBACK;
|
||||
ctx->DriverFlags.NewRasterizerDiscard = BRW_NEW_RASTERIZER_DISCARD;
|
||||
ctx->DriverFlags.NewUniformBuffer = BRW_NEW_UNIFORM_BUFFER;
|
||||
ctx->DriverFlags.NewAtomicBuffer = BRW_NEW_ATOMIC_BUFFER;
|
||||
|
|
|
@ -39,14 +39,11 @@ static void
|
|||
upload_3dstate_so_buffers(struct brw_context *brw)
|
||||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* BRW_NEW_VERTEX_PROGRAM */
|
||||
const struct gl_shader_program *vs_prog =
|
||||
ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX];
|
||||
const struct gl_transform_feedback_info *linked_xfb_info =
|
||||
&vs_prog->LinkedTransformFeedback;
|
||||
/* BRW_NEW_TRANSFORM_FEEDBACK */
|
||||
struct gl_transform_feedback_object *xfb_obj =
|
||||
ctx->TransformFeedback.CurrentObject;
|
||||
const struct gl_transform_feedback_info *linked_xfb_info =
|
||||
&xfb_obj->shader_program->LinkedTransformFeedback;
|
||||
int i;
|
||||
|
||||
/* Set up the up to 4 output buffers. These are the ranges defined in the
|
||||
|
@ -102,12 +99,11 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
|
|||
const struct brw_vue_map *vue_map)
|
||||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* BRW_NEW_VERTEX_PROGRAM */
|
||||
const struct gl_shader_program *vs_prog =
|
||||
ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX];
|
||||
/* BRW_NEW_TRANSFORM_FEEDBACK */
|
||||
struct gl_transform_feedback_object *xfb_obj =
|
||||
ctx->TransformFeedback.CurrentObject;
|
||||
const struct gl_transform_feedback_info *linked_xfb_info =
|
||||
&vs_prog->LinkedTransformFeedback;
|
||||
&xfb_obj->shader_program->LinkedTransformFeedback;
|
||||
uint16_t so_decl[128];
|
||||
int buffer_mask = 0;
|
||||
int next_offset[4] = {0, 0, 0, 0};
|
||||
|
@ -260,7 +256,6 @@ const struct brw_tracked_state gen7_sol_state = {
|
|||
.dirty = {
|
||||
.mesa = (_NEW_LIGHT),
|
||||
.brw = (BRW_NEW_BATCH |
|
||||
BRW_NEW_VERTEX_PROGRAM |
|
||||
BRW_NEW_VUE_MAP_GEOM_OUT |
|
||||
BRW_NEW_TRANSFORM_FEEDBACK)
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue