wined3d: Add max_rt_count field to d3d_info.

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia 2018-08-24 15:44:03 +02:00 committed by Alexandre Julliard
parent dcd530b422
commit 619c54f49a
5 changed files with 26 additions and 17 deletions

View File

@ -3657,6 +3657,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
adapter->vertex_pipe = select_vertex_implementation(gl_info, adapter->shader_backend);
adapter->fragment_pipe = select_fragment_implementation(gl_info, adapter->shader_backend);
d3d_info->limits.max_rt_count = gl_info->limits.buffers;
d3d_info->limits.pointsize_max = gl_info->limits.pointsize_max;
adapter->shader_backend->shader_get_caps(gl_info, &shader_caps);

View File

@ -588,7 +588,7 @@ static void wined3d_cs_exec_clear(struct wined3d_cs *cs, const void *data)
void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects,
DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil)
{
unsigned int rt_count = cs->device->adapter->gl_info.limits.buffers;
unsigned int rt_count = cs->device->adapter->d3d_info.limits.max_rt_count;
const struct wined3d_state *state = &cs->device->state;
const struct wined3d_viewport *vp = &state->viewports[0];
struct wined3d_rendertarget_view *view;
@ -839,6 +839,7 @@ void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs,
static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data)
{
const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info;
const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info;
const struct wined3d_shader *geometry_shader;
struct wined3d_state *state = &cs->state;
@ -893,7 +894,7 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data)
if (state->textures[i])
wined3d_resource_release(&state->textures[i]->resource);
}
for (i = 0; i < gl_info->limits.buffers; ++i)
for (i = 0; i < d3d_info->limits.max_rt_count; ++i)
{
if (state->fb->render_targets[i])
wined3d_resource_release(state->fb->render_targets[i]->resource);
@ -906,7 +907,7 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data)
}
static void acquire_graphics_pipeline_resources(const struct wined3d_state *state,
BOOL indexed, const struct wined3d_gl_info *gl_info)
BOOL indexed, const struct wined3d_d3d_info *d3d_info)
{
unsigned int i;
@ -927,7 +928,7 @@ static void acquire_graphics_pipeline_resources(const struct wined3d_state *stat
if (state->textures[i])
wined3d_resource_acquire(&state->textures[i]->resource);
}
for (i = 0; i < gl_info->limits.buffers; ++i)
for (i = 0; i < d3d_info->limits.max_rt_count; ++i)
{
if (state->fb->render_targets[i])
wined3d_resource_acquire(state->fb->render_targets[i]->resource);
@ -943,7 +944,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, GLenum primitive_type, unsigned
int base_vertex_idx, unsigned int start_idx, unsigned int index_count,
unsigned int start_instance, unsigned int instance_count, BOOL indexed)
{
const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info;
const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info;
const struct wined3d_state *state = &cs->device->state;
struct wined3d_cs_draw *op;
@ -959,7 +960,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, GLenum primitive_type, unsigned
op->parameters.u.direct.instance_count = instance_count;
op->parameters.indexed = indexed;
acquire_graphics_pipeline_resources(state, indexed, gl_info);
acquire_graphics_pipeline_resources(state, indexed, d3d_info);
cs->ops->submit(cs, WINED3D_CS_QUEUE_DEFAULT);
}
@ -967,7 +968,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, GLenum primitive_type, unsigned
void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, GLenum primitive_type, unsigned int patch_vertex_count,
struct wined3d_buffer *buffer, unsigned int offset, BOOL indexed)
{
const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info;
const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info;
const struct wined3d_state *state = &cs->device->state;
struct wined3d_cs_draw *op;
@ -980,7 +981,7 @@ void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, GLenum primitive_type,
op->parameters.u.indirect.offset = offset;
op->parameters.indexed = indexed;
acquire_graphics_pipeline_resources(state, indexed, gl_info);
acquire_graphics_pipeline_resources(state, indexed, d3d_info);
wined3d_resource_acquire(&buffer->resource);
cs->ops->submit(cs, WINED3D_CS_QUEUE_DEFAULT);

View File

@ -970,7 +970,7 @@ static void device_init_swapchain_state(struct wined3d_device *device, struct wi
BOOL ds_enable = swapchain->desc.enable_auto_depth_stencil;
unsigned int i;
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
for (i = 0; i < device->adapter->d3d_info.limits.max_rt_count; ++i)
{
wined3d_device_set_rendertarget_view(device, i, NULL, FALSE);
}
@ -1240,7 +1240,7 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
ERR("Something's still holding the auto depth/stencil view (%p).\n", view);
}
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
for (i = 0; i < device->adapter->d3d_info.limits.max_rt_count; ++i)
{
wined3d_device_set_rendertarget_view(device, i, NULL, FALSE);
}
@ -4380,11 +4380,14 @@ void CDECL wined3d_device_clear_unordered_access_view_uint(struct wined3d_device
struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(const struct wined3d_device *device,
unsigned int view_idx)
{
unsigned int max_rt_count;
TRACE("device %p, view_idx %u.\n", device, view_idx);
if (view_idx >= device->adapter->gl_info.limits.buffers)
max_rt_count = device->adapter->d3d_info.limits.max_rt_count;
if (view_idx >= max_rt_count)
{
WARN("Only %u render targets are supported.\n", device->adapter->gl_info.limits.buffers);
WARN("Only %u render targets are supported.\n", max_rt_count);
return NULL;
}
@ -4402,13 +4405,15 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device
unsigned int view_idx, struct wined3d_rendertarget_view *view, BOOL set_viewport)
{
struct wined3d_rendertarget_view *prev;
unsigned int max_rt_count;
TRACE("device %p, view_idx %u, view %p, set_viewport %#x.\n",
device, view_idx, view, set_viewport);
if (view_idx >= device->adapter->gl_info.limits.buffers)
max_rt_count = device->adapter->d3d_info.limits.max_rt_count;
if (view_idx >= max_rt_count)
{
WARN("Only %u render targets are supported.\n", device->adapter->gl_info.limits.buffers);
WARN("Only %u render targets are supported.\n", max_rt_count);
return WINED3DERR_INVALIDCALL;
}
@ -4706,6 +4711,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
const struct wined3d_swapchain_desc *swapchain_desc, const struct wined3d_display_mode *mode,
wined3d_device_reset_cb callback, BOOL reset_state)
{
const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info;
struct wined3d_resource *resource, *cursor;
struct wined3d_swapchain *swapchain;
struct wined3d_view_desc view_desc;
@ -4739,7 +4745,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
state_unbind_resources(&device->state);
}
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
for (i = 0; i < d3d_info->limits.max_rt_count; ++i)
{
wined3d_device_set_rendertarget_view(device, i, NULL, FALSE);
}
@ -5038,7 +5044,7 @@ void device_resource_released(struct wined3d_device *device, struct wined3d_reso
if (device->d3d_initialized)
{
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
for (i = 0; i < ARRAY_SIZE(device->fb.render_targets); ++i)
{
if ((rtv = device->fb.render_targets[i]) && rtv->resource == resource)
ERR("Resource %p is still in use as render target %u.\n", resource, i);

View File

@ -2201,7 +2201,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
caps->AdapterOrdinalInGroup = 0;
caps->NumberOfAdaptersInGroup = 1;
caps->NumSimultaneousRTs = gl_info->limits.buffers;
caps->NumSimultaneousRTs = d3d_info->limits.max_rt_count;
caps->StretchRectFilterCaps = WINED3DPTFILTERCAPS_MINFPOINT |
WINED3DPTFILTERCAPS_MAGFPOINT |

View File

@ -164,6 +164,7 @@ struct wined3d_d3d_limits
unsigned int ffp_vertex_blend_matrices;
unsigned int active_light_count;
unsigned int max_rt_count;
float pointsize_max;
};