clover: Use explicit conversion from llvm::StringRef to std::string
[mesa.git] / src / gallium / state_trackers / vdpau / ftab.c
index 66ed50c329971ca165cfd95aeb2270b589993e4d..31786229bc5e1a71ed33dd4d11e02a3d670f7efa 100644 (file)
@@ -18,7 +18,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -26,6 +26,9 @@
  **************************************************************************/
 
 #include <assert.h>
+
+#include "util/u_memory.h"
+
 #include "vdpau_private.h"
 
 static void* ftab[67] =
@@ -104,19 +107,33 @@ static void* ftab_winsys[1] =
    &vlVdpPresentationQueueTargetCreateX11  /* VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 */
 };
 
+static void* ftab_driver[4] =
+{
+   &vlVdpVideoSurfaceGallium, /* VDP_FUNC_ID_SURFACE_GALLIUM */
+   &vlVdpOutputSurfaceGallium, /* VDP_FUNC_ID_OUTPUT_SURFACE_GALLIUM */
+   &vlVdpVideoSurfaceDMABuf, /* VDP_FUNC_ID_VIDEO_SURFACE_DMA_BUF */
+   &vlVdpOutputSurfaceDMABuf /* VDP_FUNC_ID_OUTPUT_SURFACE_DMA_BUF */
+};
+
 boolean vlGetFuncFTAB(VdpFuncId function_id, void **func)
 {
    assert(func);
+   *func = NULL;
+
    if (function_id < VDP_FUNC_ID_BASE_WINSYS) {
-      if (function_id > 66)
-         return FALSE;
-      *func = ftab[function_id];
-   }
-   else {
+      if (function_id < ARRAY_SIZE(ftab))
+         *func = ftab[function_id];
+
+   } else if (function_id < VDP_FUNC_ID_BASE_DRIVER) {
       function_id -= VDP_FUNC_ID_BASE_WINSYS;
-      if (function_id > 0)
-        return FALSE;
-      *func = ftab_winsys[function_id];
+      if (function_id < ARRAY_SIZE(ftab_winsys))
+         *func = ftab_winsys[function_id];
+
+   } else {
+      function_id -= VDP_FUNC_ID_BASE_DRIVER;
+      if (function_id < ARRAY_SIZE(ftab_driver))
+         *func = ftab_driver[function_id];
    }
+
    return *func != NULL;
 }