spec@arb_texture_rg@texwrap formats-float,Fail
spec@arb_texture_rg@texwrap formats-float@GL_R32F- NPOT,Fail
spec@arb_texture_rg@texwrap formats-float@GL_RG32F- NPOT,Fail
-spec@arb_transform_feedback2@change objects while paused (gles3),Fail
spec@egl 1.4@eglterminate then unbind context,Fail
spec@egl_ext_protected_content@conformance,Fail
spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
struct pipe_stream_output_target base;
/* Number of transform feedback vertices written to this target */
uint32_t recorded_vertex_count;
+ /* Number of vertices we've written into the buffer so far */
+ uint32_t offset;
};
struct v3d_streamout_stateobj {
struct pipe_stream_output_target *targets[PIPE_MAX_SO_BUFFERS];
- /* Number of vertices we've written into the buffer so far. */
- uint32_t offsets[PIPE_MAX_SO_BUFFERS];
unsigned num_targets;
};
* needs some clamping to the buffer size.
*/
for (int i = 0; i < v3d->streamout.num_targets; i++)
- v3d->streamout.offsets[i] += draws[0].count;
+ v3d_stream_output_target(v3d->streamout.targets[i])->offset +=
+ draws[0].count;
if (v3d->zsa && job->zsbuf && v3d->zsa->base.depth_enabled) {
struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
struct v3d_uncompiled_shader *tf_shader = get_tf_shader(v3d);
struct v3d_streamout_stateobj *so = &v3d->streamout;
for (int i = 0; i < so->num_targets; i++) {
- const struct pipe_stream_output_target *target =
+ struct pipe_stream_output_target *target =
so->targets[i];
struct v3d_resource *rsc = target ?
v3d_resource(target->buffer) : NULL;
struct pipe_shader_state *ss = &tf_shader->base;
struct pipe_stream_output_info *info = &ss->stream_output;
- uint32_t offset = (v3d->streamout.offsets[i] *
- info->stride[i] * 4);
+ uint32_t offset = target ?
+ v3d_stream_output_target(target)->offset * info->stride[i] * 4 : 0;
#if V3D_VERSION >= 40
if (!target)
if (num_targets == 0 && so->num_targets > 0)
v3d_update_primitive_counters(ctx);
+ /* If offset is (unsigned) -1, it means continue appending to the
+ * buffer at the existing offset.
+ */
for (i = 0; i < num_targets; i++) {
- if (offsets[i] != -1)
- so->offsets[i] = offsets[i];
+ if (offsets[i] != (unsigned)-1)
+ v3d_stream_output_target(targets[i])->offset = offsets[i];
pipe_so_target_reference(&so->targets[i], targets[i]);
}