gallium: add PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT
authorMarek Olšák <maraeo@gmail.com>
Tue, 24 Apr 2012 15:31:17 +0000 (17:31 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 29 Apr 2012 23:09:57 +0000 (01:09 +0200)
This is required for any serious constant buffer support.
Constant buffer offsets on ATI and NVIDIA DX10 and DX11 GPUs must be
a multiple of 256.

In OpenGL, this can be queried via GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT.

12 files changed:
src/gallium/docs/source/screen.rst
src/gallium/drivers/i915/i915_screen.c
src/gallium/drivers/llvmpipe/lp_screen.c
src/gallium/drivers/nv30/nv30_screen.c
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nvc0/nvc0_screen.c
src/gallium/drivers/r300/r300_screen.c
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/radeonsi/radeonsi_pipe.c
src/gallium/drivers/softpipe/sp_screen.c
src/gallium/drivers/svga/svga_screen.c
src/gallium/include/pipe/p_defines.h

index b73c4d25c1d14e366411bad94209f509fff57db3..f6c6f3fd119e69580f10037d308b4f3ef2008f64 100644 (file)
@@ -116,6 +116,8 @@ The integer capabilities:
 * ``PIPE_CAP_USER_CONSTANT_BUFFERS``: Whether user constant buffers are
   supported. If not, the state tracker must upload constants which are not in hw
   resources.
+* ``PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT``: Describes the required
+  alignment of pipe_constant_buffer::buffer_offset.
 
 
 
index 1b3c4be12c745876e724784b02391b68f6845d4c..00468602c090eb9c86a2f052b171d0cddbf67410 100644 (file)
@@ -208,6 +208,9 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
    case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
       return 0;
 
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 16;
+
    /* Features we can lie about (boolean caps). */
    case PIPE_CAP_OCCLUSION_QUERY:
       return is->debug.lie ? 1 : 0;
index 1a3e2bdac5a2f09fa36484868a5bb37b9e368efc..40037a544bfcfbe3a45d486f29f7a9ce853e1458 100644 (file)
@@ -163,6 +163,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 16;
    default:
       return 0;
    }
index 2078c1995b0168c001e6358968858428eff2c3c1..26969ef938b9893bffc19549172e57b706353ee1 100644 (file)
@@ -82,6 +82,8 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 16;
    /* nv4x capabilities */
    case PIPE_CAP_BLEND_EQUATION_SEPARATE:
    case PIPE_CAP_NPOT_TEXTURES:
index ad40cb49eb8e6f2b663f0d2f5d1d435c5716dd39..20a135b603985d2a7740062c295a339c22f7d1f3 100644 (file)
@@ -154,6 +154,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 256;
    case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
    case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
    case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
index 7e6c1d409139b2f0ab1ab4fb56c89b4cd637a9b7..366e6fbb83244515e47ccbe7b12161756348d46f 100644 (file)
@@ -144,6 +144,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 256;
    case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
    case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
    case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
index ff9d3952e7eed2909715f310d6a914d971c32cf6..f84f3e5c58e06bb22df6a19e6d9caf6025b5ba16 100644 (file)
@@ -110,6 +110,9 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_USER_CONSTANT_BUFFERS:
             return 1;
 
+        case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+            return 16;
+
         case PIPE_CAP_GLSL_FEATURE_LEVEL:
             return 120;
 
index 1a8dbdb3de1d873fcfd55944196a825b6247f178..11f0fde177ed7fb61652e606a48ba3a53ef4dfc5 100644 (file)
@@ -407,6 +407,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_USER_CONSTANT_BUFFERS:
                return 1;
 
+       case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+               return 256;
+
        case PIPE_CAP_GLSL_FEATURE_LEVEL:
                return rscreen->glsl_feature_level;
 
index e2f438be1420e282a45ccc193fbb93fb91b56f70..aec5af277c5a45ae2fa07abcf5a3db52e9e7c488 100644 (file)
@@ -349,6 +349,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_USER_CONSTANT_BUFFERS:
                return 1;
 
+       case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+               return 256;
+
        case PIPE_CAP_GLSL_FEATURE_LEVEL:
                return debug_get_bool_option("R600_GLSL130", FALSE) ? 130 : 120;
 
index ec8acebf91334fbfaf8ada19b3b050ab84723bf1..cdc78676655063390da6cf6d43d146a3de311bab 100644 (file)
@@ -142,6 +142,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 16;
    default:
       return 0;
    }
index e6933a90b8627259c732e26f643d5a087952918d..51c85838fe22e1a729f2f2ef7a3bfdf04c4ac2f9 100644 (file)
@@ -164,6 +164,8 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_USER_INDEX_BUFFERS:
    case PIPE_CAP_USER_CONSTANT_BUFFERS:
       return 1;
+   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
+      return 16;
 
    case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
       {
index 4d75dec3c25a96473bc852e277c9e3e52c04de8b..398cb98248c02557db642088ce3d1d939c16ff9e 100644 (file)
@@ -478,7 +478,8 @@ enum pipe_cap {
    PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY = 66,
    PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY = 67,
    PIPE_CAP_USER_INDEX_BUFFERS = 68,
-   PIPE_CAP_USER_CONSTANT_BUFFERS = 69
+   PIPE_CAP_USER_CONSTANT_BUFFERS = 69,
+   PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT = 70
 };
 
 /**