wined3d: Keep PBO support flag in d3d_info.

Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jan Sikorski 2021-09-10 15:58:40 +02:00 committed by Alexandre Julliard
parent fb69639776
commit 28b3d83d40
4 changed files with 8 additions and 7 deletions

View File

@ -5132,6 +5132,7 @@ static void wined3d_adapter_gl_init_d3d_info(struct wined3d_adapter_gl *adapter_
d3d_info->clip_control = !!gl_info->supported[ARB_CLIP_CONTROL];
d3d_info->full_ffp_varyings = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_FULL_FFP_VARYINGS);
d3d_info->scaled_resolve = !!gl_info->supported[EXT_FRAMEBUFFER_MULTISAMPLE_BLIT_SCALED];
d3d_info->pbo = !!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT];
d3d_info->feature_level = feature_level_from_caps(gl_info, &shader_caps, &fragment_caps);
if (gl_info->supported[ARB_TEXTURE_MULTISAMPLE])

View File

@ -2198,6 +2198,7 @@ static void wined3d_adapter_vk_init_d3d_info(struct wined3d_adapter_vk *adapter_
d3d_info->clip_control = true;
d3d_info->full_ffp_varyings = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_FULL_FFP_VARYINGS);
d3d_info->scaled_resolve = false;
d3d_info->pbo = false;
d3d_info->feature_level = feature_level_from_caps(&shader_caps);
d3d_info->multisample_draw_location = WINED3D_LOCATION_TEXTURE_RGB;

View File

@ -47,10 +47,9 @@ struct wined3d_rect_f
float b;
};
static BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture, const struct wined3d_gl_info *gl_info)
static BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture, const struct wined3d_d3d_info *d3d_info)
{
if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]
|| texture->resource.format->conv_byte_count
if (!d3d_info->pbo || texture->resource.format->conv_byte_count
|| (texture->flags & (WINED3D_TEXTURE_PIN_SYSMEM | WINED3D_TEXTURE_COND_NP2_EMULATED)))
return FALSE;
@ -1962,7 +1961,7 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, unsig
* If the surface didn't use PBOs previously but could now, don't
* change it - whatever made us not use PBOs might come back, e.g.
* color keys. */
if (texture->resource.map_binding == WINED3D_LOCATION_BUFFER && !wined3d_texture_use_pbo(texture, gl_info))
if (texture->resource.map_binding == WINED3D_LOCATION_BUFFER && !wined3d_texture_use_pbo(texture, d3d_info))
texture->resource.map_binding = WINED3D_LOCATION_SYSMEM;
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_SYSMEM);
@ -3629,7 +3628,6 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
{
const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info;
struct wined3d_device_parent *device_parent = device->device_parent;
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
unsigned int sub_count, i, j, size, offset = 0;
unsigned int pow2_width, pow2_height;
const struct wined3d_format *format;
@ -3837,11 +3835,11 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
texture->pow2_matrix[15] = 1.0f;
TRACE("x scale %.8e, y scale %.8e.\n", texture->pow2_matrix[0], texture->pow2_matrix[5]);
if (wined3d_texture_use_pbo(texture, gl_info))
if (wined3d_texture_use_pbo(texture, d3d_info))
texture->resource.map_binding = WINED3D_LOCATION_BUFFER;
if (desc->resource_type != WINED3D_RTYPE_TEXTURE_3D
|| !wined3d_texture_use_pbo(texture, gl_info))
|| !wined3d_texture_use_pbo(texture, d3d_info))
{
if (!wined3d_resource_prepare_sysmem(&texture->resource))
{

View File

@ -239,6 +239,7 @@ struct wined3d_d3d_info
uint32_t clip_control : 1;
uint32_t full_ffp_varyings : 1;
uint32_t scaled_resolve : 1;
uint32_t pbo : 1;
enum wined3d_feature_level feature_level;
DWORD multisample_draw_location;