#include "svga_format.h"
+/**
+ * This is the primary driver entrypoint for allocating graphics memory
+ * (vertex/index/constant buffers, textures, etc)
+ */
static struct pipe_resource *
svga_resource_create(struct pipe_screen *screen,
const struct pipe_resource *template)
{
+ struct pipe_resource *r;
+
if (template->target == PIPE_BUFFER)
- return svga_buffer_create(screen, template);
+ r = svga_buffer_create(screen, template);
else
- return svga_texture_create(screen, template);
+ r = svga_texture_create(screen, template);
+
+ if (!r) {
+ struct svga_screen *svgascreen = svga_screen(screen);
+ svgascreen->hud.num_failed_allocations++;
+ }
+
+ return r;
}
* and format can be created.
* \Return TRUE if OK, FALSE if too large.
*/
-static boolean
+static bool
svga_can_create_resource(struct pipe_screen *screen,
const struct pipe_resource *res)
{
SVGA3dSize base_level_size;
uint32 numMipLevels;
uint32 arraySize;
+ uint32 numSamples;
if (res->target == PIPE_BUFFER) {
format = SVGA3D_BUFFER;
base_level_size.depth = 1;
numMipLevels = 1;
arraySize = 1;
+ numSamples = 0;
} else {
if (res->target == PIPE_TEXTURE_CUBE)
format = svga_translate_format(svgascreen, res->format, res->bind);
if (format == SVGA3D_FORMAT_INVALID)
- return FALSE;
+ return false;
base_level_size.width = res->width0;
base_level_size.height = res->height0;
base_level_size.depth = res->depth0;
numMipLevels = res->last_level + 1;
arraySize = res->array_size;
+ numSamples = res->nr_samples;
}
return sws->surface_can_create(sws, format, base_level_size,
- arraySize, numMipLevels);
+ arraySize, numMipLevels, numSamples);
}
svga->pipe.transfer_map = u_transfer_map_vtbl;
svga->pipe.transfer_flush_region = u_transfer_flush_region_vtbl;
svga->pipe.transfer_unmap = u_transfer_unmap_vtbl;
- svga->pipe.transfer_inline_write = u_transfer_inline_write_vtbl;
+ svga->pipe.buffer_subdata = u_default_buffer_subdata;
+ svga->pipe.texture_subdata = u_default_texture_subdata;
if (svga_have_vgpu10(svga)) {
svga->pipe.generate_mipmap = svga_texture_generate_mipmap;