blob: 76d2e07bd2498f9d56aeaa251aed9820d74b9b11 [file] [log] [blame]
// XGL tests
//
// Copyright (C) 2014 LunarG, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS 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.
#ifndef XGLIMAGE_H
#define XGLIMAGE_H
#include "xgldevice.h"
/**
*******************************************************************************
* @brief xglImage class wraps an XGL Image object
*
* Use this class to allocate and manage XGL image objects and associated
* bound memory and views.
*
********************************************************************************
*/
class XglImage
{
public:
XglImage(XglDevice *dev);
virtual ~XglImage();
// Image usage flags
// typedef enum _XGL_IMAGE_USAGE_FLAGS
// {
// XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT = 0x00000001,
// XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT = 0x00000002,
// XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000004,
// XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT = 0x00000008,
// } XGL_IMAGE_USAGE_FLAGS;
public:
void init( XGL_UINT32 w, XGL_UINT32 h,
XGL_FORMAT fmt, XGL_FLAGS usage,
XGL_IMAGE_TILING tiling=XGL_LINEAR_TILING);
// void clear( CommandBuffer*, XGL_UINT[4] );
// void prepare( CommandBuffer*, XGL_IMAGE_STATE );
void state( XGL_IMAGE_STATE state )
{
m_imageInfo.state = state;
}
XGL_DEVICE device() const
{
return m_device->device();
}
XGL_IMAGE image() const
{
return m_image;
}
XGL_COLOR_ATTACHMENT_VIEW targetView()const
{
return m_targetView;
}
XGL_IMAGE_VIEW_ATTACH_INFO imageView()const
{
return m_imageInfo;
}
const XGL_GPU_MEMORY& memory() const
{
return m_memory;
}
const XGL_GPU_SIZE& offset() const
{
return m_offset;
}
XGL_IMAGE_STATE state() const
{
return ( XGL_IMAGE_STATE )m_imageInfo.state;
}
XGL_FORMAT format() const
{
return m_format;
}
XGL_UINT32 width() const
{
return m_width;
}
XGL_UINT32 height() const
{
return m_height;
}
XGL_UINT32 mipCount() const
{
return m_mipCount;
}
XGL_CHANNEL_MAPPING channelMapping() const
{
return m_channelMapping;
}
bool IsBCCompressed( XGL_FORMAT format )
{
return format.channelFormat >= XGL_CH_FMT_BC1 && format.channelFormat <= XGL_CH_FMT_BC7;
}
XGL_RESULT MapMemory(XGL_VOID** ptr);
XGL_RESULT UnmapMemory();
protected:
XglDevice *m_device;
XGL_IMAGE m_image;
XGL_COLOR_ATTACHMENT_VIEW m_targetView;
XGL_IMAGE_VIEW_ATTACH_INFO m_imageInfo;
XGL_GPU_MEMORY m_memory;
XGL_GPU_SIZE m_offset;
XGL_FORMAT m_format;
XGL_CHANNEL_MAPPING m_channelMapping;
XGL_UINT32 m_width;
XGL_UINT32 m_height;
XGL_UINT32 m_mipCount;
};
#endif // XGLIMAGE_H