Commit 6c46bfd7 authored by Chad Versace's avatar Chad Versace

Merge branch 'tpalli/nacl' into master

* cooking/tpalli/nacl:
  waffle: update man pages with nacl changes
  waffle: initial empty implementation of nacl backend
  waffle: add support for building Waffle using NaCl toolchain
  examples: add waffle_has_x11_egl check for simple-x11-egl
parents e69f4129 27be3761
......@@ -23,7 +23,7 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
project(waffle1 C)
project(waffle1 C CXX)
cmake_minimum_required(VERSION 2.8.11)
......
......@@ -28,6 +28,11 @@ if(waffle_on_linux)
option(waffle_has_wayland "Build support for Wayland" ${wayland_default})
option(waffle_has_x11_egl "Build support for X11/EGL" ${x11_egl_default})
option(waffle_has_gbm "Build support for GBM" ${gbm_default})
option(waffle_has_nacl "Build support for NaCl" OFF)
# NaCl specific settings.
set(nacl_sdk_path "" CACHE STRING "Set nacl_sdk path here")
set(nacl_version "pepper_39" CACHE STRING "Set NaCl bundle here")
endif()
option(waffle_build_tests "Build tests" ON)
......
......@@ -125,6 +125,10 @@ if(waffle_on_linux)
add_definitions(-D_XOPEN_SOURCE=600)
endif()
if(waffle_has_nacl)
add_definitions(-DWAFFLE_HAS_NACL)
endif()
if(waffle_on_windows)
add_definitions(-DWAFFLE_HAS_WGL)
endif()
......@@ -46,11 +46,38 @@ endif()
if(waffle_on_linux)
if(NOT waffle_has_glx AND NOT waffle_has_wayland AND
NOT waffle_has_x11_egl AND NOT waffle_has_gbm)
NOT waffle_has_x11_egl AND NOT waffle_has_gbm AND
NOT waffle_has_nacl)
message(FATAL_ERROR
"Must enable at least one of: "
"waffle_has_glx, waffle_has_wayland, "
"waffle_has_x11_egl, waffle_has_gbm.")
"waffle_has_x11_egl, waffle_has_gbm, "
"waffle_has_nacl.")
endif()
if(waffle_has_nacl)
if(NOT EXISTS ${nacl_sdk_path})
message(FATAL_ERROR "NaCl SDK path not found : ${nacl_sdk_path}")
endif()
if(NOT EXISTS ${CMAKE_TOOLCHAIN_FILE})
message(FATAL_ERROR "Toolchain for Nacl not found. This must be "
"configured using CMAKE_TOOLCHAIN_FILE.")
endif()
# Warn the user that building tests is disabled.
if(waffle_build_tests)
message(WARNING "Building the tests with the NaCl backend "
"is not supported, skipping tests.")
set(waffle_build_tests OFF)
endif()
# When building for NaCl, disable incompatible backends.
set(waffle_has_gbm OFF)
set(waffle_has_egl OFF)
set(waffle_has_glx OFF)
set(waffle_has_x11 OFF)
set(waffle_has_x11_egl OFF)
set(waffle_has_wayland OFF)
endif()
if(waffle_has_gbm)
if(NOT gbm_FOUND)
......
#
# NaCl toolchain file for 32bit x86 using glibc C library
#
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_SYSTEM_NAME "Linux")
set(nacl_host_os "linux")
else()
message(FATAL_ERROR "TODO: NaCl support on ${CMAKE_HOST_SYSTEM_NAME}")
endif()
set(nacl_target_arch "i686")
set(nacl_ports "glibc_x86_32")
set(nacl_toolchain "${nacl_host_os}_x86_glibc")
# setup paths for nacl
set(nacl_root ${nacl_sdk_path}/${nacl_version})
set(nacl_toolpath ${nacl_root}/toolchain/${nacl_toolchain}/bin)
# setup compilers from toolchain
set(CMAKE_C_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-gcc)
set(CMAKE_CXX_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-g++)
set(CMAKE_FIND_ROOT_PATH ${nacl_root})
# for FIND_LIBRARY|INCLUDE use ${nacl_root} only,
# for helper programs during build time, use host
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# setup nacl includes and required libraries
set(nacl_INCLUDE_DIRS ${nacl_INCLUDE_DIRS} ${nacl_sdk_path}/${nacl_version}/include)
set(nacl_LIBS ${nacl_sdk_path}/${nacl_version}/lib/${nacl_ports}/${CMAKE_BUILD_TYPE})
set(nacl_LDFLAGS
-L${nacl_LIBS}
-lppapi_cpp
-lppapi
-lpthread
-ldl
)
#
# NaCl toolchain file for 64bit x86 using glibc C library
#
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_SYSTEM_NAME "Linux")
set(nacl_host_os "linux")
else()
message(FATAL_ERROR "TODO: NaCl support on ${CMAKE_HOST_SYSTEM_NAME}")
endif()
set(nacl_target_arch "x86_64")
set(nacl_ports "glibc_x86_64")
set(nacl_toolchain "${nacl_host_os}_x86_glibc")
# setup paths for nacl
set(nacl_root ${nacl_sdk_path}/${nacl_version})
set(nacl_toolpath ${nacl_root}/toolchain/${nacl_toolchain}/bin)
# setup compilers from toolchain
set(CMAKE_C_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-gcc)
set(CMAKE_CXX_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-g++)
set(CMAKE_FIND_ROOT_PATH ${nacl_root})
# for FIND_LIBRARY|INCLUDE use ${nacl_root} only,
# for helper programs during build time, use host
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# setup nacl includes and required libraries
set(nacl_INCLUDE_DIRS ${nacl_INCLUDE_DIRS} ${nacl_sdk_path}/${nacl_version}/include)
set(nacl_LIBS ${nacl_sdk_path}/${nacl_version}/lib/${nacl_ports}/${CMAKE_BUILD_TYPE})
set(nacl_LDFLAGS
-L${nacl_LIBS}
-lppapi_cpp
-lppapi
-lpthread
-ldl
)
......@@ -11,7 +11,7 @@ install(
# Target: simple-x11-egl (executable)
# ----------------------------------------------------------------------------
if(waffle_on_linux)
if(waffle_on_linux AND waffle_has_x11_egl)
add_executable(simple-x11-egl simple-x11-egl.c)
target_link_libraries(simple-x11-egl ${waffle_libname})
endif()
......@@ -20,6 +20,10 @@ endif()
# Target: gl_basic (executable)
# ----------------------------------------------------------------------------
if(waffle_has_nacl)
return()
endif()
add_executable(gl_basic gl_basic.c)
target_link_libraries(gl_basic ${waffle_libname} ${GETOPT_LIBRARIES})
......
......@@ -104,6 +104,7 @@ enum waffle_enum {
WAFFLE_PLATFORM_X11_EGL = 0x0015,
WAFFLE_PLATFORM_GBM = 0x0016,
WAFFLE_PLATFORM_WGL = 0x0017,
WAFFLE_PLATFORM_NACL = 0x0018,
// ------------------------------------------------------------------
// For waffle_config_choose()
......
......@@ -101,6 +101,7 @@ enum waffle_enum {
WAFFLE_PLATFORM_X11_EGL = 0x0015,
WAFFLE_PLATFORM_GBM = 0x0016,
WAFFLE_PLATFORM_WGL = 0x0017,
WAFFLE_PLATFORM_NACL = 0x0018,
// ------------------------------------------------------------------
// For waffle_config_choose()
......
......@@ -120,6 +120,14 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>WAFFLE_PLATFORM_NACL</constant></term>
<listitem>
<para>
[Linux only, other systems not yet supported]
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>WAFFLE_PLATFORM_WAYLAND</constant></term>
<listitem>
......
......@@ -2,6 +2,10 @@
# Target: wflinfo (executable)
# ----------------------------------------------------------------------------
if(waffle_has_nacl)
return()
endif()
add_executable(wflinfo wflinfo.c)
target_link_libraries(wflinfo ${waffle_libname} ${GETOPT_LIBRARIES})
......
......@@ -15,6 +15,7 @@ include_directories(
egl
glx
linux
nacl
wayland
wgl
x11
......@@ -25,6 +26,7 @@ include_directories(
${gl_INCLUDE_DIRS}
${GLEXT_INCLUDE_DIR}
${libudev_INCLUDE_DIRS}
${nacl_INCLUDE_DIRS}
${wayland-client_INCLUDE_DIRS}
${wayland-egl_INCLUDE_DIRS}
${x11-xcb_INCLUDE_DIRS}
......@@ -57,6 +59,12 @@ if(waffle_on_linux)
endif()
endif()
if(waffle_has_nacl)
list(APPEND waffle_libdeps
${nacl_LDFLAGS}
)
endif()
set(waffle_sources
api/api_priv.c
api/waffle_attrib_list.c
......@@ -173,6 +181,19 @@ if(waffle_on_windows)
)
endif()
if(waffle_has_nacl)
list(APPEND waffle_sources
nacl/nacl_config.c
nacl/nacl_context.c
nacl/nacl_display.c
nacl/nacl_platform.c
nacl/nacl_window.c
)
list(APPEND waffle_cxx_sources
nacl/nacl_container.cpp
)
endif()
# CMake will pass to the C compiler only C sources. CMake does not recognize the
# .m extension and ignores any such files in the source lists. To coerce CMake
# to pass .m files to the compiler, we must lie and claim that they are
......@@ -202,7 +223,7 @@ include_directories(
${XCB_INCLUDE_DIRS}
)
add_library(${waffle_libname} SHARED ${waffle_sources})
add_library(${waffle_libname} SHARED ${waffle_sources} ${waffle_cxx_sources})
# Debian's packaging system emits warnings if wflinfo directly links to any
# library that it doesn't directly use. Silence the warnings by annotating
......
......@@ -35,6 +35,7 @@ struct wcore_platform* wayland_platform_create(void);
struct wcore_platform* xegl_platform_create(void);
struct wcore_platform* wgbm_platform_create(void);
struct wcore_platform* wgl_platform_create(void);
struct wcore_platform* nacl_platform_create(void);
static bool
waffle_init_parse_attrib_list(
......@@ -104,6 +105,12 @@ waffle_init_parse_attrib_list(
CASE_UNDEFINED_PLATFORM(WGL)
#endif
#ifdef WAFFLE_HAS_NACL
CASE_DEFINED_PLATFORM(NACL)
#else
CASE_UNDEFINED_PLATFORM(NACL)
#endif
default:
wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
"WAFFLE_PLATFORM has bad value 0x%x",
......@@ -163,6 +170,10 @@ waffle_init_create_platform(int32_t waffle_platform)
#ifdef WAFFLE_HAS_WGL
case WAFFLE_PLATFORM_WGL:
return wgl_platform_create();
#endif
#ifdef WAFFLE_HAS_NACL
case WAFFLE_PLATFORM_NACL:
return nacl_platform_create();
#endif
default:
assert(false);
......
......@@ -62,6 +62,7 @@ wcore_enum_to_string(int32_t e)
CASE(WAFFLE_PLATFORM_X11_EGL);
CASE(WAFFLE_PLATFORM_GBM);
CASE(WAFFLE_PLATFORM_WGL);
CASE(WAFFLE_PLATFORM_NACL);
CASE(WAFFLE_CONTEXT_API);
CASE(WAFFLE_CONTEXT_OPENGL);
CASE(WAFFLE_CONTEXT_OPENGL_ES1);
......
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "nacl_config.h"
bool
nacl_config_destroy(struct wcore_config *wc_self)
{
bool ok = true;
if (wc_self == NULL)
return ok;
ok &= wcore_config_teardown(wc_self);
free(nacl_config(wc_self));
return ok;
}
struct wcore_config*
nacl_config_choose(struct wcore_platform *wc_plat,
struct wcore_display *wc_dpy,
const struct wcore_config_attrs *attrs)
{
struct nacl_config *self;
bool ok = true;
self = wcore_calloc(sizeof(*self));
if (self == NULL)
return NULL;
ok = wcore_config_init(&self->wcore, wc_dpy, attrs);
if (!ok)
goto error;
return &self->wcore;
error:
nacl_config_destroy(&self->wcore);
self = NULL;
return NULL;
}
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#pragma once
#include "wcore_config.h"
#include "wcore_util.h"
struct wcore_config_attrs;
struct wcore_platform;
struct nacl_config {
struct wcore_config wcore;
};
DEFINE_CONTAINER_CAST_FUNC(nacl_config,
struct nacl_config,
struct wcore_config,
wcore)
struct wcore_config*
nacl_config_choose(struct wcore_platform *wc_plat,
struct wcore_display *wc_dpy,
const struct wcore_config_attrs *attrs);
bool
nacl_config_destroy(struct wcore_config *wc_self);
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ppapi/cpp/graphics_3d.h"
#include "nacl_container.h"
namespace waffle {
struct nacl_container {
pp::Graphics3D ctx;
};
static void
nacl_container_dtor(waffle::nacl_container *nc)
{
if (!nc)
return;
delete nc;
}
static nacl_container*
nacl_container_ctor()
{
nacl_container *nc = new nacl_container;
if (!nc)
return NULL;
return nc;
}
}; // namespace waffle ends
extern "C" struct nacl_container*
nacl_init()
{
return reinterpret_cast<nacl_container*>(waffle::nacl_container_ctor());
}
extern "C" void
nacl_teardown(nacl_container *nc)
{
waffle::nacl_container_dtor(reinterpret_cast<waffle::nacl_container*>(nc));
}
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifdef __cplusplus
extern "C" {
#endif
struct nacl_container;
struct nacl_container *nacl_init();
void nacl_teardown(struct nacl_container *nc);
#ifdef __cplusplus
};
#endif
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "nacl_context.h"
bool
nacl_context_destroy(struct wcore_context *wc_self)
{
struct nacl_context *self;
bool ok = true;
if (!wc_self)
return ok;
self = nacl_context(wc_self);
ok &= wcore_context_teardown(wc_self);
free(self);
return ok;
}
struct wcore_context*
nacl_context_create(struct wcore_platform *wc_plat,
struct wcore_config *wc_config,
struct wcore_context *wc_share_ctx)
{
struct nacl_context *self;
bool ok = true;
self = wcore_calloc(sizeof(*self));
if (self == NULL)
return NULL;
ok = wcore_context_init(&self->wcore, wc_config);
if (!ok)
goto error;
return &self->wcore;
error:
nacl_context_destroy(&self->wcore);
return NULL;
}
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#pragma once
#include "wcore_context.h"
#include "wcore_util.h"
#include "nacl_display.h"
#include "nacl_platform.h"
struct wcore_config;
struct wcore_platform;
struct nacl_context {
struct wcore_context wcore;
};
DEFINE_CONTAINER_CAST_FUNC(nacl_context,
struct nacl_context,
struct wcore_context,
wcore)
struct wcore_context*
nacl_context_create(struct wcore_platform *wc_plat,
struct wcore_config *wc_config,
struct wcore_context *wc_share_ctx);
bool
nacl_context_destroy(struct wcore_context *wc_self);
// Copyright 2014 Intel Corporation
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "nacl_display.h"
bool
nacl_display_destroy(struct wcore_display *wc_self)
{
struct nacl_display *self = nacl_display(wc_self);
bool ok = true;
if (!self)
return ok;
ok &= wcore_display_teardown(&self->wcore);
free(self);
return ok;
}
struct wcore_display*
nacl_display_connect(struct wcore_platform *wc_plat,
const char *name)
{
struct nacl_display *self;
bool ok = true;
self = wcore_calloc(sizeof(*self));
if (self == NULL)
return NULL;
ok = wcore_display_init(&self->wcore, wc_plat);
if (!ok)
goto error;
return &self->wcore;
error:
nacl_display_destroy(&self->wcore);
return NULL;
}
bool
nacl_display_supports_context_api(struct wcore_display *wc_self,
int32_t context_api)