1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NV50_STATEOBJ_H__
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __NV50_STATEOBJ_H__
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_state.h"
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_SCISSORS_CLIPPING
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SB_BEGIN_3D(so, m, s) \
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   (so)->state[(so)->size++] = NV50_FIFO_PKHDR(NV50_3D(m), s)
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SB_BEGIN_3D_(so, m, s) \
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   (so)->state[(so)->size++] = NV50_FIFO_PKHDR(SUBC_3D(m), s)
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SB_DATA(so, u) (so)->state[(so)->size++] = (u)
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv50_stateobj_tex.h"
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_blend_stateobj {
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_blend_state pipe;
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int size;
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t state[84]; // TODO: allocate less if !independent_blend_enable
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_rasterizer_stateobj {
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_rasterizer_state pipe;
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int size;
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t state[48];
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_zsa_stateobj {
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_depth_stencil_alpha_state pipe;
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int size;
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t state[29];
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_constbuf {
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union {
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct pipe_resource *buf;
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      const uint8_t *data;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } u;
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t size; /* max 65536 */
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint16_t offset;
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   boolean user; /* should only be TRUE if u.data is valid and non-NULL */
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_vertex_element {
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_vertex_element pipe;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t state;
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_vertex_stateobj {
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t min_instance_div[PIPE_MAX_ATTRIBS];
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint16_t vb_access_size[PIPE_MAX_ATTRIBS];
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct translate *translate;
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned num_elements;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t instance_elts;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t instance_bufs;
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   boolean need_conversion;
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned vertex_size;
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned packet_vertex_limit;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct nv50_vertex_element element[0];
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_so_target {
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_stream_output_target pipe;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_query *pq;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned stride;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   boolean clean;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct nv50_so_target *
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_so_target(struct pipe_stream_output_target *ptarg)
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return (struct nv50_so_target *)ptarg;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
79