galahad: Support geometry shader / stream-output methods.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
José Fonseca
2012-11-07 11:45:45 +00:00
parent 658b73a246
commit 49dff2cb05
+110 -82
View File
@@ -204,6 +204,9 @@ galahad_context_bind_sampler_states(struct pipe_context *_pipe,
case PIPE_SHADER_FRAGMENT:
pipe->bind_fragment_sampler_states(pipe, num_samplers, samplers);
break;
case PIPE_SHADER_GEOMETRY:
pipe->bind_geometry_sampler_states(pipe, num_samplers, samplers);
break;
default:
assert(0);
}
@@ -227,6 +230,15 @@ galahad_context_bind_fragment_sampler_states(struct pipe_context *_pipe,
0, num_samplers, samplers);
}
static void
galahad_context_bind_geometry_sampler_states(struct pipe_context *_pipe,
unsigned num_samplers,
void **samplers)
{
galahad_context_bind_sampler_states(_pipe, PIPE_SHADER_GEOMETRY,
0, num_samplers, samplers);
}
static void
galahad_context_delete_sampler_state(struct pipe_context *_pipe,
@@ -315,72 +327,39 @@ galahad_context_delete_depth_stencil_alpha_state(struct pipe_context *_pipe,
depth_stencil_alpha);
}
static void *
galahad_context_create_fs_state(struct pipe_context *_pipe,
const struct pipe_shader_state *fs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
#define GLHD_SHADER_STATE(shader_type) \
static void * \
galahad_context_create_##shader_type##_state(struct pipe_context *_pipe, \
const struct pipe_shader_state *state) \
{ \
struct galahad_context *glhd_pipe = galahad_context(_pipe); \
struct pipe_context *pipe = glhd_pipe->pipe; \
return pipe->create_##shader_type##_state(pipe, state); \
} \
\
static void \
galahad_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
void *state) \
{ \
struct galahad_context *glhd_pipe = galahad_context(_pipe); \
struct pipe_context *pipe = glhd_pipe->pipe; \
pipe->bind_##shader_type##_state(pipe, state); \
} \
\
static void \
galahad_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
void *state) \
{ \
struct galahad_context *glhd_pipe = galahad_context(_pipe); \
struct pipe_context *pipe = glhd_pipe->pipe; \
pipe->delete_##shader_type##_state(pipe, state); \
}
return pipe->create_fs_state(pipe,
fs);
}
static void
galahad_context_bind_fs_state(struct pipe_context *_pipe,
void *fs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->bind_fs_state(pipe,
fs);
}
static void
galahad_context_delete_fs_state(struct pipe_context *_pipe,
void *fs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->delete_fs_state(pipe,
fs);
}
static void *
galahad_context_create_vs_state(struct pipe_context *_pipe,
const struct pipe_shader_state *vs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
return pipe->create_vs_state(pipe,
vs);
}
static void
galahad_context_bind_vs_state(struct pipe_context *_pipe,
void *vs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->bind_vs_state(pipe,
vs);
}
static void
galahad_context_delete_vs_state(struct pipe_context *_pipe,
void *vs)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->delete_vs_state(pipe,
vs);
}
GLHD_SHADER_STATE(fs)
GLHD_SHADER_STATE(vs)
GLHD_SHADER_STATE(gs)
#undef GLHD_SHADER_STATE
static void *
galahad_context_create_vertex_elements_state(struct pipe_context *_pipe,
@@ -595,6 +574,9 @@ galahad_context_set_sampler_views(struct pipe_context *_pipe,
case PIPE_SHADER_FRAGMENT:
pipe->set_fragment_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_GEOMETRY:
pipe->set_geometry_sampler_views(pipe, num, views);
break;
default:
assert(0);
}
@@ -611,13 +593,21 @@ galahad_context_set_vertex_sampler_views(struct pipe_context *_pipe,
static void
galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
unsigned num,
struct pipe_sampler_view **_views)
{
galahad_context_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT,
0, num, _views);
}
static void
galahad_context_set_geometry_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
galahad_context_set_sampler_views(_pipe, PIPE_SHADER_GEOMETRY,
0, num, _views);
}
static void
galahad_context_set_vertex_buffers(struct pipe_context *_pipe,
@@ -675,16 +665,54 @@ galahad_context_set_index_buffer(struct pipe_context *_pipe,
pipe->set_index_buffer(pipe, ib);
}
static INLINE struct pipe_stream_output_target *
galahad_context_create_stream_output_target(struct pipe_context *_pipe,
struct pipe_resource *_res,
unsigned buffer_offset,
unsigned buffer_size)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct galahad_resource *glhd_resource_res = galahad_resource(_res);
struct pipe_context *pipe = glhd_pipe->pipe;
struct pipe_resource *res = glhd_resource_res->resource;
return pipe->create_stream_output_target(pipe,
res, buffer_offset, buffer_size);
}
static INLINE void
galahad_context_stream_output_target_destroy(
struct pipe_context *_pipe,
struct pipe_stream_output_target *target)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->stream_output_target_destroy(pipe, target);
}
static INLINE void
galahad_context_set_stream_output_targets(struct pipe_context *_pipe,
unsigned num_targets,
struct pipe_stream_output_target **tgs,
unsigned append_bitmask)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->set_stream_output_targets(pipe, num_targets, tgs, append_bitmask);
}
static void
galahad_context_resource_copy_region(struct pipe_context *_pipe,
struct pipe_resource *_dst,
unsigned dst_level,
unsigned dstx,
unsigned dsty,
unsigned dstz,
struct pipe_resource *_src,
unsigned src_level,
const struct pipe_box *src_box)
struct pipe_resource *_dst,
unsigned dst_level,
unsigned dstx,
unsigned dsty,
unsigned dstz,
struct pipe_resource *_src,
unsigned src_level,
const struct pipe_box *src_box)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct galahad_resource *glhd_resource_dst = galahad_resource(_dst);
@@ -1021,7 +1049,7 @@ galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
GLHD_PIPE_INIT(create_sampler_state);
GLHD_PIPE_INIT(bind_fragment_sampler_states);
GLHD_PIPE_INIT(bind_vertex_sampler_states);
//GLHD_PIPE_INIT(bind_geometry_sampler_states);
GLHD_PIPE_INIT(bind_geometry_sampler_states);
//GLHD_PIPE_INIT(bind_compute_sampler_states);
GLHD_PIPE_INIT(delete_sampler_state);
GLHD_PIPE_INIT(create_rasterizer_state);
@@ -1036,9 +1064,9 @@ galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
GLHD_PIPE_INIT(create_vs_state);
GLHD_PIPE_INIT(bind_vs_state);
GLHD_PIPE_INIT(delete_vs_state);
//GLHD_PIPE_INIT(create_gs_state);
//GLHD_PIPE_INIT(bind_gs_state);
//GLHD_PIPE_INIT(delete_gs_state);
GLHD_PIPE_INIT(create_gs_state);
GLHD_PIPE_INIT(bind_gs_state);
GLHD_PIPE_INIT(delete_gs_state);
GLHD_PIPE_INIT(create_vertex_elements_state);
GLHD_PIPE_INIT(bind_vertex_elements_state);
GLHD_PIPE_INIT(delete_vertex_elements_state);
@@ -1053,14 +1081,14 @@ galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
GLHD_PIPE_INIT(set_viewport_state);
GLHD_PIPE_INIT(set_fragment_sampler_views);
GLHD_PIPE_INIT(set_vertex_sampler_views);
//GLHD_PIPE_INIT(set_geometry_sampler_views);
GLHD_PIPE_INIT(set_geometry_sampler_views);
//GLHD_PIPE_INIT(set_compute_sampler_views);
//GLHD_PIPE_INIT(set_shader_resources);
GLHD_PIPE_INIT(set_vertex_buffers);
GLHD_PIPE_INIT(set_index_buffer);
//GLHD_PIPE_INIT(create_stream_output_target);
//GLHD_PIPE_INIT(stream_output_target_destroy);
//GLHD_PIPE_INIT(set_stream_output_targets);
GLHD_PIPE_INIT(create_stream_output_target);
GLHD_PIPE_INIT(stream_output_target_destroy);
GLHD_PIPE_INIT(set_stream_output_targets);
GLHD_PIPE_INIT(resource_copy_region);
GLHD_PIPE_INIT(blit);
GLHD_PIPE_INIT(clear);