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
8b1727ae
Commit
8b1727ae
authored
Aug 21, 2008
by
Stefan Dösinger
Committed by
Alexandre Julliard
Sep 02, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Report incorrect filtering settings in ValidateDevice.
parent
422eebd2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
126 additions
and
2 deletions
+126
-2
texture.c
dlls/d3d9/tests/texture.c
+88
-0
device.c
dlls/wined3d/device.c
+38
-2
No files found.
dlls/d3d9/tests/texture.c
View file @
8b1727ae
...
...
@@ -236,6 +236,93 @@ static void test_mipmap_gen(IDirect3DDevice9 *device)
IDirect3DTexture9_Release
(
texture
);
}
static
void
test_filter
(
IDirect3DDevice9
*
device
)
{
HRESULT
hr
;
IDirect3DTexture9
*
texture
;
IDirect3D9
*
d3d9
;
DWORD
passes
=
0
;
unsigned
int
i
;
struct
filter_tests
{
DWORD
magfilter
,
minfilter
,
mipfilter
;
BOOL
has_texture
;
HRESULT
result
;
}
tests
[]
=
{
{
D3DTEXF_NONE
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
FALSE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_POINT
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
FALSE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_NONE
,
D3DTEXF_POINT
,
D3DTEXF_NONE
,
FALSE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_POINT
,
D3DTEXF_POINT
,
D3DTEXF_NONE
,
FALSE
,
D3D_OK
},
{
D3DTEXF_POINT
,
D3DTEXF_POINT
,
D3DTEXF_POINT
,
FALSE
,
D3D_OK
},
{
D3DTEXF_NONE
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
TRUE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_POINT
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
TRUE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_POINT
,
D3DTEXF_POINT
,
D3DTEXF_NONE
,
TRUE
,
D3D_OK
},
{
D3DTEXF_POINT
,
D3DTEXF_POINT
,
D3DTEXF_POINT
,
TRUE
,
D3D_OK
},
{
D3DTEXF_NONE
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
TRUE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_LINEAR
,
D3DTEXF_NONE
,
D3DTEXF_NONE
,
TRUE
,
D3DERR_UNSUPPORTEDTEXTUREFILTER
},
{
D3DTEXF_LINEAR
,
D3DTEXF_POINT
,
D3DTEXF_NONE
,
TRUE
,
E_FAIL
},
{
D3DTEXF_POINT
,
D3DTEXF_LINEAR
,
D3DTEXF_NONE
,
TRUE
,
E_FAIL
},
{
D3DTEXF_POINT
,
D3DTEXF_POINT
,
D3DTEXF_LINEAR
,
TRUE
,
E_FAIL
},
};
hr
=
IDirect3DDevice9_GetDirect3D
(
device
,
&
d3d9
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_GetDirect3D(levels = 1) returned %08x
\n
"
,
hr
);
hr
=
IDirect3D9_CheckDeviceFormat
(
d3d9
,
0
,
D3DDEVTYPE_HAL
,
D3DFMT_X8R8G8B8
,
0
,
D3DRTYPE_TEXTURE
,
D3DFMT_A32B32G32R32F
);
if
(
FAILED
(
hr
))
{
skip
(
"D3DFMT_A32B32G32R32F not supported
\n
"
);
goto
out
;
}
hr
=
IDirect3D9_CheckDeviceFormat
(
d3d9
,
0
,
D3DDEVTYPE_HAL
,
D3DFMT_X8R8G8B8
,
D3DUSAGE_QUERY_FILTER
,
D3DRTYPE_TEXTURE
,
D3DFMT_A32B32G32R32F
);
if
(
SUCCEEDED
(
hr
))
{
skip
(
"D3DFMT_A32B32G32R32F supports filtering
\n
"
);
goto
out
;
}
hr
=
IDirect3DDevice9_CreateTexture
(
device
,
128
,
128
,
0
,
0
,
D3DFMT_A32B32G32R32F
,
D3DPOOL_MANAGED
,
&
texture
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_CreateTexture returned %08x
\n
"
,
hr
);
/* Needed for ValidateDevice */
hr
=
IDirect3DDevice9_SetFVF
(
device
,
D3DFVF_XYZ
|
D3DFVF_TEX1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetFVF returned %08x
\n
"
,
hr
);
for
(
i
=
0
;
i
<
(
sizeof
(
tests
)
/
sizeof
(
tests
[
0
]));
i
++
)
{
if
(
tests
[
i
].
has_texture
)
{
hr
=
IDirect3DDevice9_SetTexture
(
device
,
0
,
(
IDirect3DBaseTexture9
*
)
texture
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetTexture returned %08x
\n
"
,
hr
);
}
else
{
hr
=
IDirect3DDevice9_SetTexture
(
device
,
0
,
NULL
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetTexture returned %08x
\n
"
,
hr
);
}
hr
=
IDirect3DDevice9_SetSamplerState
(
device
,
0
,
D3DSAMP_MAGFILTER
,
tests
[
i
].
magfilter
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetSamplerState returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice9_SetSamplerState
(
device
,
0
,
D3DSAMP_MINFILTER
,
tests
[
i
].
minfilter
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetSamplerState returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice9_SetSamplerState
(
device
,
0
,
D3DSAMP_MIPFILTER
,
tests
[
i
].
mipfilter
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice9_SetSamplerState returned %08x
\n
"
,
hr
);
passes
=
0xdeadbeef
;
hr
=
IDirect3DDevice9_ValidateDevice
(
device
,
&
passes
);
ok
(
hr
==
tests
[
i
].
result
,
"ValidateDevice failed: Texture %s, min %u, mag %u, mip %u. Got %08x, expected %08x
\n
"
,
tests
[
i
].
has_texture
?
"TRUE"
:
"FALSE"
,
tests
[
i
].
magfilter
,
tests
[
i
].
minfilter
,
tests
[
i
].
mipfilter
,
hr
,
tests
[
i
].
result
);
if
(
SUCCEEDED
(
hr
))
{
ok
(
passes
!=
0
,
"ValidateDevice succeeded, passes is %u
\n
"
,
passes
);
}
else
{
ok
(
passes
==
0xdeadbeef
,
"ValidateDevice failed, passes is %u
\n
"
,
passes
);
}
}
hr
=
IDirect3DDevice9_SetTexture
(
device
,
0
,
NULL
);
out:
IDirect3D9_Release
(
d3d9
);
}
START_TEST
(
texture
)
{
D3DCAPS9
caps
;
...
...
@@ -257,4 +344,5 @@ START_TEST(texture)
test_texture_stage_states
(
device_ptr
,
caps
.
MaxTextureBlendStages
);
test_cube_textures
(
device_ptr
,
caps
.
TextureCaps
);
test_mipmap_gen
(
device_ptr
);
test_filter
(
device_ptr
);
}
dlls/wined3d/device.c
View file @
8b1727ae
...
...
@@ -5576,10 +5576,46 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetFrontBufferData(IWineD3DDevice *if
static
HRESULT
WINAPI
IWineD3DDeviceImpl_ValidateDevice
(
IWineD3DDevice
*
iface
,
DWORD
*
pNumPasses
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DBaseTextureImpl
*
texture
;
const
GlPixelFormatDesc
*
gl_info
;
DWORD
i
;
TRACE
(
"(%p) : %p
\n
"
,
This
,
pNumPasses
);
for
(
i
=
0
;
i
<
MAX_COMBINED_SAMPLERS
;
i
++
)
{
if
(
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MINFILTER
]
==
WINED3DTEXF_NONE
)
{
WARN
(
"Sampler state %u has minfilter D3DTEXF_NONE, returning D3DERR_UNSUPPORTEDTEXTUREFILTER
\n
"
,
i
);
return
WINED3DERR_UNSUPPORTEDTEXTUREFILTER
;
}
if
(
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MAGFILTER
]
==
WINED3DTEXF_NONE
)
{
WARN
(
"Sampler state %u has magfilter D3DTEXF_NONE, returning D3DERR_UNSUPPORTEDTEXTUREFILTER
\n
"
,
i
);
return
WINED3DERR_UNSUPPORTEDTEXTUREFILTER
;
}
texture
=
(
IWineD3DBaseTextureImpl
*
)
This
->
stateBlock
->
textures
[
i
];
if
(
!
texture
)
continue
;
getFormatDescEntry
(
texture
->
resource
.
format
,
&
GLINFO_LOCATION
,
&
gl_info
);
if
(
gl_info
->
Flags
&
WINED3DFMT_FLAG_FILTERING
)
continue
;
if
(
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MAGFILTER
]
!=
WINED3DTEXF_POINT
)
{
WARN
(
"Non-filterable texture and mag filter enabled on samper %u, returning E_FAIL
\n
"
,
i
);
return
E_FAIL
;
}
if
(
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MINFILTER
]
!=
WINED3DTEXF_POINT
)
{
WARN
(
"Non-filterable texture and min filter enabled on samper %u, returning E_FAIL
\n
"
,
i
);
return
E_FAIL
;
}
if
(
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MIPFILTER
]
!=
WINED3DTEXF_NONE
&&
This
->
stateBlock
->
samplerState
[
i
][
WINED3DSAMP_MIPFILTER
]
!=
WINED3DTEXF_POINT
/* sic! */
)
{
WARN
(
"Non-filterable texture and mip filter enabled on samper %u, returning E_FAIL
\n
"
,
i
);
return
E_FAIL
;
}
}
/* return a sensible default */
*
pNumPasses
=
1
;
/* TODO: If the window is minimized then validate device should return something other than WINED3D_OK */
FIXME
(
"(%p) : stub
\n
"
,
This
);
TRACE
(
"returning D3D_OK
\n
"
);
return
WINED3D_OK
;
}
...
...
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