diff --git a/src/gallium/winsys/svga/drm/vmw_screen_svga.c b/src/gallium/winsys/svga/drm/vmw_screen_svga.c index aa18a58c618..606e51ee68f 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen_svga.c +++ b/src/gallium/winsys/svga/drm/vmw_screen_svga.c @@ -486,8 +486,8 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, p_atomic_set(&surface->validated, 0); surface->screen = vws; (void) mtx_init(&surface->mutex, mtx_plain); - surface->shared = !!(usage & SVGA_SURFACE_USAGE_SHARED); - provider = (surface->shared) ? vws->pools.dma_base : vws->pools.dma_fenced; + surface->nodiscard = !!(usage & SVGA_SURFACE_USAGE_SHARED); + provider = (surface->nodiscard) ? vws->pools.dma_base : vws->pools.dma_fenced; /* * When multisampling is not supported sample count received is 0, @@ -517,75 +517,31 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, } if (sws->have_gb_objects) { - SVGAGuestPtr ptr = {0,0}; - - /* - * If the backing buffer size is small enough, try to allocate a - * buffer out of the buffer cache. Otherwise, let the kernel allocate - * a suitable buffer for us. - */ - if (buffer_size < VMW_TRY_CACHED_SIZE && !surface->shared) { - struct pb_buffer *pb_buf; - - surface->size = buffer_size; - desc.pb_desc.alignment = 4096; - desc.pb_desc.usage = 0; - pb_buf = provider->create_buffer(provider, buffer_size, &desc.pb_desc); - surface->buf = vmw_svga_winsys_buffer_wrap(pb_buf); - if (surface->buf && !vmw_dma_bufmgr_region_ptr(pb_buf, &ptr)) - assert(0); - } + struct pb_buffer *pb_buf; surface->sid = vmw_ioctl_gb_surface_create(vws, flags, format, usage, size, numLayers, - numMipLevels, sampleCount, - ptr.gmrId, + numMipLevels, sampleCount, 0, multisample_pattern, quality_level, - surface->buf ? NULL : &desc.region); - - if (surface->sid == SVGA3D_INVALID_ID) { - if (surface->buf == NULL) { - goto no_sid; - } else { - /* - * Kernel refused to allocate a surface for us. - * Perhaps something was wrong with our buffer? - * This is really a guard against future new size requirements - * on the backing buffers. - */ - vmw_svga_winsys_buffer_destroy(sws, surface->buf); - surface->buf = NULL; - surface->sid = vmw_ioctl_gb_surface_create(vws, flags, format, usage, - size, numLayers, - numMipLevels, sampleCount, - 0, multisample_pattern, - quality_level, - &desc.region); - if (surface->sid == SVGA3D_INVALID_ID) - goto no_sid; - } - } + if (surface->sid == SVGA3D_INVALID_ID) + goto no_sid; /* - * If the kernel created the buffer for us, wrap it into a + * The kernel created the buffer for us, wrap it into a * vmw_svga_winsys_buffer. */ + surface->size = vmw_region_size(desc.region); + desc.pb_desc.alignment = 4096; + desc.pb_desc.usage = VMW_BUFFER_USAGE_SHARED; + pb_buf = provider->create_buffer(provider, surface->size, + &desc.pb_desc); + surface->buf = vmw_svga_winsys_buffer_wrap(pb_buf); if (surface->buf == NULL) { - struct pb_buffer *pb_buf; - - surface->size = vmw_region_size(desc.region); - desc.pb_desc.alignment = 4096; - desc.pb_desc.usage = VMW_BUFFER_USAGE_SHARED; - pb_buf = provider->create_buffer(provider, surface->size, - &desc.pb_desc); - surface->buf = vmw_svga_winsys_buffer_wrap(pb_buf); - if (surface->buf == NULL) { - vmw_ioctl_region_destroy(desc.region); - vmw_ioctl_surface_destroy(vws, surface->sid); - goto no_sid; - } + vmw_ioctl_region_destroy(desc.region); + vmw_ioctl_surface_destroy(vws, surface->sid); + goto no_sid; } } else { /* Legacy surface only support 32-bit svga3d flags */ diff --git a/src/gallium/winsys/svga/drm/vmw_surface.c b/src/gallium/winsys/svga/drm/vmw_surface.c index a868b2c5ffd..407cc7cd2f4 100644 --- a/src/gallium/winsys/svga/drm/vmw_surface.c +++ b/src/gallium/winsys/svga/drm/vmw_surface.c @@ -108,7 +108,7 @@ vmw_svga_winsys_surface_map(struct svga_winsys_context *swc, * If we intend to read, there's no point discarding the * data if busy. */ - if (flags & PIPE_MAP_READ || vsrf->shared) + if (flags & PIPE_MAP_READ || vsrf->nodiscard) flags &= ~PIPE_MAP_DISCARD_WHOLE_RESOURCE; /* diff --git a/src/gallium/winsys/svga/drm/vmw_surface.h b/src/gallium/winsys/svga/drm/vmw_surface.h index 1f8757b8e80..b0b273f8224 100644 --- a/src/gallium/winsys/svga/drm/vmw_surface.h +++ b/src/gallium/winsys/svga/drm/vmw_surface.h @@ -44,7 +44,7 @@ struct vmw_svga_winsys_surface uint32_t mapcount; /* Number of mappers */ uint32_t map_mode; /* PIPE_MAP_[READ|WRITE] */ void *data; /* Pointer to data if mapcount != 0*/ - bool shared; /* Shared surface. Never discard */ + bool nodiscard; /* Never discard */ uint32_t size; /* Size of backing buffer */ bool rebind; /* Surface needs a rebind after next unmap */ };