34 if (!
bitmap->mapped_resource.pData)
40 ID3D11DeviceContext_Release(
context);
41 ID3D11Device_Release(
device);
58 ID2D1Bitmap1_AddRef(iface);
89 ID3D11ShaderResourceView_Release(
bitmap->srv);
91 ID3D11RenderTargetView_Release(
bitmap->rtv);
93 IDXGISurface_Release(
bitmap->surface);
94 ID3D11Resource_Release(
bitmap->resource);
95 ID2D1Factory_Release(
bitmap->factory);
115 TRACE(
"iface %p, size %p.\n", iface,
size);
161 TRACE(
"iface %p, dst_point %p, bitmap %p, src_rect %p.\n", iface, dst_point,
bitmap, src_rect);
175 ID3D11DeviceContext_CopySubresourceRegion(
context, dst_bitmap->
resource, 0,
176 dst_point ? dst_point->
x : 0, dst_point ? dst_point->
y : 0, 0,
178 ID3D11DeviceContext_Release(
context);
179 ID3D11Device_Release(
device);
187 FIXME(
"iface %p, dst_point %p, render_target %p, src_rect %p stub!\n", iface, dst_point, render_target, src_rect);
200 TRACE(
"iface %p, dst_rect %p, src_data %p, pitch %u.\n", iface, dst_rect, src_data, pitch);
214 ID3D11DeviceContext_UpdateSubresource(
context,
bitmap->resource, 0, dst_rect ? &
box :
NULL, src_data, pitch, 0);
215 ID3D11DeviceContext_Release(
context);
216 ID3D11Device_Release(
device);
230 TRACE(
"iface %p.\n", iface);
258 TRACE(
"iface %p, options %#x, mapped_rect %p.\n", iface,
options, mapped_rect);
263 if (
bitmap->mapped_resource.pData)
287 ID3D11DeviceContext_Release(
context);
288 ID3D11Device_Release(
device);
292 WARN(
"Failed to map resource, hr %#lx.\n",
hr);
296 mapped_rect->
pitch =
bitmap->mapped_resource.RowPitch;
297 mapped_rect->
bits =
bitmap->mapped_resource.pData;
306 TRACE(
"iface %p.\n", iface);
383 ID3D11Resource_QueryInterface(
resource, &IID_IDXGISurface, (
void **)&
bitmap->surface);
389 WARN(
"Failed to create RTV, hr %#lx.\n",
hr);
395 WARN(
"Failed to create SRV, hr %#lx.\n",
hr);
428 D3D11_TEXTURE2D_DESC texture_desc;
434 WARN(
"Tried to create bitmap with unsupported format {%#x / %#x}.\n",
435 desc->pixelFormat.format,
desc->pixelFormat.alphaMode);
439 if (
desc->dpiX == 0.0f &&
desc->dpiY == 0.0f)
446 else if (
desc->dpiX <= 0.0f ||
desc->dpiY <= 0.0f)
454 texture_desc.Width =
size.width;
455 texture_desc.Height =
size.height;
456 if (!texture_desc.Width || !texture_desc.Height)
457 texture_desc.Width = texture_desc.Height = 1;
458 texture_desc.MipLevels = 1;
459 texture_desc.ArraySize = 1;
460 texture_desc.Format =
desc->pixelFormat.format;
461 texture_desc.SampleDesc.Count = 1;
462 texture_desc.SampleDesc.Quality = 0;
463 texture_desc.Usage = D3D11_USAGE_DEFAULT;
465 texture_desc.Usage = D3D11_USAGE_STAGING;
466 texture_desc.BindFlags = 0;
468 texture_desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
470 texture_desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
471 texture_desc.CPUAccessFlags = 0;
473 texture_desc.CPUAccessFlags |= D3D11_CPU_ACCESS_READ;
474 texture_desc.MiscFlags = 0;
481 if (
FAILED(
hr = ID3D11Device1_CreateTexture2D(
context->d3d_device, &texture_desc,
484 ERR(
"Failed to create texture, hr %#lx.\n",
hr);
493 ID3D11Texture2D_Release(
texture);
500 D3D11_TEXTURE2D_DESC
desc;
504 if (
FAILED(IDXGISurface_QueryInterface(surface, &IID_ID3D11Texture2D, (
void **)&
texture)))
508 ID3D11Texture2D_Release(
texture);
510 if (
desc.BindFlags & D3D11_BIND_RENDER_TARGET)
512 if (!(
desc.BindFlags & D3D11_BIND_SHADER_RESOURCE))
516 if (
desc.Usage == D3D11_USAGE_STAGING &&
desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)
540 ID3D11Device_Release(
device);
552 if (
d.pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN)
557 d.pixelFormat = src_impl->
format;
560 d.bitmapOptions = src_impl->
options;
561 d.colorContext =
NULL;
567 WARN(
"Tried to create bitmap with unsupported format {%#x / %#x}.\n",
568 desc->pixelFormat.format,
desc->pixelFormat.alphaMode);
597 WARN(
"Failed to get d3d resource from dxgi surface.\n");
602 ID3D11Device_Release(
device);
618 WARN(
"Failed to get surface desc, hr %#lx.\n",
hr);
626 d.pixelFormat.format = surface_desc.
Format;
633 d.pixelFormat.format = surface_desc.
Format;
636 if (
d.dpiX == 0.0f ||
d.dpiY == 0.0f)
665 unsigned int bpp, data_size;
686 if (
FAILED(
hr = IWICBitmapSource_GetSize(bitmap_source, &
size.width, &
size.height)))
688 WARN(
"Failed to get bitmap size, hr %#lx.\n",
hr);
696 bitmap_desc.
dpiX = 0.0f;
697 bitmap_desc.
dpiY = 0.0f;
708 WARN(
"Failed to get bitmap format, hr %#lx.\n",
hr);
716 d2d_format = &format_lookup[
i].d2d;
744 pitch = ((
bpp *
size.width) + 15) & ~15;
749 data_size =
size.height * pitch;
755 if (
FAILED(
hr = IWICBitmapSource_CopyPixels(bitmap_source, &
rect, pitch, data_size,
data)))
757 WARN(
"Failed to copy bitmap pixels, hr %#lx.\n",
hr);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define STDMETHODCALLTYPE
@ D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE
@ D2D1_BITMAP_OPTIONS_CANNOT_DRAW
@ D2D1_BITMAP_OPTIONS_CPU_READ
@ D2D1_BITMAP_OPTIONS_NONE
@ D2D1_BITMAP_OPTIONS_TARGET
@ D2D1_MAP_OPTIONS_DISCARD
static BOOL d2d_device_context_is_dxgi_target(const struct d2d_device_context *context)
#define D2DERR_UNSUPPORTED_PIXEL_FORMAT
@ D3D11_RESOURCE_MISC_GDI_COMPATIBLE
@ D3D11_MAP_WRITE_DISCARD
static HRESULT STDMETHODCALLTYPE d2d_bitmap_GetSurface(ID2D1Bitmap1 *iface, IDXGISurface **surface)
static D2D1_SIZE_F *STDMETHODCALLTYPE d2d_bitmap_GetSize(ID2D1Bitmap1 *iface, D2D1_SIZE_F *size)
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Unmap(ID2D1Bitmap1 *iface)
static void STDMETHODCALLTYPE d2d_bitmap_GetColorContext(ID2D1Bitmap1 *iface, ID2D1ColorContext **context)
static BOOL format_supported(const D2D1_PIXEL_FORMAT *format)
static struct d2d_bitmap * impl_from_ID2D1Bitmap1(ID2D1Bitmap1 *iface)
static D2D1_PIXEL_FORMAT *STDMETHODCALLTYPE d2d_bitmap_GetPixelFormat(ID2D1Bitmap1 *iface, D2D1_PIXEL_FORMAT *format)
static ULONG STDMETHODCALLTYPE d2d_bitmap_Release(ID2D1Bitmap1 *iface)
HRESULT d2d_bitmap_create(struct d2d_device_context *context, D2D1_SIZE_U size, const void *src_data, UINT32 pitch, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromMemory(ID2D1Bitmap1 *iface, const D2D1_RECT_U *dst_rect, const void *src_data, UINT32 pitch)
static void STDMETHODCALLTYPE d2d_bitmap_GetDpi(ID2D1Bitmap1 *iface, float *dpi_x, float *dpi_y)
static const struct ID2D1Bitmap1Vtbl d2d_bitmap_vtbl
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Map(ID2D1Bitmap1 *iface, D2D1_MAP_OPTIONS options, D2D1_MAPPED_RECT *mapped_rect)
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromRenderTarget(ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1RenderTarget *render_target, const D2D1_RECT_U *src_rect)
HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid, void *data, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
HRESULT d2d_bitmap_create_from_wic_bitmap(struct d2d_device_context *context, IWICBitmapSource *bitmap_source, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
static D2D1_SIZE_U *STDMETHODCALLTYPE d2d_bitmap_GetPixelSize(ID2D1Bitmap1 *iface, D2D1_SIZE_U *pixel_size)
static HRESULT d2d_bitmap_unmap(struct d2d_bitmap *bitmap)
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromBitmap(ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1Bitmap *bitmap, const D2D1_RECT_U *src_rect)
unsigned int d2d_get_bitmap_options_for_surface(IDXGISurface *surface)
static BOOL check_bitmap_options(unsigned int options)
static ULONG STDMETHODCALLTYPE d2d_bitmap_AddRef(ID2D1Bitmap1 *iface)
static D2D1_BITMAP_OPTIONS STDMETHODCALLTYPE d2d_bitmap_GetOptions(ID2D1Bitmap1 *iface)
static void STDMETHODCALLTYPE d2d_bitmap_GetFactory(ID2D1Bitmap1 *iface, ID2D1Factory **factory)
static void d2d_bitmap_init(struct d2d_bitmap *bitmap, struct d2d_device_context *context, ID3D11Resource *resource, D2D1_SIZE_U size, const D2D1_BITMAP_PROPERTIES1 *desc)
static HRESULT STDMETHODCALLTYPE d2d_bitmap_QueryInterface(ID2D1Bitmap1 *iface, REFIID iid, void **out)
const WICPixelFormatGUID * wic_format
static const struct pixelformatinfo supported_formats[]
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
D3D11_SHADER_VARIABLE_DESC desc
#define IsEqualGUID(rguid1, rguid2)
D2D1_PIXEL_FORMAT pixelFormat
ID2D1ColorContext * colorContext
D2D1_BITMAP_OPTIONS bitmapOptions
ID2D1Bitmap1 ID2D1Bitmap1_iface
ID3D11Resource * resource
D2D1_BITMAP_OPTIONS options
D3D11_MAPPED_SUBRESOURCE mapped_resource
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define D2DERR_WRONG_STATE
#define D2DERR_WRONG_FACTORY
#define D2DERR_INVALID_CALL
#define D2DERR_UNSUPPORTED_OPERATION