ilo: construct depth/stencil command in create_surface()
[mesa.git] / src / gallium / drivers / ilo / ilo_gpe.h
index 1b5a38f5d3c8e88a80498c0f20f862865b0544b9..fcbd5b888b6e359abf1290a7ccc0a99dd2ab1c0f 100644 (file)
@@ -111,8 +111,24 @@ struct ilo_scissor_state {
    uint32_t payload[ILO_MAX_VIEWPORTS * 2];
 };
 
+struct ilo_rasterizer_clip {
+   /* 3DSTATE_CLIP */
+   uint32_t payload[3];
+
+   uint32_t can_enable_guardband;
+};
+
+struct ilo_rasterizer_sf {
+   /* 3DSTATE_SF */
+   uint32_t payload[6];
+   uint32_t dw_msaa;
+};
+
 struct ilo_rasterizer_state {
    struct pipe_rasterizer_state state;
+
+   struct ilo_rasterizer_clip clip;
+   struct ilo_rasterizer_sf sf;
 };
 
 struct ilo_dsa_state {
@@ -179,8 +195,13 @@ struct ilo_view_state {
    unsigned count;
 };
 
+struct ilo_cbuf_cso {
+   struct pipe_resource *resource;
+   struct ilo_view_surface surface;
+};
+
 struct ilo_cbuf_state {
-   struct pipe_constant_buffer states[ILO_MAX_CONST_BUFFERS];
+   struct ilo_cbuf_cso cso[ILO_MAX_CONST_BUFFERS];
    unsigned count;
 };
 
@@ -189,9 +210,25 @@ struct ilo_resource_state {
    unsigned count;
 };
 
+struct ilo_surface_cso {
+   struct pipe_surface base;
+
+   bool is_rt;
+   union {
+      struct ilo_view_surface rt;
+      struct ilo_zs_surface {
+         uint32_t payload[10];
+         struct intel_bo *bo;
+         struct intel_bo *hiz_bo;
+         struct intel_bo *separate_s8_bo;
+      } zs;
+   } u;
+};
+
 struct ilo_fb_state {
    struct pipe_framebuffer_state state;
 
+   struct ilo_zs_surface null_zs;
    unsigned num_samples;
 };
 
@@ -239,6 +276,25 @@ void
 ilo_gpe_set_scissor_null(const struct ilo_dev_info *dev,
                          struct ilo_scissor_state *scissor);
 
+void
+ilo_gpe_init_rasterizer_clip(const struct ilo_dev_info *dev,
+                             const struct pipe_rasterizer_state *state,
+                             struct ilo_rasterizer_clip *clip);
+
+void
+ilo_gpe_init_rasterizer_sf(const struct ilo_dev_info *dev,
+                           const struct pipe_rasterizer_state *state,
+                           struct ilo_rasterizer_sf *sf);
+
+static inline void
+ilo_gpe_init_rasterizer(const struct ilo_dev_info *dev,
+                        const struct pipe_rasterizer_state *state,
+                        struct ilo_rasterizer_state *rasterizer)
+{
+   ilo_gpe_init_rasterizer_clip(dev, state, &rasterizer->clip);
+   ilo_gpe_init_rasterizer_sf(dev, state, &rasterizer->sf);
+}
+
 void
 ilo_gpe_init_dsa(const struct ilo_dev_info *dev,
                  const struct pipe_depth_stencil_alpha_state *state,
@@ -364,4 +420,12 @@ ilo_gpe_init_view_surface_for_texture(const struct ilo_dev_info *dev,
    }
 }
 
+void
+ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
+                        const struct ilo_texture *tex,
+                        enum pipe_format format,
+                        unsigned level,
+                        unsigned first_layer, unsigned num_layers,
+                        struct ilo_zs_surface *zs);
+
 #endif /* ILO_GPE_H */