X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fnoop%2Fnoop_pipe.c;h=165284a90bfd0262360a217ea75372a4a59dc949;hb=dc5fc3c2f60b4c208369e0eddbf416af059d88c7;hp=90b6ebf36b5a6c35965156f8e52e298c6ddd481a;hpb=25485f4b69447514ab8b595aced90c75606a99bd;p=mesa.git diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c index 90b6ebf36b5..165284a90bf 100644 --- a/src/gallium/drivers/noop/noop_pipe.c +++ b/src/gallium/drivers/noop/noop_pipe.c @@ -22,13 +22,13 @@ */ #include #include -#include -#include -#include -#include -#include -#include -#include +#include "pipe/p_defines.h" +#include "pipe/p_state.h" +#include "pipe/p_context.h" +#include "pipe/p_screen.h" +#include "util/u_memory.h" +#include "util/u_inlines.h" +#include "util/u_format.h" #include "noop_public.h" DEBUG_GET_ONCE_BOOL_OPTION(noop, "GALLIUM_NOOP", FALSE) @@ -46,7 +46,7 @@ struct noop_pipe_screen { struct noop_query { unsigned query; }; -static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type) +static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type, unsigned index) { struct noop_query *query = CALLOC_STRUCT(noop_query); @@ -58,8 +58,9 @@ static void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *quer FREE(query); } -static void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query) +static boolean noop_begin_query(struct pipe_context *ctx, struct pipe_query *query) { + return true; } static void noop_end_query(struct pipe_context *ctx, struct pipe_query *query) @@ -68,7 +69,8 @@ static void noop_end_query(struct pipe_context *ctx, struct pipe_query *query) static boolean noop_get_query_result(struct pipe_context *ctx, struct pipe_query *query, - boolean wait, void *vresult) + boolean wait, + union pipe_query_result *vresult) { uint64_t *result = (uint64_t*)vresult; @@ -94,14 +96,14 @@ static struct pipe_resource *noop_resource_create(struct pipe_screen *screen, unsigned stride; nresource = CALLOC_STRUCT(noop_resource); - if (nresource == NULL) + if (!nresource) return NULL; stride = util_format_get_stride(templ->format, templ->width0); nresource->base = *templ; nresource->base.screen = screen; nresource->size = stride * templ->height0 * templ->depth0; - nresource->data = malloc(nresource->size); + nresource->data = MALLOC(nresource->size); pipe_reference_init(&nresource->base.reference, 1); if (nresource->data == NULL) { FREE(nresource); @@ -137,57 +139,36 @@ static void noop_resource_destroy(struct pipe_screen *screen, { struct noop_resource *nresource = (struct noop_resource *)resource; - free(nresource->data); + FREE(nresource->data); FREE(resource); } -static struct pipe_resource *noop_user_buffer_create(struct pipe_screen *screen, - void *ptr, unsigned bytes, - unsigned bind) -{ - struct pipe_resource templ; - - templ.target = PIPE_BUFFER; - templ.format = PIPE_FORMAT_R8_UNORM; - templ.usage = PIPE_USAGE_IMMUTABLE; - templ.bind = bind; - templ.width0 = bytes; - templ.height0 = 1; - templ.depth0 = 1; - templ.flags = 0; - return noop_resource_create(screen, &templ); -} - /* * transfer */ -static struct pipe_transfer *noop_get_transfer(struct pipe_context *context, - struct pipe_resource *resource, - unsigned level, - enum pipe_transfer_usage usage, - const struct pipe_box *box) -{ - struct pipe_transfer *transfer; - - transfer = CALLOC_STRUCT(pipe_transfer); - if (transfer == NULL) - return NULL; - pipe_resource_reference(&transfer->resource, resource); - transfer->level = level; - transfer->usage = usage; - transfer->box = *box; - transfer->stride = 1; - transfer->layer_stride = 1; - return transfer; -} - static void *noop_transfer_map(struct pipe_context *pipe, - struct pipe_transfer *transfer) + struct pipe_resource *resource, + unsigned level, + enum pipe_transfer_usage usage, + const struct pipe_box *box, + struct pipe_transfer **ptransfer) { - struct noop_resource *nresource = (struct noop_resource *)transfer->resource; + struct pipe_transfer *transfer; + struct noop_resource *nresource = (struct noop_resource *)resource; - return nresource->data; + transfer = CALLOC_STRUCT(pipe_transfer); + if (!transfer) + return NULL; + pipe_resource_reference(&transfer->resource, resource); + transfer->level = level; + transfer->usage = usage; + transfer->box = *box; + transfer->stride = 1; + transfer->layer_stride = 1; + *ptransfer = transfer; + + return nresource->data; } static void noop_transfer_flush_region(struct pipe_context *pipe, @@ -199,13 +180,8 @@ static void noop_transfer_flush_region(struct pipe_context *pipe, static void noop_transfer_unmap(struct pipe_context *pipe, struct pipe_transfer *transfer) { -} - -static void noop_transfer_destroy(struct pipe_context *pipe, - struct pipe_transfer *transfer) -{ - pipe_resource_reference(&transfer->resource, NULL); - FREE(transfer); + pipe_resource_reference(&transfer->resource, NULL); + FREE(transfer); } static void noop_transfer_inline_write(struct pipe_context *pipe, @@ -224,13 +200,13 @@ static void noop_transfer_inline_write(struct pipe_context *pipe, * clear/copy */ static void noop_clear(struct pipe_context *ctx, unsigned buffers, - const float *rgba, double depth, unsigned stencil) + const union pipe_color_union *color, double depth, unsigned stencil) { } static void noop_clear_render_target(struct pipe_context *ctx, struct pipe_surface *dst, - const float *rgba, + const union pipe_color_union *color, unsigned dstx, unsigned dsty, unsigned width, unsigned height) { @@ -257,11 +233,25 @@ static void noop_resource_copy_region(struct pipe_context *ctx, } +static void noop_blit(struct pipe_context *ctx, + const struct pipe_blit_info *info) +{ +} + + +static void +noop_flush_resource(struct pipe_context *ctx, + struct pipe_resource *resource) +{ +} + + /* * context */ -static void noop_flush(struct pipe_context *ctx, unsigned flags, - struct pipe_fence_handle **fence) +static void noop_flush(struct pipe_context *ctx, + struct pipe_fence_handle **fence, + unsigned flags) { } @@ -270,13 +260,13 @@ static void noop_destroy_context(struct pipe_context *ctx) FREE(ctx); } -static struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv) +static struct pipe_context *noop_create_context(struct pipe_screen *screen, + void *priv, unsigned flags) { struct pipe_context *ctx = CALLOC_STRUCT(pipe_context); - if (ctx == NULL) + if (!ctx) return NULL; - ctx->winsys = screen->winsys; ctx->screen = screen; ctx->priv = priv; ctx->destroy = noop_destroy_context; @@ -285,16 +275,16 @@ static struct pipe_context *noop_create_context(struct pipe_screen *screen, void ctx->clear_render_target = noop_clear_render_target; ctx->clear_depth_stencil = noop_clear_depth_stencil; ctx->resource_copy_region = noop_resource_copy_region; + ctx->blit = noop_blit; + ctx->flush_resource = noop_flush_resource; ctx->create_query = noop_create_query; ctx->destroy_query = noop_destroy_query; ctx->begin_query = noop_begin_query; ctx->end_query = noop_end_query; ctx->get_query_result = noop_get_query_result; - ctx->get_transfer = noop_get_transfer; ctx->transfer_map = noop_transfer_map; ctx->transfer_flush_region = noop_transfer_flush_region; ctx->transfer_unmap = noop_transfer_unmap; - ctx->transfer_destroy = noop_transfer_destroy; ctx->transfer_inline_write = noop_transfer_inline_write; noop_init_state_functions(ctx); @@ -308,7 +298,7 @@ static struct pipe_context *noop_create_context(struct pipe_screen *screen, void static void noop_flush_frontbuffer(struct pipe_screen *_screen, struct pipe_resource *resource, unsigned level, unsigned layer, - void *context_private) + void *context_private, struct pipe_box *box) { } @@ -317,6 +307,11 @@ static const char *noop_get_vendor(struct pipe_screen* pscreen) return "X.Org"; } +static const char *noop_get_device_vendor(struct pipe_screen* pscreen) +{ + return "NONE"; +} + static const char *noop_get_name(struct pipe_screen* pscreen) { return "NOOP"; @@ -324,131 +319,40 @@ static const char *noop_get_name(struct pipe_screen* pscreen) static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param) { - switch (param) { - /* Supported features (boolean caps). */ - case PIPE_CAP_NPOT_TEXTURES: - case PIPE_CAP_TWO_SIDED_STENCIL: - case PIPE_CAP_GLSL: - case PIPE_CAP_OCCLUSION_QUERY: - case PIPE_CAP_POINT_SPRITE: - case PIPE_CAP_ANISOTROPIC_FILTER: - case PIPE_CAP_TEXTURE_MIRROR_CLAMP: - case PIPE_CAP_TEXTURE_MIRROR_REPEAT: - case PIPE_CAP_TEXTURE_SHADOW_MAP: - case PIPE_CAP_TEXTURE_SWIZZLE: - case PIPE_CAP_BLEND_EQUATION_SEPARATE: - - return 1; - case PIPE_CAP_DUAL_SOURCE_BLEND: - - case PIPE_CAP_SM3: - case PIPE_CAP_INDEP_BLEND_ENABLE: - case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: - case PIPE_CAP_DEPTH_CLAMP: - case PIPE_CAP_SHADER_STENCIL_EXPORT: - case PIPE_CAP_TIMER_QUERY: - case PIPE_CAP_STREAM_OUTPUT: - case PIPE_CAP_PRIMITIVE_RESTART: - case PIPE_CAP_INDEP_BLEND_FUNC: - return 0; - - /* Texturing. */ - case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: - case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: - case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: - return 14; - case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: - return 16; - case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: - case PIPE_CAP_MAX_COMBINED_SAMPLERS: - return 16; - - /* Render targets. */ - case PIPE_CAP_MAX_RENDER_TARGETS: - return 8; - - /* Fragment coordinate conventions. */ - case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: - case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: - return 1; - case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: - case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: - return 0; - - default: - return 0; - } + struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; + + return screen->get_param(screen, param); } -static float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param) -{ - switch (param) { - case PIPE_CAP_MAX_LINE_WIDTH: - case PIPE_CAP_MAX_LINE_WIDTH_AA: - case PIPE_CAP_MAX_POINT_WIDTH: - case PIPE_CAP_MAX_POINT_WIDTH_AA: - return 8192.0f; - case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: - return 16.0f; - case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: - return 16.0f; - default: - return 0.0f; - } +static float noop_get_paramf(struct pipe_screen* pscreen, + enum pipe_capf param) +{ + struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; + + return screen->get_paramf(screen, param); } static int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param) { - switch(shader) - { - case PIPE_SHADER_FRAGMENT: - case PIPE_SHADER_VERTEX: - case PIPE_SHADER_GEOMETRY: - break; - default: - return 0; - } + struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; - switch (param) { - case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: - case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: - case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: - case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: - return 16384; - case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: - return 8; - case PIPE_SHADER_CAP_MAX_INPUTS: - return 16; - case PIPE_SHADER_CAP_MAX_TEMPS: - return 256; - case PIPE_SHADER_CAP_MAX_ADDRS: - return 1; - case PIPE_SHADER_CAP_MAX_CONSTS: - return 256; - case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: - return 1; - case PIPE_SHADER_CAP_MAX_PREDS: - return 0; - case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: - return 1; - case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: - case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: - case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: - case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: - return 1; - default: - return 0; - } + return screen->get_shader_param(screen, shader, param); } -static boolean noop_is_format_supported(struct pipe_screen* screen, +static boolean noop_is_format_supported(struct pipe_screen* pscreen, enum pipe_format format, enum pipe_texture_target target, unsigned sample_count, - unsigned usage, - unsigned geom_flags) + unsigned usage) +{ + struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; + + return screen->is_format_supported(screen, format, target, sample_count, usage); +} + +static uint64_t noop_get_timestamp(struct pipe_screen *pscreen) { - return true; + return 0; } static void noop_destroy_screen(struct pipe_screen *screen) @@ -470,16 +374,16 @@ struct pipe_screen *noop_screen_create(struct pipe_screen *oscreen) } noop_screen = CALLOC_STRUCT(noop_pipe_screen); - if (noop_screen == NULL) { + if (!noop_screen) { return NULL; } noop_screen->oscreen = oscreen; screen = &noop_screen->pscreen; - screen->winsys = oscreen->winsys; screen->destroy = noop_destroy_screen; screen->get_name = noop_get_name; screen->get_vendor = noop_get_vendor; + screen->get_device_vendor = noop_get_device_vendor; screen->get_param = noop_get_param; screen->get_shader_param = noop_get_shader_param; screen->get_paramf = noop_get_paramf; @@ -489,8 +393,8 @@ struct pipe_screen *noop_screen_create(struct pipe_screen *oscreen) screen->resource_from_handle = noop_resource_from_handle; screen->resource_get_handle = noop_resource_get_handle; screen->resource_destroy = noop_resource_destroy; - screen->user_buffer_create = noop_user_buffer_create; screen->flush_frontbuffer = noop_flush_frontbuffer; + screen->get_timestamp = noop_get_timestamp; return screen; }