On Wed, Jan 3, 2018 at 4:18 PM, Sven Hesse shesse@codeweavers.com wrote:
Signed-off-by: Sven Hesse shesse@codeweavers.com
dlls/d3d11/d3d11_private.h | 24 ++ dlls/d3d11/device.c | 13 +- dlls/d3d11/texture.c | 537 +++++++++++++++++++++++++++++++++++++++++++++ dlls/d3d11/utils.c | 4 + 4 files changed, 576 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h index 4d9f34ea42..6f4184b0b1 100644 --- a/dlls/d3d11/d3d11_private.h +++ b/dlls/d3d11/d3d11_private.h @@ -112,6 +112,30 @@ void skip_dword_unknown(const char **ptr, unsigned int count) DECLSPEC_HIDDEN; HRESULT parse_dxbc(const char *data, SIZE_T data_size, HRESULT (*chunk_handler)(const char *data, DWORD data_size, DWORD tag, void *ctx), void *ctx) DECLSPEC_HIDDEN;
+/* ID3D11Texture1D, ID3D10Texture1D */ +struct d3d_texture1d +{
- ID3D11Texture1D ID3D11Texture1D_iface;
- ID3D10Texture1D ID3D10Texture1D_iface;
- LONG refcount;
- struct wined3d_private_store private_store;
- IUnknown *dxgi_surface;
- struct wined3d_texture *wined3d_texture;
- D3D11_TEXTURE1D_DESC desc;
- ID3D11Device *device;
+};
+static inline struct d3d_texture1d *impl_from_ID3D10Texture1D(ID3D10Texture1D *iface) +{
- return CONTAINING_RECORD(iface, struct d3d_texture1d, ID3D10Texture1D_iface);
+}
Please move impl_from_ID3D10Texture1D() to texture.c file.
+static void STDMETHODCALLTYPE d3d11_texture1d_GetDesc(ID3D11Texture1D *iface, D3D11_TEXTURE1D_DESC *desc) +{
- struct d3d_texture1d *texture = impl_from_ID3D11Texture1D(iface);
- struct wined3d_resource_desc wined3d_desc;
- TRACE("iface %p, desc %p.\n", iface, desc);
- *desc = texture->desc;
- wined3d_mutex_lock();
- wined3d_resource_get_desc(wined3d_texture_get_resource(texture->wined3d_texture), &wined3d_desc);
- wined3d_mutex_unlock();
- /* FIXME: Resizing swapchain buffers can cause these to change. We'd like
* to get everything from wined3d, but e.g. bind flags don't exist as such
* there (yet). */
- desc->Width = wined3d_desc.width;
- desc->Format = dxgi_format_from_wined3dformat(wined3d_desc.format);
+}
Is it possible to create swapchains with 1D textures? We do not ever create such swapchains so the comment (and code) is not accurate.
+struct d3d_texture1d *unsafe_impl_from_ID3D10Texture1D(ID3D10Texture1D *iface) +{
- if (!iface)
return NULL;
- assert(iface->lpVtbl == &d3d10_texture1d_vtbl);
- return CONTAINING_RECORD(iface, struct d3d_texture1d, ID3D10Texture1D_iface);
+}
+static const struct wined3d_parent_ops d3d_texture1d_wined3d_parent_ops = +{
- d3d_texture1d_wined3d_object_released,
+};
+/* +static BOOL is_gdi_compatible_texture(const D3D11_TEXTURE1D_DESC *desc) +{
- if (!(desc->Format == DXGI_FORMAT_B8G8R8A8_UNORM
|| desc->Format == DXGI_FORMAT_B8G8R8A8_TYPELESS
|| desc->Format == DXGI_FORMAT_B8G8R8A8_UNORM_SRGB))
return FALSE;
- if (desc->Usage != D3D11_USAGE_DEFAULT)
return FALSE;
- return TRUE;
+}
+static BOOL validate_texture1d_desc(const D3D11_TEXTURE1D_DESC *desc) +{
- if (desc->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE
&& desc->ArraySize < 6)
- {
WARN("Invalid array size %u for cube texture.\n", desc->ArraySize);
return FALSE;
- }
- if (desc->MiscFlags & D3D11_RESOURCE_MISC_GDI_COMPATIBLE
&& !is_gdi_compatible_texture(desc))
- {
WARN("Incompatible description used to create GDI compatible texture.\n");
return FALSE;
- }
- return TRUE;
+}
It would be good to test if 1D textures need GDI support.
+*/
+HRESULT d3d_texture1d_create(struct d3d_device *device, const D3D11_TEXTURE1D_DESC *desc,
const D3D11_SUBRESOURCE_DATA *data, struct d3d_texture1d **out)
+{
- struct wined3d_resource_desc wined3d_desc;
- struct d3d_texture1d *texture;
- unsigned int levels;
- DWORD flags = 0;
- HRESULT hr;
+/*
- if (!validate_texture1d_desc(desc))
- {
WARN("Failed to validate texture desc.\n");
return E_INVALIDARG;
- }
+*/
Please do not introduce commented out code.
diff --git a/dlls/d3d11/utils.c b/dlls/d3d11/utils.c index e919c58da4..790e16eaaf 100644 --- a/dlls/d3d11/utils.c +++ b/dlls/d3d11/utils.c @@ -607,6 +607,10 @@ struct wined3d_resource *wined3d_resource_from_d3d11_resource(ID3D11Resource *re return wined3d_buffer_get_resource(unsafe_impl_from_ID3D11Buffer( (ID3D11Buffer *)resource)->wined3d_buffer);
case D3D11_RESOURCE_DIMENSION_TEXTURE1D:
return wined3d_texture_get_resource(unsafe_impl_from_ID3D11Texture1D(
(ID3D11Texture1D *)resource)->wined3d_texture);
case D3D11_RESOURCE_DIMENSION_TEXTURE2D: return wined3d_texture_get_resource(unsafe_impl_from_ID3D11Texture2D( (ID3D11Texture2D *)resource)->wined3d_texture);
You should also handle 1D textures in wined3d_resource_from_d3d10_resource().
-- 2.15.1