cd_body.append(' void resize_window(const unsigned int width, const unsigned int height);')
cd_body.append(' void process_event();')
cd_body.append(' // XGL_DEVICE get_device() { return m_dev[m_gpuIdx];}')
- cd_body.append('#if defined(WIN32)')
- cd_body.append(' HWND get_window_handle() { return m_windowHandle; }')
- cd_body.append('#elif defined(PLATFORM_LINUX)')
+ cd_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
cd_body.append(' xcb_window_t get_window_handle() { return m_XcbWindow; }')
+ cd_body.append('#elif defined(WIN32)')
+ cd_body.append(' HWND get_window_handle() { return m_windowHandle; }')
cd_body.append('#endif')
cd_body.append('private:')
cd_body.append(' XGL_RESULT init_xgl(const unsigned int gpu_idx);')
cd_body.append(' bool m_initedXGL;')
- cd_body.append('#if defined(WIN32)')
- cd_body.append(' HWND m_windowHandle;')
- cd_body.append('#elif defined(PLATFORM_LINUX)')
+ cd_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
cd_body.append(' XGL_WSI_X11_CONNECTION_INFO m_WsiConnection;')
cd_body.append(' xcb_screen_t *m_pXcbScreen;')
cd_body.append(' xcb_window_t m_XcbWindow;')
+ cd_body.append('#elif defined(WIN32)')
+ cd_body.append(' HWND m_windowHandle;')
cd_body.append('#endif')
cd_body.append(' unsigned int m_windowWidth;')
cd_body.append(' unsigned int m_windowHeight;')
di_body.append(' m_initedXGL = true;')
di_body.append(' }')
di_body.append('#endif')
- di_body.append('#if defined(PLATFORM_LINUX)')
+ di_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
di_body.append(' const xcb_setup_t *setup;')
di_body.append(' xcb_screen_iterator_t iter;')
di_body.append(' int scr;')
ds_body.append(' m_windowWidth(0),')
ds_body.append(' m_windowHeight(0)')
ds_body.append('{')
- ds_body.append('#if defined(WIN32)')
- ds_body.append(' m_windowHandle = NULL;')
- ds_body.append('#elif defined(PLATFORM_LINUX)')
+ ds_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
ds_body.append(' m_WsiConnection.pConnection = NULL;')
ds_body.append(' m_WsiConnection.root = 0;')
ds_body.append(' m_WsiConnection.provider = 0;')
ds_body.append(' m_pXcbScreen = NULL;')
ds_body.append(' m_XcbWindow = 0;')
+ ds_body.append('#elif defined(WIN32)')
+ ds_body.append(' m_windowHandle = NULL;')
ds_body.append('#endif')
ds_body.append('}')
ds_body.append('xglDisplay::~xglDisplay()')
ds_body.append('{')
- ds_body.append('#ifdef PLATFORM_LINUX')
+ ds_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
ds_body.append(' if (m_XcbWindow != 0)')
ds_body.append(' {')
ds_body.append(' xcb_destroy_window(m_WsiConnection.pConnection, m_XcbWindow);')
dw_body.append('#endif')
dw_body.append('int xglDisplay::set_window(glv_window_handle hWindow, unsigned int width, unsigned int height)')
dw_body.append('{')
- dw_body.append('#if defined(WIN32)')
- dw_body.append(' m_windowHandle = hWindow;')
- dw_body.append('#elif defined(PLATFORM_LINUX)')
+ dw_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
dw_body.append(' m_XcbWindow = hWindow;')
+ dw_body.append('#elif defined(WIN32)')
+ dw_body.append(' m_windowHandle = hWindow;')
dw_body.append('#endif')
dw_body.append(' m_windowWidth = width;')
dw_body.append(' m_windowHeight = height;')
dw_body.append('}\n')
dw_body.append('int xglDisplay::create_window(const unsigned int width, const unsigned int height)')
dw_body.append('{')
- dw_body.append('#if defined(WIN32)')
+ dw_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)\n')
+ dw_body.append(' uint32_t value_mask, value_list[32];')
+ dw_body.append(' m_XcbWindow = xcb_generate_id(m_WsiConnection.pConnection);\n')
+ dw_body.append(' value_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;')
+ dw_body.append(' value_list[0] = m_pXcbScreen->black_pixel;')
+ dw_body.append(' value_list[1] = XCB_EVENT_MASK_KEY_RELEASE |')
+ dw_body.append(' XCB_EVENT_MASK_EXPOSURE;\n')
+ dw_body.append(' xcb_create_window(m_WsiConnection.pConnection,')
+ dw_body.append(' XCB_COPY_FROM_PARENT,')
+ dw_body.append(' m_XcbWindow, m_WsiConnection.root,')
+ dw_body.append(' 0, 0, width, height, 0,')
+ dw_body.append(' XCB_WINDOW_CLASS_INPUT_OUTPUT,')
+ dw_body.append(' m_pXcbScreen->root_visual,')
+ dw_body.append(' value_mask, value_list);\n')
+ dw_body.append(' xcb_map_window(m_WsiConnection.pConnection, m_XcbWindow);')
+ dw_body.append(' xcb_flush(m_WsiConnection.pConnection);')
+ dw_body.append(' return 0;')
+ dw_body.append('#elif defined(WIN32)')
dw_body.append(' // Register Window class')
dw_body.append(' WNDCLASSEX wcex = {};')
dw_body.append(' wcex.cbSize = sizeof( WNDCLASSEX);')
dw_body.append(' return -1;')
dw_body.append(' }')
dw_body.append(' return 0;')
- dw_body.append('#elif defined(PLATFORM_LINUX)\n')
- dw_body.append(' uint32_t value_mask, value_list[32];')
- dw_body.append(' m_XcbWindow = xcb_generate_id(m_WsiConnection.pConnection);\n')
- dw_body.append(' value_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;')
- dw_body.append(' value_list[0] = m_pXcbScreen->black_pixel;')
- dw_body.append(' value_list[1] = XCB_EVENT_MASK_KEY_RELEASE |')
- dw_body.append(' XCB_EVENT_MASK_EXPOSURE;\n')
- dw_body.append(' xcb_create_window(m_WsiConnection.pConnection,')
- dw_body.append(' XCB_COPY_FROM_PARENT,')
- dw_body.append(' m_XcbWindow, m_WsiConnection.root,')
- dw_body.append(' 0, 0, width, height, 0,')
- dw_body.append(' XCB_WINDOW_CLASS_INPUT_OUTPUT,')
- dw_body.append(' m_pXcbScreen->root_visual,')
- dw_body.append(' value_mask, value_list);\n')
- dw_body.append(' xcb_map_window(m_WsiConnection.pConnection, m_XcbWindow);')
- dw_body.append(' xcb_flush(m_WsiConnection.pConnection);')
- dw_body.append(' return 0;')
dw_body.append('#endif')
dw_body.append('}\n')
dw_body.append('void xglDisplay::resize_window(const unsigned int width, const unsigned int height)')
dw_body.append('{')
- dw_body.append('#if defined(WIN32)')
+ dw_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
dw_body.append(' if (width != m_windowWidth || height != m_windowHeight)')
dw_body.append(' {')
- dw_body.append(' SetWindowPos(get_window_handle(), HWND_TOP, 0, 0, width, height, SWP_NOMOVE);')
+ dw_body.append(' uint32_t values[2];')
+ dw_body.append(' values[0] = width;')
+ dw_body.append(' values[1] = height;')
+ dw_body.append(' xcb_configure_window(m_WsiConnection.pConnection, m_XcbWindow, XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, values);')
dw_body.append(' m_windowWidth = width;')
dw_body.append(' m_windowHeight = height;')
dw_body.append(' }')
- dw_body.append('#elif defined(PLATFORM_LINUX)')
+ dw_body.append('#elif defined(WIN32)')
dw_body.append(' if (width != m_windowWidth || height != m_windowHeight)')
dw_body.append(' {')
- dw_body.append(' uint32_t values[2];')
- dw_body.append(' values[0] = width;')
- dw_body.append(' values[1] = height;')
- dw_body.append(' xcb_configure_window(m_WsiConnection.pConnection, m_XcbWindow, XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, values);')
+ dw_body.append(' SetWindowPos(get_window_handle(), HWND_TOP, 0, 0, width, height, SWP_NOMOVE);')
dw_body.append(' m_windowWidth = width;')
dw_body.append(' m_windowHeight = height;')
dw_body.append(' }')
def _gen_replay_wsi_associate_connection(self):
wac_body = []
- wac_body.append('#ifdef WIN32')
- wac_body.append(' //TBD')
- wac_body.append(' replayResult = XGL_SUCCESS;')
- wac_body.append('#else')
+ wac_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
wac_body.append(' //associate with the replayers Wsi connection rather than tracers')
wac_body.append(' replayResult = m_xglFuncs.real_xglWsiX11AssociateConnection(remap(pPacket->gpu), &(m_display->m_WsiConnection));')
+ wac_body.append('#elif defined(WIN32)')
+ wac_body.append(' //TBD')
+ wac_body.append(' replayResult = XGL_SUCCESS;')
wac_body.append('#endif')
return "\n".join(wac_body)
def _gen_replay_wsi_get_msc(self):
wgm_body = []
- wgm_body.append('#ifdef WIN32')
+ wgm_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
+ wgm_body.append(' xcb_window_t window = m_display->m_XcbWindow;')
+ wgm_body.append(' replayResult = m_xglFuncs.real_xglWsiX11GetMSC(remap(pPacket->device), window, pPacket->crtc, pPacket->pMsc);')
+ wgm_body.append('#elif defined(WIN32)')
wgm_body.append(' //TBD')
wgm_body.append(' replayResult = XGL_SUCCESS;')
wgm_body.append('#else')
- wgm_body.append(' xcb_window_t window = m_display->m_XcbWindow;')
- wgm_body.append(' replayResult = m_xglFuncs.real_xglWsiX11GetMSC(remap(pPacket->device), window, pPacket->crtc, pPacket->pMsc);')
+
wgm_body.append('#endif')
return "\n".join(wgm_body)
def _gen_replay_wsi_create_presentable_image(self):
cpi_body = []
- cpi_body.append('#ifdef WIN32')
- cpi_body.append(' //TBD')
- cpi_body.append(' replayResult = XGL_SUCCESS;')
- cpi_body.append('#else')
+ cpi_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
cpi_body.append(' XGL_IMAGE img;')
cpi_body.append(' XGL_GPU_MEMORY mem;')
cpi_body.append(' m_display->imageHeight.push_back(pPacket->pCreateInfo->extent.height);')
cpi_body.append(' m_display->imageHandles.push_back(img);')
cpi_body.append(' m_display->imageMemory.push_back(mem);')
cpi_body.append(' }')
+ cpi_body.append('#elif defined(WIN32)')
+ cpi_body.append(' //TBD')
+ cpi_body.append(' replayResult = XGL_SUCCESS;')
cpi_body.append('#endif')
return "\n".join(cpi_body)
def _gen_replay_wsi_queue_present(self):
wqp_body = []
- wqp_body.append('#ifdef WIN32')
- wqp_body.append(' //TBD')
- wqp_body.append(' replayResult = XGL_SUCCESS;')
- wqp_body.append('#else')
+ wqp_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
wqp_body.append(' XGL_WSI_X11_PRESENT_INFO pInfo;')
wqp_body.append(' std::vector<int>::iterator it;')
wqp_body.append(' memcpy(&pInfo, pPacket->pPresentInfo, sizeof(XGL_WSI_X11_PRESENT_INFO));')
wqp_body.append(' }')
wqp_body.append(' }')
wqp_body.append(' }')
+ wqp_body.append('#elif defined(WIN32)')
+ wqp_body.append(' //TBD')
+ wqp_body.append(' replayResult = XGL_SUCCESS;')
wqp_body.append('#endif')
wqp_body.append(' m_display->m_frameNumber++;')
return "\n".join(wqp_body)
header_txt.append('#include "glvtrace_xgl_xgldbg_structs.h"')
header_txt.append('#include "glvtrace_xgl_xglwsix11ext_structs.h"')
header_txt.append('#include "xgl_enum_string_helper.h"')
+ header_txt.append('#if defined(WIN32)')
+ header_txt.append('#define snprintf _snprintf')
+ header_txt.append('#endif')
header_txt.append('#define SEND_ENTRYPOINT_ID(entrypoint) ;')
header_txt.append('//#define SEND_ENTRYPOINT_ID(entrypoint) glv_TraceInfo(#entrypoint "\\n");\n')
header_txt.append('#define SEND_ENTRYPOINT_PARAMS(entrypoint, ...) ;')
header_txt = []
header_txt.append('#pragma once\n')
header_txt.append('#include "xgl.h"')
- header_txt.append('#if defined(PLATFORM_LINUX)')
+ header_txt.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
header_txt.append('#include "xglWsiX11Ext.h"\n')
header_txt.append('#else')
header_txt.append('#include "xglWsiWinExt.h"')
def generate_header(self):
header_txt = []
header_txt.append('#pragma once\n')
- header_txt.append('#if defined(PLATFORM_LINUX)')
+ header_txt.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
header_txt.append('#include "xglWsiX11Ext.h"')
header_txt.append('#else')
header_txt.append('#include "xglWsiWinExt.h"')
header_txt.append('#include <map>')
header_txt.append('#include <vector>')
header_txt.append('#include <string>')
- header_txt.append('#if defined(PLATFORM_LINUX)')
+ header_txt.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
header_txt.append('#include <xcb/xcb.h>\n')
header_txt.append('#endif')
header_txt.append('#include "glvreplay_window.h"')
header_txt.append('#include "glv_trace_packet_identifiers.h"\n')
header_txt.append('#include "xgl.h"')
header_txt.append('#include "xglDbg.h"')
- header_txt.append('#if defined(PLATFORM_LINUX)')
+ header_txt.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
header_txt.append('#include "xglWsiX11Ext.h"')
header_txt.append('#else')
header_txt.append('#include "xglWsiWinExt.h"')
#include <xcb/xcb.h>
-#include <xglWsiX11Ext.h>
#include <Windows.h>
#include <string>
typedef void (*xcbDestroyWindowType)();
typedef int (*xcbGetMessageType)(MSG * msg);
typedef BOOL (*xcbPeekMessageType)(MSG * msg);
-typedef XGL_RESULT (*xcbQueuePresentType)(XGL_QUEUE queue, XGL_IMAGE image, XGL_FENCE fence);
struct xcb_connection_t {
xcb_screen_t screens[1];
xcbDestroyWindowType xcbDestroyWindow;
xcbGetMessageType xcbGetMessage;
xcbPeekMessageType xcbPeekMessage;
- xcbQueuePresentType xcbQueuePresent;
};
// XCB id database.
connection->xcbDestroyWindow = (xcbDestroyWindowType)GetProcAddress(module, "xcbDestroyWindow");
connection->xcbGetMessage = (xcbGetMessageType)GetProcAddress(module, "xcbGetMessage");
connection->xcbPeekMessage = (xcbPeekMessageType)GetProcAddress(module, "xcbPeekMessage");
- connection->xcbQueuePresent = (xcbQueuePresentType)GetProcAddress(module, "xcbQueuePresent");
*screenp = 0;
return static_cast<xcb_connection_t *>(connection);
{
}
-XGL_RESULT XGLAPI xglWsiX11AssociateConnection(
- XGL_PHYSICAL_GPU gpu,
- const XGL_WSI_X11_CONNECTION_INFO* pConnectionInfo)
-{
- return XGL_SUCCESS;
-}
-
-XGL_RESULT XGLAPI xglWsiX11CreatePresentableImage(
- XGL_DEVICE device,
- const XGL_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo,
- XGL_IMAGE* pImage,
- XGL_GPU_MEMORY* pMem)
+xcb_void_cookie_t
+xcb_configure_window (xcb_connection_t *c ,
+ xcb_window_t window ,
+ uint16_t value_mask ,
+ const uint32_t *value_list )
{
- XGL_RESULT err;
-
- XGL_IMAGE_CREATE_INFO presentable_image = { XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
- presentable_image.imageType = XGL_IMAGE_2D;
- presentable_image.format = pCreateInfo->format;
- presentable_image.extent.width = pCreateInfo->extent.width;
- presentable_image.extent.height = pCreateInfo->extent.height;
- presentable_image.extent.depth = 1;
- presentable_image.mipLevels = 1;
- presentable_image.arraySize = 1;
- presentable_image.samples = 1;
- presentable_image.tiling = XGL_OPTIMAL_TILING;
- presentable_image.usage = XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
- err = xglCreateImage(device, &presentable_image, pImage);
- if (err != XGL_SUCCESS) {
- return err;
- }
-
- uint32_t num_allocations = 0;
- size_t num_alloc_size = sizeof(num_allocations);
- err = xglGetObjectInfo(*pImage, XGL_INFO_TYPE_MEMORY_ALLOCATION_COUNT, &num_alloc_size, &num_allocations);
- if (err != XGL_SUCCESS) {
- xglDestroyObject(*pImage);
- return err;
- }
- if (num_allocations > 1) {
- xglDestroyObject(*pImage);
- return XGL_UNSUPPORTED;
- }
-
- size_t mem_reqs_size = sizeof(XGL_MEMORY_REQUIREMENTS);
- XGL_MEMORY_REQUIREMENTS mem_reqs;
- err = xglGetObjectInfo(*pImage, XGL_INFO_TYPE_MEMORY_REQUIREMENTS, &mem_reqs_size, &mem_reqs);
- if (err != XGL_SUCCESS) {
- xglDestroyObject(*pImage);
- return err;
- }
-
- size_t img_reqs_size = sizeof(XGL_IMAGE_MEMORY_REQUIREMENTS);
- XGL_IMAGE_MEMORY_REQUIREMENTS img_reqs;
- err = xglGetObjectInfo(*pImage, XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS, &img_reqs_size, &img_reqs);
- if (err != XGL_SUCCESS) {
- xglDestroyObject(*pImage);
- return err;
- }
-
- XGL_MEMORY_ALLOC_IMAGE_INFO img_alloc = { XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO };
- img_alloc.usage = img_reqs.usage;
- img_alloc.formatClass = img_reqs.formatClass;
- img_alloc.samples = img_reqs.samples;
- XGL_MEMORY_ALLOC_INFO mem_alloc = { XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO };
- mem_alloc.pNext = &img_alloc;
- mem_alloc.allocationSize = 0,
- mem_alloc.memProps = XGL_MEMORY_PROPERTY_GPU_ONLY,
- mem_alloc.memType = XGL_MEMORY_TYPE_IMAGE,
- mem_alloc.memPriority = XGL_MEMORY_PRIORITY_NORMAL,
- mem_alloc.allocationSize = mem_reqs.size;
- err = xglAllocMemory(device, &mem_alloc, pMem);
- if (err != XGL_SUCCESS) {
- xglDestroyObject(*pImage);
- return err;
+ uint32_t width = 0;
+ uint32_t height = 0;
+
+ size_t index = 0;
+ for (size_t i = 0; i < sizeof (uint16_t); ++i) {
+ switch (value_mask & (1 << i)) {
+ case XCB_CONFIG_WINDOW_WIDTH:
+ width = value_list[index++];
+ break;
+ case XCB_CONFIG_WINDOW_HEIGHT:
+ height = value_list[index++];
+ break;
+ default:
+ break;
+ }
}
- err = xglBindObjectMemory(*pImage, 0, *pMem, 0);
- if (err != XGL_SUCCESS) {
- xglFreeMemory(*pMem);
- xglDestroyObject(*pImage);
- return err;
+ if (width && height) {
+ // Resize the window...
}
- return XGL_SUCCESS;
-}
-
-XGL_RESULT XGLAPI xglWsiX11QueuePresent(
- XGL_QUEUE queue,
- const XGL_WSI_X11_PRESENT_INFO* pPresentInfo,
- XGL_FENCE fence)
-{
- xcb_connection_t * connection = g_xcbIds[pPresentInfo->destWindow].connection;
- return connection->xcbQueuePresent(queue, pPresentInfo->srcImage, fence);
+ return xcb_void_cookie_t();
}