diff options
author | Dave Airlie <[email protected]> | 2010-10-07 14:04:03 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2010-10-13 09:30:04 +1000 |
commit | 06642c61757b459f4f9283b721ad93b6f15386a7 (patch) | |
tree | 02aecacbfc1b6d495cf939cf6cd8073b3f3f308b /src/mesa/state_tracker/st_format.c | |
parent | d8f6ef456581644ab9444a1ed23542c2b0fff9e4 (diff) |
st/mesa: add option to choose a texture format that we won't render to.
We need a texture to put the drawpixels stuff into, an S8 texture is less
memory/bandwidth than the 32-bit X24S8, but we might not be able to render
directly to an S8, so this lets us specify we won't be rendering to this
texture.
Diffstat (limited to 'src/mesa/state_tracker/st_format.c')
-rw-r--r-- | src/mesa/state_tracker/st_format.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index b7c54cef841..cc585f9ce2e 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -781,8 +781,8 @@ st_choose_renderbuffer_format(struct pipe_screen *screen, * Called via ctx->Driver.chooseTextureFormat(). */ gl_format -st_ChooseTextureFormat(GLcontext *ctx, GLint internalFormat, - GLenum format, GLenum type) +st_ChooseTextureFormat_renderable(GLcontext *ctx, GLint internalFormat, + GLenum format, GLenum type, GLboolean renderable) { struct pipe_screen *screen = st_context(ctx)->pipe->screen; enum pipe_format pFormat; @@ -794,11 +794,14 @@ st_ChooseTextureFormat(GLcontext *ctx, GLint internalFormat, /* GL textures may wind up being render targets, but we don't know * that in advance. Specify potential render target flags now. */ - if (_mesa_is_depth_format(internalFormat) || - _mesa_is_depthstencil_format(internalFormat)) - bindings = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_DEPTH_STENCIL; - else - bindings = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET; + bindings = PIPE_BIND_SAMPLER_VIEW; + if (renderable == GL_TRUE) { + if (_mesa_is_depth_format(internalFormat) || + _mesa_is_depth_or_stencil_format(internalFormat)) + bindings |= PIPE_BIND_DEPTH_STENCIL; + else + bindings |= PIPE_BIND_RENDER_TARGET; + } pFormat = st_choose_format(screen, internalFormat, PIPE_TEXTURE_2D, 0, bindings); @@ -817,6 +820,13 @@ st_ChooseTextureFormat(GLcontext *ctx, GLint internalFormat, return st_pipe_format_to_mesa_format(pFormat); } +gl_format +st_ChooseTextureFormat(GLcontext *ctx, GLint internalFormat, + GLenum format, GLenum type) +{ + return st_ChooseTextureFormat_renderable(ctx, internalFormat, + format, type, GL_TRUE); +} /** * Test if a gallium format is equivalent to a GL format/type. |