freedreno: add helper to estimate # of bins per pipe
[mesa.git] / src / gallium / drivers / freedreno / freedreno_texture.h
index 94eb755ffb65b0a6e58f23de645a6839c45e8394..94fb2e810f2b370d55258d76fd02792593561803 100644 (file)
@@ -1,5 +1,3 @@
-/* -*- mode: C; c-file-style: "k&r"; tab-width 4; indent-tabs-mode: t; -*- */
-
 /*
  * Copyright (C) 2012 Rob Clark <robclark@freedesktop.org>
  *
 
 #include "pipe/p_context.h"
 
-#include "freedreno_context.h"
-#include "freedreno_resource.h"
-#include "freedreno_util.h"
-
-struct fd_sampler_stateobj {
-       struct pipe_sampler_state base;
-       uint32_t tex0, tex3, tex4, tex5;
-};
+void fd_sampler_states_bind(struct pipe_context *pctx,
+               enum pipe_shader_type shader, unsigned start,
+               unsigned nr, void **hwcso);
 
-struct fd_pipe_sampler_view {
-       struct pipe_sampler_view base;
-       struct fd_resource *tex_resource;
-       enum a2xx_sq_surfaceformat fmt;
-       uint32_t tex0, tex2, tex3;
-};
+void fd_set_sampler_views(struct pipe_context *pctx,
+                                                 enum pipe_shader_type shader,
+                                                 unsigned start, unsigned nr,
+                                                 struct pipe_sampler_view **views);
 
-static INLINE struct fd_pipe_sampler_view *
-fd_pipe_sampler_view(struct pipe_sampler_view *pview)
-{
-       return (struct fd_pipe_sampler_view *)pview;
-}
+void fd_texture_init(struct pipe_context *pctx);
 
-unsigned fd_get_const_idx(struct fd_context *ctx,
-               struct fd_texture_stateobj *tex, unsigned samp_id);
+struct fd_texture_stateobj;
 
-void fd_texture_init(struct pipe_context *pctx);
+/* Both a3xx/a4xx share the same layout for the border-color buffer,
+ * which contains the pre-swizzled (based on texture format) border
+ * color value, with the following layout (per sampler):
+ *
+ *  offset | description
+ *  -------+-------------
+ *  0x00:  | fp16[0]   \
+ *         | fp16[1]   |___ swizzled fp16 channel values for "small float"
+ *         | fp16[2]   |    formats (<= 16 bits per component, !integer)
+ *         | fp16[3]   /
+ *  0x08:  | padding
+ *  0x10:  | int16[0]  \
+ *         | int16[1]  |___ swizzled int16 channels for "small integer"
+ *         | int16[2]  |    formats (<= 16 bits per component, integer)
+ *         | int16[3]  /
+ *  0x18:  | padding
+ *  0x20:  | fp32[0]   \
+ *         | fp32[1]   |___ swizzled fp32 channel values for "large float"
+ *         | fp32[2]   |    formats (> 16 bits per component, !integer)
+ *         | fp32[3]   /
+ *  0x30:  | int32[0]  \
+ *         | int32[1]  |___ swizzled int32 channel values for "large int"
+ *         | int32[2]  |    formats (> 16 bits per component, integer)
+ *         | int32[3]  /
+ */
+#define BORDERCOLOR_SIZE 0x40
+void fd_setup_border_colors(struct fd_texture_stateobj *tex, void *ptr,
+               unsigned offset);
 
 #endif /* FREEDRENO_TEXTURE_H_ */