fd4_emit.h revision e9589a8fcf60f9d04ea31e6f84f43f9d10a636da
161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark/* -*- mode: C; c-file-style: "k&r"; tab-width 4; indent-tabs-mode: t; -*- */ 261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark/* 461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Copyright (C) 2014 Rob Clark <robclark@freedesktop.org> 561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * 661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Permission is hereby granted, free of charge, to any person obtaining a 761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * copy of this software and associated documentation files (the "Software"), 861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * to deal in the Software without restriction, including without limitation 961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * and/or sell copies of the Software, and to permit persons to whom the 1161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Software is furnished to do so, subject to the following conditions: 1261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * 1361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * The above copyright notice and this permission notice (including the next 1461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * paragraph) shall be included in all copies or substantial portions of the 1561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Software. 1661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * 1761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 2061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 2261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 2361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * SOFTWARE. 2461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * 2561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Authors: 2661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark * Rob Clark <robclark@freedesktop.org> 2761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark */ 2861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 2961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#ifndef FD4_EMIT_H 3061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#define FD4_EMIT_H 3161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 3261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#include "pipe/p_context.h" 3361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 3461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#include "freedreno_context.h" 35e9589a8fcf60f9d04ea31e6f84f43f9d10a636daRob Clark#include "fd4_format.h" 3661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#include "fd4_program.h" 3761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#include "ir3_shader.h" 3861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 3961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkstruct fd_ringbuffer; 4061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkenum adreno_state_block; 4161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 4261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkvoid fd4_emit_constant(struct fd_ringbuffer *ring, 4361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark enum adreno_state_block sb, 4461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark uint32_t regid, uint32_t offset, uint32_t sizedwords, 4561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark const uint32_t *dwords, struct pipe_resource *prsc); 4661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 4761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkvoid fd4_emit_gmem_restore_tex(struct fd_ringbuffer *ring, 4861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct pipe_surface *psurf); 4961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 5061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark/* grouped together emit-state for prog/vertex/state emit: */ 5161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkstruct fd4_emit { 5261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark const struct fd_vertex_state *vtx; 5361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark const struct fd_program_stateobj *prog; 5461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark const struct pipe_draw_info *info; 5561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct ir3_shader_key key; 563e698ebf44b443f28badf7443cf9516fc404871dRob Clark enum a4xx_color_fmt format; 5761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark uint32_t dirty; 5861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark bool rasterflat; 5961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 6061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark /* cached to avoid repeated lookups of same variants: */ 6161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct ir3_shader_variant *vp, *fp; 6261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark /* TODO: other shader stages.. */ 6361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark}; 6461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 653e698ebf44b443f28badf7443cf9516fc404871dRob Clarkstatic inline enum a4xx_color_fmt fd4_emit_format(struct pipe_surface *surf) 663e698ebf44b443f28badf7443cf9516fc404871dRob Clark{ 673e698ebf44b443f28badf7443cf9516fc404871dRob Clark if (!surf) 683e698ebf44b443f28badf7443cf9516fc404871dRob Clark return 0; 693e698ebf44b443f28badf7443cf9516fc404871dRob Clark return fd4_pipe2color(surf->format); 703e698ebf44b443f28badf7443cf9516fc404871dRob Clark} 713e698ebf44b443f28badf7443cf9516fc404871dRob Clark 7261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkstatic inline struct ir3_shader_variant * 7361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkfd4_emit_get_vp(struct fd4_emit *emit) 7461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark{ 7561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark if (!emit->vp) { 7661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct fd4_shader_stateobj *so = emit->prog->vp; 7761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark emit->vp = ir3_shader_variant(so->shader, emit->key); 7861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark } 7961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark return emit->vp; 8061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark} 8161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 8261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkstatic inline struct ir3_shader_variant * 8361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkfd4_emit_get_fp(struct fd4_emit *emit) 8461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark{ 8561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark if (!emit->fp) { 8661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct fd4_shader_stateobj *so = emit->prog->fp; 8761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark emit->fp = ir3_shader_variant(so->shader, emit->key); 8861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark } 8961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark return emit->fp; 9061c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark} 9161c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 9261c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkvoid fd4_emit_vertex_bufs(struct fd_ringbuffer *ring, struct fd4_emit *emit); 9361c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 9461c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkvoid fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring, 9561c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark struct fd4_emit *emit); 9661c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 9761c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clarkvoid fd4_emit_restore(struct fd_context *ctx); 9861c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark 9961c68b69d704b5faa5ff9d2b73b24bebf7e19412Rob Clark#endif /* FD4_EMIT_H */ 100