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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user