[Mesa-dev] [PATCH 1/3] gallium: add resource normalization flags (v4)

Luca Barbieri luca at luca-barbieri.com
Tue Aug 17 12:54:29 PDT 2010


Changes in v4:
- Use a single flag for state tracker -> driver like in v1, but with
  a better name and separated from the other flags
- Fully clarify semantics of that flag

Changes in v3:
- Rework to use multiple flags

Changes in v2:
- Add a much longer and better comment

This allows:
1. The state tracker to tell the driver which normalizations it needs
2. The driver to tell the state tracker which normalization it prefers
---
 src/gallium/include/pipe/p_defines.h |   55 ++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 00aa207..9625d52 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -313,6 +313,61 @@ enum pipe_transfer_usage {
 /* Flags for the driver about resource behaviour:
  */
 #define PIPE_RESOURCE_FLAG_GEN_MIPS    (1 << 0)  /* Driver performs autogen mips */
+
+/*
+ * PIPE_CAP_FLEXIBLE_SAMPLING is a fictitious cap that doesn't currently
+ * exist, but will be supported by OpenCL-capable cards.
+ *
+ * If PIPE_CAP_FLEXIBLE_SAMPLING is supported:
+ * - PIPE_RESOURCE_FLAG_TEXTURE_RECT_SEMANTICS is ignored
+ * - if PIPE_RESOURCE_FLAG_PREFER_UNNORMALIZED_COORDS is set by the driver,
+ *      should use unnormalized coordinates, but can use normalized too
+ * - If PIPE_RESOURCE_FLAG_PREFER_NORMALIZED_COORDS is set by the driver,
+ *      should use normalized coordinates, but can use unnormalized too
+ * - Otherwise, can use any normalization indifferently
+
+ * If PIPE_CAP_FLEXIBLE_SAMPLING is not set
+ *    and PIPE_RESOURCE_FLAG_TEXTURE_RECT_SEMANTICS is set:
+ * - last_level must be 0
+ * - Must use a clamp wrap mode
+ * - if PIPE_RESOURCE_FLAG_PREFER_NORMALIZED_COORDS is set by the driver,.
+ *      should use normalized coordinates, but can use unnormalized too
+ * - if PIPE_RESOURCE_FLAG_PREFER_UNNORMALIZED_COORDS is set by the driver
+ *      must use unnormalized coordinates
+ * - Otherwise, can use any normalization indifferently
+
+ * If PIPE_CAP_FLEXIBLE_SAMPLING is not set
+ *    and PIPE_RESOURCE_FLAG_TEXTURE_RECT_SEMANTICS is not set:
+ * - If NPOT and PIPE_CAP_NPOT_TEXTURES is not supported,
+ *      last_level must be 0
+ * - If using unnormalized coordinates or
+ *    if NPOT and PIPE_CAP_NPOT_TEXTURES is not supported
+ *       Must use a clamp wrap mode
+ * - if PIPE_RESOURCE_FLAG_PREFER_NORMALIZED_COORDS is set by the driver,.
+ *      must use normalized coordinates
+ * - if PIPE_RESOURCE_FLAG_PREFER_UNNORMALIZED_COORDS is set by the driver
+ *    and NPOT and PIPE_CAP_NPOT_TEXTURES is not supported,
+ *      must use unnormalized coordinates
+  - if PIPE_RESOURCE_FLAG_PREFER_UNNORMALIZED_COORDS is set by the driver
+ *    and POT or PIPE_CAP_NPOT_TEXTURES is supported,
+ *      should use unnormalized coordinates, but can use normalized too
+ * - Otherwise, can use any normalization indifferently
+ */
+#define PIPE_RESOURCE_FLAG_TEXTURE_RECT_SEMANTICS (1 << 1)
+
+/* State trackers must not set these flags.
+ *
+ * Drivers should set these flags to inform the state tracker of the normalization
+ * it should use in internal drawing code, if they prefer any.
+ *
+ * Drivers who need to always have the same normalization used for a given
+ * resource must set either flag depending on whether
+ * PIPE_RESOURCE_FLAG_TEXTURE_RECT_SEMANTICS has been specified by the
+ * driver
+ */
+#define PIPE_RESOURCE_FLAG_PREFER_UNNORMALIZED_COORDS (1 << 2)
+#define PIPE_RESOURCE_FLAG_PREFER_NORMALIZED_COORDS (1 << 3)
+
 #define PIPE_RESOURCE_FLAG_DRV_PRIV    (1 << 16) /* driver/winsys private */
 #define PIPE_RESOURCE_FLAG_ST_PRIV     (1 << 24) /* state-tracker/winsys private */
 
-- 
1.7.0.4



More information about the mesa-dev mailing list