mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-07 16:54:14 +01:00
[d3d9] Do not support cube textures with depth formats
This commit is contained in:
parent
b2789ab894
commit
611dc60018
@ -162,6 +162,9 @@ namespace dxvk {
|
|||||||
if (mapping.FormatSrgb == VK_FORMAT_UNDEFINED && srgb)
|
if (mapping.FormatSrgb == VK_FORMAT_UNDEFINED && srgb)
|
||||||
return D3DERR_NOTAVAILABLE;
|
return D3DERR_NOTAVAILABLE;
|
||||||
|
|
||||||
|
if (RType == D3DRTYPE_CUBETEXTURE && mapping.Aspect != VK_IMAGE_ASPECT_COLOR_BIT)
|
||||||
|
return D3DERR_NOTAVAILABLE;
|
||||||
|
|
||||||
if (RType == D3DRTYPE_VERTEXBUFFER || RType == D3DRTYPE_INDEXBUFFER)
|
if (RType == D3DRTYPE_VERTEXBUFFER || RType == D3DRTYPE_INDEXBUFFER)
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
HRESULT D3D9CommonTexture::NormalizeTextureProperties(
|
HRESULT D3D9CommonTexture::NormalizeTextureProperties(
|
||||||
D3D9DeviceEx* pDevice,
|
D3D9DeviceEx* pDevice,
|
||||||
|
D3DRESOURCETYPE ResourceType,
|
||||||
D3D9_COMMON_TEXTURE_DESC* pDesc) {
|
D3D9_COMMON_TEXTURE_DESC* pDesc) {
|
||||||
auto* options = pDevice->GetOptions();
|
auto* options = pDevice->GetOptions();
|
||||||
|
|
||||||
@ -131,6 +132,11 @@ namespace dxvk {
|
|||||||
options->disableA8RT)
|
options->disableA8RT)
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
|
// Cube textures with depth formats are not supported on any native
|
||||||
|
// driver, and allowing them triggers a broken code path in Gothic 3.
|
||||||
|
if (ResourceType == D3DRTYPE_CUBETEXTURE && mapping.Aspect != VK_IMAGE_ASPECT_COLOR_BIT)
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
// If the mapping is invalid then lets return invalid
|
// If the mapping is invalid then lets return invalid
|
||||||
// Some edge cases:
|
// Some edge cases:
|
||||||
// NULL format does not map to anything, but should succeed
|
// NULL format does not map to anything, but should succeed
|
||||||
|
@ -179,11 +179,14 @@ namespace dxvk {
|
|||||||
* Fills in undefined values and validates the texture
|
* Fills in undefined values and validates the texture
|
||||||
* parameters. Any error returned by this method should
|
* parameters. Any error returned by this method should
|
||||||
* be forwarded to the application.
|
* be forwarded to the application.
|
||||||
|
* \param [in] pDevice D3D9 device
|
||||||
|
* \param [in] ResourceType Resource type
|
||||||
* \param [in,out] pDesc Texture description
|
* \param [in,out] pDesc Texture description
|
||||||
* \returns \c S_OK if the parameters are valid
|
* \returns \c S_OK if the parameters are valid
|
||||||
*/
|
*/
|
||||||
static HRESULT NormalizeTextureProperties(
|
static HRESULT NormalizeTextureProperties(
|
||||||
D3D9DeviceEx* pDevice,
|
D3D9DeviceEx* pDevice,
|
||||||
|
D3DRESOURCETYPE ResourceType,
|
||||||
D3D9_COMMON_TEXTURE_DESC* pDesc);
|
D3D9_COMMON_TEXTURE_DESC* pDesc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -594,7 +594,7 @@ namespace dxvk {
|
|||||||
|| (Usage & D3DUSAGE_DYNAMIC)
|
|| (Usage & D3DUSAGE_DYNAMIC)
|
||||||
|| IsVendorFormat(EnumerateFormat(Format));
|
|| IsVendorFormat(EnumerateFormat(Format));
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_TEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -664,7 +664,7 @@ namespace dxvk {
|
|||||||
|| (Usage & D3DUSAGE_DYNAMIC)
|
|| (Usage & D3DUSAGE_DYNAMIC)
|
||||||
|| IsVendorFormat(EnumerateFormat(Format));
|
|| IsVendorFormat(EnumerateFormat(Format));
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_VOLUMETEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -721,7 +721,7 @@ namespace dxvk {
|
|||||||
|| (Usage & D3DUSAGE_DYNAMIC)
|
|| (Usage & D3DUSAGE_DYNAMIC)
|
||||||
|| IsVendorFormat(EnumerateFormat(Format));
|
|| IsVendorFormat(EnumerateFormat(Format));
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_CUBETEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -3798,7 +3798,7 @@ namespace dxvk {
|
|||||||
desc.IsAttachmentOnly = TRUE;
|
desc.IsAttachmentOnly = TRUE;
|
||||||
desc.IsLockable = Lockable;
|
desc.IsLockable = Lockable;
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_TEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -3846,7 +3846,7 @@ namespace dxvk {
|
|||||||
// Docs: Off-screen plain surfaces are always lockable, regardless of their pool types.
|
// Docs: Off-screen plain surfaces are always lockable, regardless of their pool types.
|
||||||
desc.IsLockable = TRUE;
|
desc.IsLockable = TRUE;
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_TEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
if (pSharedHandle != nullptr && Pool != D3DPOOL_DEFAULT)
|
if (pSharedHandle != nullptr && Pool != D3DPOOL_DEFAULT)
|
||||||
@ -3901,7 +3901,7 @@ namespace dxvk {
|
|||||||
// Docs don't say anything, so just assume it's lockable.
|
// Docs don't say anything, so just assume it's lockable.
|
||||||
desc.IsLockable = TRUE;
|
desc.IsLockable = TRUE;
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_TEXTURE, &desc)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -7891,7 +7891,7 @@ namespace dxvk {
|
|||||||
// Docs: Also note that - unlike textures - swap chain back buffers, render targets [..] can be locked
|
// Docs: Also note that - unlike textures - swap chain back buffers, render targets [..] can be locked
|
||||||
desc.IsLockable = TRUE;
|
desc.IsLockable = TRUE;
|
||||||
|
|
||||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, D3DRTYPE_TEXTURE, &desc)))
|
||||||
return D3DERR_NOTAVAILABLE;
|
return D3DERR_NOTAVAILABLE;
|
||||||
|
|
||||||
m_autoDepthStencil = new D3D9Surface(this, &desc, nullptr, nullptr);
|
m_autoDepthStencil = new D3D9Surface(this, &desc, nullptr, nullptr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user