nvc0/ir: clarify recursion fix to finding first tex uses
[mesa.git] / src / mesa / state_tracker / st_atom_array.c
index c96f6dc70c3ce20587ed0ce15cc8cbcb61ac9b25..9b52f97798bc144a6834ad728420dbe41440b288 100644 (file)
@@ -1,7 +1,7 @@
 
 /**************************************************************************
  *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2007 VMware, Inc.
  * Copyright 2012 Marek Olšák <maraeo@gmail.com>
  * All Rights Reserved.
  *
@@ -32,7 +32,7 @@
  * Gallium vertex state and binds it.
  *
  * Authors:
- *   Keith Whitwell <keith@tungstengraphics.com>
+ *   Keith Whitwell <keithw@vmware.com>
  *   Marek Olšák <maraeo@gmail.com>
  */
 
@@ -214,7 +214,8 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
    assert((type >= GL_BYTE && type <= GL_DOUBLE) ||
           type == GL_FIXED || type == GL_HALF_FLOAT ||
           type == GL_INT_2_10_10_10_REV ||
-          type == GL_UNSIGNED_INT_2_10_10_10_REV);
+          type == GL_UNSIGNED_INT_2_10_10_10_REV ||
+          type == GL_UNSIGNED_INT_10F_11F_11F_REV);
    assert(size >= 1);
    assert(size <= 4);
    assert(format == GL_RGBA || format == GL_BGRA);
@@ -251,6 +252,14 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
       }
    }
 
+   if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) {
+      assert(size == 3);
+      assert(!integer);
+      assert(format == GL_RGBA);
+
+      return PIPE_FORMAT_R11G11B10_FLOAT;
+   }
+
    if (format == GL_BGRA) {
       /* this is an odd-ball case */
       assert(type == GL_UNSIGNED_BYTE);
@@ -403,9 +412,9 @@ setup_interleaved_attribs(const struct st_vertex_program *vp,
       const GLuint mesaAttr = vp->index_to_input[attr];
       const struct gl_client_array *array = arrays[mesaAttr];
       unsigned src_offset = (unsigned) (array->Ptr - low_addr);
-      GLuint element_size = array->_ElementSize;
 
-      assert(element_size == array->Size * _mesa_sizeof_type(array->Type));
+      assert(array->_ElementSize ==
+             _mesa_bytes_per_vertex_attrib(array->Size, array->Type));
 
       velements[attr].src_offset = src_offset;
       velements[attr].instance_divisor = array->InstanceDivisor;
@@ -474,7 +483,8 @@ setup_non_interleaved_attribs(struct st_context *st,
       struct gl_buffer_object *bufobj = array->BufferObj;
       GLsizei stride = array->StrideB;
 
-      assert(array->_ElementSize == array->Size * _mesa_sizeof_type(array->Type));
+      assert(array->_ElementSize ==
+             _mesa_bytes_per_vertex_attrib(array->Size, array->Type));
 
       if (_mesa_is_bufferobj(bufobj)) {
          /* Attribute data is in a VBO.
@@ -588,7 +598,7 @@ static void update_array(struct st_context *st)
 const struct st_tracked_state st_update_array = {
    "st_update_array",                                  /* name */
    {                                                   /* dirty */
-      (_NEW_PROGRAM | _NEW_BUFFER_OBJECT),             /* mesa */
+      0,                                                /* mesa */
       ST_NEW_VERTEX_ARRAYS | ST_NEW_VERTEX_PROGRAM,     /* st */
    },
    update_array                                                /* update */