Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
97987bed
Commit
97987bed
authored
May 13, 2012
by
Józef Kucia
Committed by
Alexandre Julliard
May 14, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3dx9: Add DDS support in D3DXCreateTextureFromFile functions.
parent
69b94181
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
103 additions
and
1 deletion
+103
-1
d3dx9_36_private.h
dlls/d3dx9_36/d3dx9_36_private.h
+2
-0
surface.c
dlls/d3dx9_36/surface.c
+41
-0
texture.c
dlls/d3dx9_36/tests/texture.c
+44
-0
texture.c
dlls/d3dx9_36/texture.c
+16
-1
No files found.
dlls/d3dx9_36/d3dx9_36_private.h
View file @
97987bed
...
...
@@ -62,6 +62,8 @@ HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, LPVOID *buffer,
const
PixelFormatDesc
*
get_format_info
(
D3DFORMAT
format
)
DECLSPEC_HIDDEN
;
const
PixelFormatDesc
*
get_format_info_idx
(
int
idx
)
DECLSPEC_HIDDEN
;
HRESULT
load_texture_from_dds
(
IDirect3DTexture9
*
texture
,
const
void
*
src_data
,
const
PALETTEENTRY
*
palette
,
DWORD
filter
,
D3DCOLOR
color_key
,
const
D3DXIMAGE_INFO
*
src_info
)
DECLSPEC_HIDDEN
;
HRESULT
load_cube_texture_from_dds
(
IDirect3DCubeTexture9
*
cube_texture
,
const
void
*
src_data
,
const
PALETTEENTRY
*
palette
,
DWORD
filter
,
D3DCOLOR
color_key
,
const
D3DXIMAGE_INFO
*
src_info
)
DECLSPEC_HIDDEN
;
...
...
dlls/d3dx9_36/surface.c
View file @
97987bed
...
...
@@ -377,6 +377,47 @@ static HRESULT get_image_info_from_dds(const void *buffer, UINT length, D3DXIMAG
return
D3D_OK
;
}
HRESULT
load_texture_from_dds
(
IDirect3DTexture9
*
texture
,
const
void
*
src_data
,
const
PALETTEENTRY
*
palette
,
DWORD
filter
,
D3DCOLOR
color_key
,
const
D3DXIMAGE_INFO
*
src_info
)
{
HRESULT
hr
;
RECT
src_rect
;
UINT
src_pitch
;
UINT
mip_level
;
UINT
mip_levels
;
UINT
mip_level_size
;
UINT
width
,
height
;
IDirect3DSurface9
*
surface
;
const
struct
dds_header
*
header
=
src_data
;
const
BYTE
*
pixels
=
(
BYTE
*
)(
header
+
1
);
if
(
src_info
->
ResourceType
!=
D3DRTYPE_TEXTURE
)
return
D3DXERR_INVALIDDATA
;
width
=
src_info
->
Width
;
height
=
src_info
->
Height
;
mip_levels
=
min
(
src_info
->
MipLevels
,
IDirect3DTexture9_GetLevelCount
(
texture
));
for
(
mip_level
=
0
;
mip_level
<
mip_levels
;
mip_level
++
)
{
hr
=
calculate_dds_surface_size
(
src_info
,
width
,
height
,
&
src_pitch
,
&
mip_level_size
);
if
(
FAILED
(
hr
))
return
hr
;
SetRect
(
&
src_rect
,
0
,
0
,
width
,
height
);
IDirect3DTexture9_GetSurfaceLevel
(
texture
,
mip_level
,
&
surface
);
hr
=
D3DXLoadSurfaceFromMemory
(
surface
,
palette
,
NULL
,
pixels
,
src_info
->
Format
,
src_pitch
,
NULL
,
&
src_rect
,
filter
,
color_key
);
IDirect3DSurface9_Release
(
surface
);
if
(
FAILED
(
hr
))
return
hr
;
pixels
+=
mip_level_size
;
width
=
max
(
1
,
width
/
2
);
height
=
max
(
1
,
height
/
2
);
}
return
D3D_OK
;
}
HRESULT
load_cube_texture_from_dds
(
IDirect3DCubeTexture9
*
cube_texture
,
const
void
*
src_data
,
const
PALETTEENTRY
*
palette
,
DWORD
filter
,
DWORD
color_key
,
const
D3DXIMAGE_INFO
*
src_info
)
{
...
...
dlls/d3dx9_36/tests/texture.c
View file @
97987bed
...
...
@@ -25,6 +25,32 @@
#include "d3dx9tex.h"
#include "resources.h"
/* 2x2 16-bit dds, no mipmaps */
static
const
unsigned
char
dds_16bit
[]
=
{
0x44
,
0x44
,
0x53
,
0x20
,
0x7c
,
0x00
,
0x00
,
0x00
,
0x07
,
0x10
,
0x08
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x20
,
0x00
,
0x00
,
0x00
,
0x40
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x10
,
0x00
,
0x00
,
0x00
,
0x00
,
0x7c
,
0x00
,
0x00
,
0xe0
,
0x03
,
0x00
,
0x00
,
0x1f
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x10
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xff
,
0x7f
,
0xff
,
0x7f
,
0xff
,
0x7f
,
0xff
,
0x7f
};
/* 2x2 24-bit dds, 2 mipmaps */
static
const
unsigned
char
dds_24bit
[]
=
{
0x44
,
0x44
,
0x53
,
0x20
,
0x7c
,
0x00
,
0x00
,
0x00
,
0x07
,
0x10
,
0x0a
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x0c
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x20
,
0x00
,
0x00
,
0x00
,
0x40
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x18
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xff
,
0x00
,
0x00
,
0xff
,
0x00
,
0x00
,
0xff
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x08
,
0x10
,
0x40
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
};
/* 4x4 cube map dds */
static
const
unsigned
char
dds_cube_map
[]
=
{
0x44
,
0x44
,
0x53
,
0x20
,
0x7c
,
0x00
,
0x00
,
0x00
,
0x07
,
0x10
,
0x08
,
0x00
,
0x04
,
0x00
,
0x00
,
0x00
,
...
...
@@ -1106,6 +1132,23 @@ static void test_D3DXFillVolumeTexture(IDirect3DDevice9 *device)
IDirect3DVolumeTexture9_Release
(
tex
);
}
static
void
test_D3DXCreateTextureFromFileInMemory
(
IDirect3DDevice9
*
device
)
{
HRESULT
hr
;
IDirect3DTexture9
*
texture
;
hr
=
D3DXCreateTextureFromFileInMemory
(
device
,
dds_16bit
,
sizeof
(
dds_16bit
),
&
texture
);
ok
(
hr
==
D3D_OK
,
"D3DXCreateTextureFromFileInMemory returned %#x, expected %#x
\n
"
,
hr
,
D3D_OK
);
if
(
SUCCEEDED
(
hr
))
IDirect3DTexture9_Release
(
texture
);
hr
=
D3DXCreateTextureFromFileInMemory
(
device
,
dds_24bit
,
sizeof
(
dds_24bit
),
&
texture
);
ok
(
hr
==
D3D_OK
,
"D3DXCreateTextureFromFileInMemory returned %#x, expected %#x
\n
"
,
hr
,
D3D_OK
);
if
(
SUCCEEDED
(
hr
))
IDirect3DTexture9_Release
(
texture
);
hr
=
D3DXCreateTextureFromFileInMemory
(
device
,
dds_24bit
,
sizeof
(
dds_24bit
)
-
1
,
&
texture
);
ok
(
hr
==
D3DXERR_INVALIDDATA
,
"D3DXCreateTextureFromFileInMemory returned %#x, expected %#x
\n
"
,
hr
,
D3DXERR_INVALIDDATA
);
}
static
void
test_D3DXCreateCubeTextureFromFileInMemory
(
IDirect3DDevice9
*
device
)
{
HRESULT
hr
;
...
...
@@ -1229,6 +1272,7 @@ START_TEST(texture)
test_D3DXFillTexture
(
device
);
test_D3DXFillCubeTexture
(
device
);
test_D3DXFillVolumeTexture
(
device
);
test_D3DXCreateTextureFromFileInMemory
(
device
);
test_D3DXCreateCubeTextureFromFileInMemory
(
device
);
test_D3DXCreateVolumeTextureFromFileInMemory
(
device
);
...
...
dlls/d3dx9_36/texture.c
View file @
97987bed
...
...
@@ -504,6 +504,7 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 device,
BOOL
file_width
=
FALSE
,
file_height
=
FALSE
;
BOOL
file_format
=
FALSE
,
file_miplevels
=
FALSE
;
D3DXIMAGE_INFO
imginfo
;
UINT
loaded_miplevels
;
D3DCAPS9
caps
;
HRESULT
hr
;
...
...
@@ -571,6 +572,12 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 device,
return
hr
;
}
if
(
imginfo
.
MipLevels
<
miplevels
&&
(
D3DFMT_DXT1
<=
imginfo
.
Format
&&
imginfo
.
Format
<=
D3DFMT_DXT5
))
{
FIXME
(
"Generation of mipmaps for compressed pixel formats is not implemented yet
\n
"
);
miplevels
=
imginfo
.
MipLevels
;
}
if
(((
file_width
)
&&
(
width
!=
imginfo
.
Width
))
||
((
file_height
)
&&
(
height
!=
imginfo
.
Height
))
||
((
file_format
)
&&
(
format
!=
imginfo
.
Format
))
||
...
...
@@ -601,9 +608,16 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 device,
}
/* Load the file */
if
(
imginfo
.
ImageFileFormat
!=
D3DXIFF_DDS
)
{
IDirect3DTexture9_GetSurfaceLevel
(
*
texptr
,
0
,
&
surface
);
hr
=
D3DXLoadSurfaceFromFileInMemory
(
surface
,
palette
,
NULL
,
srcdata
,
srcdatasize
,
NULL
,
filter
,
colorkey
,
NULL
);
IDirect3DSurface9_Release
(
surface
);
}
else
{
hr
=
load_texture_from_dds
(
*
texptr
,
srcdata
,
palette
,
filter
,
colorkey
,
&
imginfo
);
}
if
(
FAILED
(
hr
))
{
...
...
@@ -612,7 +626,8 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 device,
return
hr
;
}
hr
=
D3DXFilterTexture
((
IDirect3DBaseTexture9
*
)
*
texptr
,
palette
,
0
,
mipfilter
);
loaded_miplevels
=
min
(
miplevels
,
imginfo
.
MipLevels
);
hr
=
D3DXFilterTexture
((
IDirect3DBaseTexture9
*
)
*
texptr
,
palette
,
loaded_miplevels
-
1
,
mipfilter
);
if
(
FAILED
(
hr
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment