wined3d: Pass bind flags to wined3d_get_format().

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2018-10-31 13:01:50 +03:30 committed by Alexandre Julliard
parent ae6553bd0b
commit 7d83ebeed2
10 changed files with 30 additions and 30 deletions

View File

@ -1354,7 +1354,7 @@ static HRESULT wined3d_buffer_init(struct wined3d_buffer *buffer, struct wined3d
const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data, const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data,
void *parent, const struct wined3d_parent_ops *parent_ops) void *parent, const struct wined3d_parent_ops *parent_ops)
{ {
const struct wined3d_format *format = wined3d_get_format(device->adapter, WINED3DFMT_UNKNOWN, desc->usage); const struct wined3d_format *format = wined3d_get_format(device->adapter, WINED3DFMT_UNKNOWN, desc->bind_flags);
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
struct wined3d_resource *resource = &buffer->resource; struct wined3d_resource *resource = &buffer->resource;
BOOL dynamic_buffer_ok; BOOL dynamic_buffer_ok;

View File

@ -2005,9 +2005,9 @@ BOOL wined3d_adapter_gl_create_context(struct wined3d_context *context,
const struct wined3d_format *color_format; const struct wined3d_format *color_format;
const struct wined3d_d3d_info *d3d_info; const struct wined3d_d3d_info *d3d_info;
const struct wined3d_gl_info *gl_info; const struct wined3d_gl_info *gl_info;
unsigned int target_bind_flags;
BOOL aux_buffers = FALSE; BOOL aux_buffers = FALSE;
HGLRC ctx, share_ctx; HGLRC ctx, share_ctx;
DWORD target_usage;
unsigned int i; unsigned int i;
gl_info = context->gl_info; gl_info = context->gl_info;
@ -2052,7 +2052,7 @@ BOOL wined3d_adapter_gl_create_context(struct wined3d_context *context,
return FALSE; return FALSE;
color_format = target->resource.format; color_format = target->resource.format;
target_usage = target->resource.usage; target_bind_flags = target->resource.bind_flags;
/* In case of ORM_BACKBUFFER, make sure to request an alpha component for /* In case of ORM_BACKBUFFER, make sure to request an alpha component for
* X4R4G4B4/X8R8G8B8 as we might need it for the backbuffer. */ * X4R4G4B4/X8R8G8B8 as we might need it for the backbuffer. */
@ -2061,9 +2061,9 @@ BOOL wined3d_adapter_gl_create_context(struct wined3d_context *context,
aux_buffers = TRUE; aux_buffers = TRUE;
if (color_format->id == WINED3DFMT_B4G4R4X4_UNORM) if (color_format->id == WINED3DFMT_B4G4R4X4_UNORM)
color_format = wined3d_get_format(device->adapter, WINED3DFMT_B4G4R4A4_UNORM, target_usage); color_format = wined3d_get_format(device->adapter, WINED3DFMT_B4G4R4A4_UNORM, target_bind_flags);
else if (color_format->id == WINED3DFMT_B8G8R8X8_UNORM) else if (color_format->id == WINED3DFMT_B8G8R8X8_UNORM)
color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_usage); color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_bind_flags);
} }
/* DirectDraw supports 8bit paletted render targets and these are used by /* DirectDraw supports 8bit paletted render targets and these are used by
@ -2073,7 +2073,7 @@ BOOL wined3d_adapter_gl_create_context(struct wined3d_context *context,
* For this reason we require a format with 8bit alpha, so request * For this reason we require a format with 8bit alpha, so request
* A8R8G8B8. */ * A8R8G8B8. */
if (color_format->id == WINED3DFMT_P8_UINT) if (color_format->id == WINED3DFMT_P8_UINT)
color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_usage); color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_bind_flags);
/* When using FBOs for off-screen rendering, we only use the drawable for /* When using FBOs for off-screen rendering, we only use the drawable for
* presentation blits, and don't do any rendering to it. That means we * presentation blits, and don't do any rendering to it. That means we
@ -2085,8 +2085,8 @@ BOOL wined3d_adapter_gl_create_context(struct wined3d_context *context,
* conflicting pixel formats. */ * conflicting pixel formats. */
if (wined3d_settings.offscreen_rendering_mode != ORM_BACKBUFFER) if (wined3d_settings.offscreen_rendering_mode != ORM_BACKBUFFER)
{ {
color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_usage); color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_bind_flags);
ds_format = wined3d_get_format(device->adapter, WINED3DFMT_UNKNOWN, WINED3DUSAGE_DEPTHSTENCIL); ds_format = wined3d_get_format(device->adapter, WINED3DFMT_UNKNOWN, WINED3D_BIND_DEPTH_STENCIL);
} }
/* Try to find a pixel format which matches our requirements. */ /* Try to find a pixel format which matches our requirements. */

View File

@ -763,7 +763,7 @@ UINT CDECL wined3d_get_adapter_mode_count(const struct wined3d *wined3d, UINT ad
return 0; return 0;
adapter = &wined3d->adapters[adapter_idx]; adapter = &wined3d->adapters[adapter_idx];
format = wined3d_get_format(adapter, format_id, WINED3DUSAGE_RENDERTARGET); format = wined3d_get_format(adapter, format_id, WINED3D_BIND_RENDER_TARGET);
format_bits = format->byte_count * CHAR_BIT; format_bits = format->byte_count * CHAR_BIT;
memset(&mode, 0, sizeof(mode)); memset(&mode, 0, sizeof(mode));
@ -817,7 +817,7 @@ HRESULT CDECL wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT ada
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
adapter = &wined3d->adapters[adapter_idx]; adapter = &wined3d->adapters[adapter_idx];
format = wined3d_get_format(adapter, format_id, WINED3DUSAGE_RENDERTARGET); format = wined3d_get_format(adapter, format_id, WINED3D_BIND_RENDER_TARGET);
format_bits = format->byte_count * CHAR_BIT; format_bits = format->byte_count * CHAR_BIT;
memset(&m, 0, sizeof(m)); memset(&m, 0, sizeof(m));
@ -1076,7 +1076,7 @@ HRESULT CDECL wined3d_set_adapter_display_mode(struct wined3d *wined3d,
TRACE("mode %ux%u@%u %s %#x.\n", mode->width, mode->height, mode->refresh_rate, TRACE("mode %ux%u@%u %s %#x.\n", mode->width, mode->height, mode->refresh_rate,
debug_d3dformat(mode->format_id), mode->scanline_ordering); debug_d3dformat(mode->format_id), mode->scanline_ordering);
format = wined3d_get_format(adapter, mode->format_id, WINED3DUSAGE_RENDERTARGET); format = wined3d_get_format(adapter, mode->format_id, WINED3D_BIND_RENDER_TARGET);
new_mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; new_mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
new_mode.dmBitsPerPel = format->byte_count * CHAR_BIT; new_mode.dmBitsPerPel = format->byte_count * CHAR_BIT;
@ -1318,8 +1318,8 @@ HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d *wined3d,
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
adapter = &wined3d->adapters[adapter_idx]; adapter = &wined3d->adapters[adapter_idx];
rt_format = wined3d_get_format(adapter, render_target_format_id, WINED3DUSAGE_RENDERTARGET); rt_format = wined3d_get_format(adapter, render_target_format_id, WINED3D_BIND_RENDER_TARGET);
ds_format = wined3d_get_format(adapter, depth_stencil_format_id, WINED3DUSAGE_DEPTHSTENCIL); ds_format = wined3d_get_format(adapter, depth_stencil_format_id, WINED3D_BIND_DEPTH_STENCIL);
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
{ {
if ((rt_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_RENDERTARGET) if ((rt_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_RENDERTARGET)
@ -1538,8 +1538,8 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
adapter = &wined3d->adapters[adapter_idx]; adapter = &wined3d->adapters[adapter_idx];
adapter_format = wined3d_get_format(adapter, adapter_format_id, WINED3DUSAGE_RENDERTARGET); adapter_format = wined3d_get_format(adapter, adapter_format_id, WINED3D_BIND_RENDER_TARGET);
format = wined3d_get_format(adapter, check_format_id, usage); format = wined3d_get_format(adapter, check_format_id, bind_flags);
if (usage & WINED3DUSAGE_RENDERTARGET) if (usage & WINED3DUSAGE_RENDERTARGET)
bind_flags |= WINED3D_BIND_RENDER_TARGET; bind_flags |= WINED3D_BIND_RENDER_TARGET;

View File

@ -487,6 +487,6 @@ const struct wined3d_format *wined3d_resource_get_decompress_format(const struct
const struct wined3d_adapter *adapter = resource->device->adapter; const struct wined3d_adapter *adapter = resource->device->adapter;
if (resource->format_flags & (WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE) if (resource->format_flags & (WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE)
&& !(adapter->d3d_info.wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL)) && !(adapter->d3d_info.wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL))
return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM_SRGB, resource->usage); return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM_SRGB, resource->bind_flags);
return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM, resource->usage); return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM, resource->bind_flags);
} }

View File

@ -1614,7 +1614,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
format = texture->resource.format; format = texture->resource.format;
if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE))) if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE)))
format = wined3d_get_format(device->adapter, conversion->dst_format, texture->resource.usage); format = wined3d_get_format(device->adapter, conversion->dst_format, texture->resource.bind_flags);
/* Don't use PBOs for converted surfaces. During PBO conversion we look at /* Don't use PBOs for converted surfaces. During PBO conversion we look at
* WINED3D_TEXTURE_CONVERTED but it isn't set (yet) in all cases it is * WINED3D_TEXTURE_CONVERTED but it isn't set (yet) in all cases it is

View File

@ -669,7 +669,7 @@ static void wined3d_swapchain_apply_sample_count_override(const struct wined3d_s
adapter = swapchain->device->adapter; adapter = swapchain->device->adapter;
gl_info = &adapter->gl_info; gl_info = &adapter->gl_info;
if (!(format = wined3d_get_format(adapter, format_id, WINED3DUSAGE_RENDERTARGET))) if (!(format = wined3d_get_format(adapter, format_id, WINED3D_BIND_RENDER_TARGET)))
return; return;
if ((t = min(wined3d_settings.sample_count, gl_info->limits.samples))) if ((t = min(wined3d_settings.sample_count, gl_info->limits.samples)))
@ -726,7 +726,7 @@ static void wined3d_swapchain_cs_init(void *object)
* request a depth/stencil buffer in the likely case it's needed later. */ * request a depth/stencil buffer in the likely case it's needed later. */
for (i = 0; i < ARRAY_SIZE(formats); ++i) for (i = 0; i < ARRAY_SIZE(formats); ++i)
{ {
swapchain->ds_format = wined3d_get_format(adapter, formats[i], WINED3DUSAGE_DEPTHSTENCIL); swapchain->ds_format = wined3d_get_format(adapter, formats[i], WINED3D_BIND_DEPTH_STENCIL);
if ((swapchain->context[0] = context_create(swapchain, swapchain->front_buffer, swapchain->ds_format))) if ((swapchain->context[0] = context_create(swapchain, swapchain->front_buffer, swapchain->ds_format)))
break; break;
TRACE("Depth stencil format %s is not supported, trying next format.\n", debug_d3dformat(formats[i])); TRACE("Depth stencil format %s is not supported, trying next format.\n", debug_d3dformat(formats[i]));

View File

@ -1575,7 +1575,7 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT
device = texture->resource.device; device = texture->resource.device;
gl_info = &device->adapter->gl_info; gl_info = &device->adapter->gl_info;
d3d_info = &device->adapter->d3d_info; d3d_info = &device->adapter->d3d_info;
format = wined3d_get_format(device->adapter, format_id, texture->resource.usage); format = wined3d_get_format(device->adapter, format_id, texture->resource.bind_flags);
resource_size = wined3d_format_calculate_size(format, device->surface_alignment, width, height, 1); resource_size = wined3d_format_calculate_size(format, device->surface_alignment, width, height, 1);
if (!resource_size) if (!resource_size)
@ -1774,7 +1774,7 @@ void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct win
else if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE))) else if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE)))
{ {
texture->flags |= WINED3D_TEXTURE_CONVERTED; texture->flags |= WINED3D_TEXTURE_CONVERTED;
format = wined3d_get_format(device->adapter, conversion->dst_format, resource->usage); format = wined3d_get_format(device->adapter, conversion->dst_format, resource->bind_flags);
TRACE("Using format %s for color key conversion.\n", debug_d3dformat(format->id)); TRACE("Using format %s for color key conversion.\n", debug_d3dformat(format->id));
} }
format_gl = wined3d_format_gl(format); format_gl = wined3d_format_gl(format);
@ -2896,7 +2896,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
WARN("Texture cannot be created with a format of WINED3DFMT_UNKNOWN.\n"); WARN("Texture cannot be created with a format of WINED3DFMT_UNKNOWN.\n");
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
format = wined3d_get_format(device->adapter, desc->format, desc->usage); format = wined3d_get_format(device->adapter, desc->format, desc->bind_flags);
if (desc->usage & WINED3DUSAGE_DYNAMIC && (wined3d_resource_access_is_managed(desc->access) if (desc->usage & WINED3DUSAGE_DYNAMIC && (wined3d_resource_access_is_managed(desc->access)
|| desc->usage & WINED3DUSAGE_SCRATCH)) || desc->usage & WINED3DUSAGE_SCRATCH))
@ -3645,7 +3645,7 @@ HRESULT CDECL wined3d_texture_create(struct wined3d_device *device, const struct
if (desc->multisample_type != WINED3D_MULTISAMPLE_NONE) if (desc->multisample_type != WINED3D_MULTISAMPLE_NONE)
{ {
const struct wined3d_format *format = wined3d_get_format(device->adapter, desc->format, desc->usage); const struct wined3d_format *format = wined3d_get_format(device->adapter, desc->format, desc->bind_flags);
if (desc->multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE if (desc->multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE
&& desc->multisample_quality >= wined3d_popcount(format->multisample_types)) && desc->multisample_quality >= wined3d_popcount(format->multisample_types))

View File

@ -4060,7 +4060,7 @@ fail:
} }
const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *adapter, const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *adapter,
enum wined3d_format_id format_id, unsigned int resource_usage) enum wined3d_format_id format_id, unsigned int bind_flags)
{ {
const struct wined3d_format *format; const struct wined3d_format *format;
int idx = get_format_idx(format_id); int idx = get_format_idx(format_id);
@ -4075,7 +4075,7 @@ const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *ad
format = get_format_by_idx(adapter, idx); format = get_format_by_idx(adapter, idx);
if (resource_usage & WINED3DUSAGE_DEPTHSTENCIL && wined3d_format_is_typeless(format)) if (bind_flags & WINED3D_BIND_DEPTH_STENCIL && wined3d_format_is_typeless(format))
{ {
for (i = 0; i < ARRAY_SIZE(typeless_depth_stencil_formats); ++i) for (i = 0; i < ARRAY_SIZE(typeless_depth_stencil_formats); ++i)
{ {

View File

@ -87,7 +87,7 @@ static const struct wined3d_format *validate_resource_view(const struct wined3d_
const struct wined3d_adapter *adapter = resource->device->adapter; const struct wined3d_adapter *adapter = resource->device->adapter;
const struct wined3d_format *format; const struct wined3d_format *format;
format = wined3d_get_format(adapter, desc->format_id, resource->usage); format = wined3d_get_format(adapter, desc->format_id, resource->bind_flags);
if (resource->type == WINED3D_RTYPE_BUFFER && (desc->flags & WINED3D_VIEW_BUFFER_RAW)) if (resource->type == WINED3D_RTYPE_BUFFER && (desc->flags & WINED3D_VIEW_BUFFER_RAW))
{ {
if (format->id != WINED3DFMT_R32_TYPELESS) if (format->id != WINED3DFMT_R32_TYPELESS)
@ -96,7 +96,7 @@ static const struct wined3d_format *validate_resource_view(const struct wined3d_
return NULL; return NULL;
} }
format = wined3d_get_format(adapter, WINED3DFMT_R32_UINT, resource->usage); format = wined3d_get_format(adapter, WINED3DFMT_R32_UINT, resource->bind_flags);
} }
if (wined3d_format_is_typeless(format)) if (wined3d_format_is_typeless(format))
@ -118,7 +118,7 @@ static const struct wined3d_format *validate_resource_view(const struct wined3d_
return NULL; return NULL;
} }
format = wined3d_get_format(adapter, WINED3DFMT_R32_UINT, resource->usage); format = wined3d_get_format(adapter, WINED3DFMT_R32_UINT, resource->bind_flags);
element_size = buffer->structure_byte_stride; element_size = buffer->structure_byte_stride;
} }
else else

View File

@ -4425,7 +4425,7 @@ struct wined3d_format
}; };
const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *adapter, const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *adapter,
enum wined3d_format_id format_id, unsigned int resource_usage) DECLSPEC_HIDDEN; enum wined3d_format_id format_id, unsigned int bind_flags) DECLSPEC_HIDDEN;
void wined3d_format_calculate_pitch(const struct wined3d_format *format, unsigned int alignment, void wined3d_format_calculate_pitch(const struct wined3d_format *format, unsigned int alignment,
unsigned int width, unsigned int height, unsigned int *row_pitch, unsigned int *slice_pitch) DECLSPEC_HIDDEN; unsigned int width, unsigned int height, unsigned int *row_pitch, unsigned int *slice_pitch) DECLSPEC_HIDDEN;
UINT wined3d_format_calculate_size(const struct wined3d_format *format, UINT wined3d_format_calculate_size(const struct wined3d_format *format,