- vertex_postfix.varyings = varyings;
- tiler_postfix.varyings = varyings;
- vertex_postfix.varying_meta = vs_vary;
- tiler_postfix.varying_meta = fs_vary;
- tiler_postfix.position_varying = pos;
- vertex_postfix.sampler_descriptor = panfrost_emit_sampler_descriptors(batch, PIPE_SHADER_VERTEX);
- tiler_postfix.sampler_descriptor = panfrost_emit_sampler_descriptors(batch, PIPE_SHADER_FRAGMENT);
- vertex_postfix.textures = panfrost_emit_texture_descriptors(batch, PIPE_SHADER_VERTEX);
- tiler_postfix.textures = panfrost_emit_texture_descriptors(batch, PIPE_SHADER_FRAGMENT);
- vertex_postfix.uniform_buffers = panfrost_emit_const_buf(batch, PIPE_SHADER_VERTEX, &push_vert);
- tiler_postfix.uniform_buffers = panfrost_emit_const_buf(batch, PIPE_SHADER_FRAGMENT, &push_frag);
- vertex_postfix.uniforms = push_vert;
- tiler_postfix.uniforms = push_frag;
- tiler_postfix.viewport = panfrost_emit_viewport(batch);
-
- vertex_postfix.shader = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_VERTEX);
- tiler_postfix.shader = panfrost_emit_frag_shader_meta(batch);
+
+ pan_pack(&vertex_postfix, DRAW, cfg) {
+ cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x2 : 0x6;
+ cfg.state = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_VERTEX);
+ cfg.attributes = panfrost_emit_vertex_data(batch, &cfg.attribute_buffers);
+ cfg.varyings = vs_vary;
+ cfg.varying_buffers = varyings;
+ cfg.shared = shared_mem;
+ pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_VERTEX);
+ }
+
+ pan_pack(&tiler_postfix, DRAW, cfg) {
+ cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x3 : 0x7;
+ cfg.front_face_ccw = rast->front_ccw;
+ cfg.cull_front_face = rast->cull_face & PIPE_FACE_FRONT;
+ cfg.cull_back_face = rast->cull_face & PIPE_FACE_BACK;
+ cfg.position = pos;
+ cfg.state = panfrost_emit_frag_shader_meta(batch);
+ cfg.viewport = panfrost_emit_viewport(batch);
+ cfg.varyings = fs_vary;
+ cfg.varying_buffers = varyings;
+ cfg.shared = shared_mem;
+
+ pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_FRAGMENT);
+
+ if (ctx->occlusion_query) {
+ cfg.occlusion_query = MALI_OCCLUSION_MODE_PREDICATE;
+ cfg.occlusion = ctx->occlusion_query->bo->gpu;
+ panfrost_batch_add_bo(ctx->batch, ctx->occlusion_query->bo,
+ PAN_BO_ACCESS_SHARED |
+ PAN_BO_ACCESS_RW |
+ PAN_BO_ACCESS_FRAGMENT);
+ }
+ }